Перейти к содержанию
    

Макропрограммирование в С под АРМ

Столкнулся с такой задачей - нужно реализовать в С макрос в котором будет объявляться переменная для хранения промежуточных данных. Причем переменная не должна умирать после завершения кода макроса, чтобы в последующем цикле макрос мог взять из нее данные. Мало того, этот макрос будет встречаться в коде сотни раз и в каждом месте он должен создавать свою переменную. Т.е. когда макрос встречается в коде первый раз, он должен создавать переменную VAR0001 , второй раз VAR0002 и т.д. Если переменная уже создана, т.е. макрос в этом месте выполняется повторно, то ее описание должно игнорироваться. В VisualDSP это реализуется автоматически, но как реализовать этот кошмар в С ??? Нужно перевести код с АДСП на АРМ. Код генерится автоматически с помощью специальной программы из макросов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Код генерится автоматически....

Тогда пример этого "кода" который якобы VisualDSP понимает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда пример этого "кода" который якобы 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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1.Ну и где генерация дивных переменных?

2.Интересует не сколько внутреннее устройство некого НЕ СИШНОГО макроса, а как это снаружи выглядит. Где VDSP сишный исходник-то?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да в том то и дело, что это асм, а теперь надо это реализовать в виде макросов в си

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что, на макросах свет клином сошёлся?

Всё это звучит жутко странно и совершенно непонятно. Может быть, лучше небольшой кусок кода для наглядности?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что, на макросах свет клином сошёлся?

 

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

 

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

 

Код

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

макро;

....

макро;

 

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

 

{static tmp;...}

....

{static tmp;...}

 

этот код и уйдёт в компилятор.

На каждое появление в коде конструкции {static tmp;...} будет выделена отдельная переменная tmp, которая будет создана и проинициализирована только один раз, и будет существовать и хранить значения до окончания работы программы. Каждая переменная tmp будет видима только внтури своих скобок {}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...