Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Макропрограммирование в С под АРМ
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
kochkuroff
Столкнулся с такой задачей - нужно реализовать в С макрос в котором будет объявляться переменная для хранения промежуточных данных. Причем переменная не должна умирать после завершения кода макроса, чтобы в последующем цикле макрос мог взять из нее данные. Мало того, этот макрос будет встречаться в коде сотни раз и в каждом месте он должен создавать свою переменную. Т.е. когда макрос встречается в коде первый раз, он должен создавать переменную VAR0001 , второй раз VAR0002 и т.д. Если переменная уже создана, т.е. макрос в этом месте выполняется повторно, то ее описание должно игнорироваться. В VisualDSP это реализуется автоматически, но как реализовать этот кошмар в С ??? Нужно перевести код с АДСП на АРМ. Код генерится автоматически с помощью специальной программы из макросов
zltigo
Цитата(kochkuroff @ Oct 8 2008, 06:46) *
Код генерится автоматически....

Тогда пример этого "кода" который якобы VisualDSP понимает.
kochkuroff
Цитата(zltigo @ Oct 8 2008, 11:21) *
Тогда пример этого "кода" который якобы VisualDSP понимает.


Код
.MACRO MTIMVCS(%0, %1, %2, %3, %4);
.LOCAL TIDEL, ETIDEL, NOSBR;
.INIT %3: 0;
     AR=DM(%0);
     AF=PASS AR;
     IF EQ JUMP TIDEL;
     AX1 = %2;
     DM(%3)=AX1;
     JUMP ETIDEL;    { AR=1}

TIDEL: AX0=DM(%3);   { AR=0}
     AF=PASS AX0;
     IF LE JUMP ETIDEL;

     AR=DM(%1);
     AR=PASS AR;
     IF EQ JUMP NOSBR;
     AX0=1;
NOSBR:
     AR=AX0-1;
     DM(%3)=AR;
     AR=1;
ETIDEL:  DM(%4)=AR;
zltigo
1.Ну и где генерация дивных переменных?
2.Интересует не сколько внутреннее устройство некого НЕ СИШНОГО макроса, а как это снаружи выглядит. Где VDSP сишный исходник-то?
kochkuroff
Да в том то и дело, что это асм, а теперь надо это реализовать в виде макросов в си
scifi
Что, на макросах свет клином сошёлся?
Всё это звучит жутко странно и совершенно непонятно. Может быть, лучше небольшой кусок кода для наглядности?
kochkuroff
Цитата
Что, на макросах свет клином сошёлся?


В данном случае да. Без макросов реализовать это не выйдет по той причине, что программа генерирующая код из макросов написана очень давно, лет 10 назад.

На другом форуме предложили следующее:

Код
#define макро {static tmp;...}
макро;
....
макро;

преобразуется препроцессором в:

{static tmp;...}
....
{static tmp;...}

этот код и уйдёт в компилятор.
На каждое появление в коде конструкции {static tmp;...} будет выделена отдельная переменная tmp, которая будет создана и проинициализирована только один раз, и будет существовать и хранить значения до окончания работы программы. Каждая переменная tmp будет видима только внтури своих скобок {}
zltigo
Цитата(kochkuroff @ Oct 8 2008, 11:14) *
На другом форуме предложили следующее:

Совершенно очевидное решение, если вопросы правильно задавать и границы отступления (поскольку это не полностью реализует описанное в первом посте) от желаемого указывать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.