Языки программирования. В качестве языков программирования для систем ЦОС обычно используются С и Ассемблер

В качестве языков программирования для систем ЦОС обычно используются С и Ассемблер. Значительно более широкое использование Ассемблера по сравнению с областями традиционного программирования (где преобладает С) объясняется необходимостью обработки сигнала в реальном масштабе времени, т.е. ставятся требования максимально эффективной реализации алгоритма с учетом возможностей параллельной обработки и других особенностей архитектуры конкретного процессора. Во-первых, языки высокого уровня типа С зачастую не очень эффективны для описания алгоритмов ЦОС. Во-вторых, для компиляторов трудно выполнить оптимизацию кода, принимая во внимание специфичную архитектуру DSP.

Кроме того, обычно в данной области не требуется обеспечивать совместимость программного обеспечения между различными процессорами, поскольку каждый код пишется под конкретную систему и конкретный процессор.

Пример повышения производительности при написании программного кода на Ассемблере по сравнению с Си (выполняется умножение элементов массива с суммированием произведений) приведен в табл. 4. Как видно из таблицы оптимизированный код в 4 раза быстрее, чем код, сгенерированный компилятором Си.

Табл.4

Текст на Си Неоптимизированный код на Ассемблере (время выполнения 4*LEN + 4) Оптимизированный код на Ассемблере (время выполнения ((LEN-2)+4)+4)
001 #define LEN 20 002 float dm x[LEN]; 003 float pm y[LEN]; 004 float result; 006 main() 008 { 009 int n; 010 float s; 011 for (n=0;n<LEN;n++) 012 s += x[n]*y[n]; 013 result = s 014 } 001 i12 = _y; 002 i4 = _x; 004 lcntr = 20, do (pc,4) until lce; 005 f2 = dm(i4,m6); 006 f4 = pm(i12,m14); 007 f8 = f2*f4; 008 f12 = f8 + f12; 010 dm(_result) = f12; 001 i12 = _y; 002 i4 = _x; 004 f2 = dm(i4,m6), f4 = pm(i12,m14) 005 f8 = f2*f4, f2 = dm(i4,m6), f4 = pm(i12,m14); 007 lcntr = 18, do (pc,1) until lce; 008 f12 = f8 + f12, f8 = f2*f4, f2 = dm(i4,m6), f4 = pm(I12,m14); 010 f12 = f8 + f12, f8 = f2*f4; 011 f12 = f8 + f12; 013 dm(_result) = f12;

Одним из способов повышения эффективности программ, написанных на Си является использование оптимизированных компиляторов Си и Си++. Однако следует иметь в виду, что оптимальный код при их использовании получается только для тех фрагментов программы, распараллеливание которых очевидно.

В общем случае при выборе языка программирования для конкретного приложения ЦОС и конкретного ЦСП следует приниматься во внимание такие факторы, как сложность алгоритмов (сложные – Си / простые – Ассемблер), требования достижения максимальной скорости функционирования процессора, количество разработчиков (много – Си / один – Ассемблер), что важнее: стоимость системы (Ассемблер) или стоимость разработки (Си), опыт работы, имеющиеся средства разработки программного обеспечения, поддержка производителей ЦСП.

И еще одно замечание. Предположим, Вы разработали алгоритм «на бумаге» и хотите проверить его эффективность. Что делать? Можно, конечно, написать программу на С/С++. Однако, гораздо более простой и быстрый путь заключается в использовании для моделирования системы Matlab. Во всем мире Matlab является стандартом де-факто при экспериментах с алгоритмами ЦОС. Она включает в себя богатейшие библиотеки готовых функций и процедур, в том числе и для обработки сигналов, изображений. В последней версии этой системы (на момент написания книги это V.6.1) имеется даже библиотека написания приложений для ЦПОС фирмы Texas Inst.. Входной язык программирования этой среды во многом похож на Си. Кроме того, в состав Matlab входит Simulink, в котором реализована концепция графического программирования, позволяющая создавать программы путем рисования блок-схем алгоритмов. Классический путь создания новых устройств такой: Matlab -> C -> ассемблер ЦПОС.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: