|
Макросы в AVRASM/AVRASM2 и других ASM, Можно ли опираться на макро-средства ассемблеров для AVR |
|
|
|
Jun 30 2010, 05:53
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 27-10-06
Пользователь №: 21 715

|
Наверное уже не первый кто спрашивает но поиск не дал результатов.
Можно ли в макрокомандах имеющихся для AVR ассемблеров использовать неопределенное кол-во параметров. Можно ли средствами макрокоманд AVRASM2 проверить переданный в макроопределение параметр по принципу есть\нет или меньше больше, если переданный параметр не константа (адрес, порт) а регистр. Может быть уже существует реализация команды push списком push_list ZH, ZL, YL, YH, R0 и т.д.?
|
|
|
|
|
 |
Ответов
|
Jul 6 2010, 09:29
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
2 SAAL: Что-то быстро найти нормальное описание avrasm2 мне не удалось  . А всю студию качать лениво. Но вот нашел некий пример здесь: Код .MACRO SET_BAT .IF @0>0x3F .MESSAGE "Address larger than 0x3f" lds @2, @0 sbr @2, (1<<@1) sts @0, @2 .ELSE .MESSAGE "Address less or equal 0x3f" .ENDIF .ENDMACRO Из него видно, что, если в качестве первого параметра вводить кол-во сохраняемых регистров, то при помощи .IF можно Вашу задачу решить. А может удасться проверить наличие параметра (типа @1=пустоте или еще как), тогда вообще будет то чего изначально хотелось.
|
|
|
|
|
Jul 7 2010, 12:11
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 27-10-06
Пользователь №: 21 715

|
Цитата(Artem_Petrik @ Jul 6 2010, 15:29)  2 SAAL: Что-то быстро найти нормальное описание avrasm2 мне не удалось  . А всю студию качать лениво. Описание из первых рук  Цитата(Artem_Petrik @ Jul 6 2010, 15:29)  Но вот нашел некий пример здесь: [code].MACRO SET_BAT .IF @0>0x3F ...... ... Из него видно, что, если в качестве первого параметра вводить кол-во сохраняемых регистров, то при помощи .IF можно Вашу задачу решить. Получается такая штука если я передаю в макрос константу 0x3F или 0x00 - то это константа, если регистр r0..r30 или через разименовывание по def-у то это зарезервированное имя и хоть застрелись для AVRASM2 этот параметр не константа. Получается так что параметры для MACRO в AVRASM2 автоматические по типу. Цитата(Artem_Petrik @ Jul 6 2010, 15:29)  А может удасться проверить наличие параметра (типа @1=пустоте или еще как), тогда вообще будет то чего изначально хотелось. ВОТ!!! И Вы тоже пришли к тому же мнению но нет проверки на пустоту не получается, точнее я не нахожу способа проверить параметр на пусто
|
|
|
|
|
Jul 7 2010, 17:51
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
Цитата(SAAl @ Jul 7 2010, 15:11)  Ну, это я видел, из этой степи и пример нарыл, но на нормальное описание оно как-то не тянет. Когда AVRASM2 только появился, я бегло просматривал его описание, и в памяти отложилось, что там наконец сделали нормальный макроязык... Похоже я ошибся Цитата(SAAl @ Jul 7 2010, 15:11)  ВОТ!!! И Вы тоже пришли к тому же мнению но нет проверки на пустоту не получается, точнее я не нахожу способа проверить параметр на пусто  Хорошо, пусть на пустоту не получается, а если проверить на равенство r16 например, покатит? Тогда можно извратится типа .IF @0=r16 or @0=r17 or @0=r18 ... or @0=ZH громоздко, но ведь выход  P.S и вообще, бросайте Вы этот глючный avrasm. Есть же более достойные компиляторы. Вот например пример (каламбурим  ) из описания IAR-овского ассемблера: Код DO_LPM MACRO IF _args == 2 LPM \1,\2 ELSE LPM ENDIF ENDM Как видите количество аргументов можно проверить по IF. А если еще REPT прикрутить - вообще сказка будет. Или вот про AVR GCC вам ReAl уже писал. Там похоже макроязык еще покруче, чем в IAR. Да еще и совесть чистая  . Пусть компилятор работает на Вас, а не Вы на компилятор
|
|
|
|
|
Jul 8 2010, 03:40
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 27-10-06
Пользователь №: 21 715

|
Цитата(Artem_Petrik @ Jul 7 2010, 23:51)  Хорошо, пусть на пустоту не получается, а если проверить на равенство r16 например, покатит? Тогда можно извратится типа .IF @0=r16 or @0=r17 or @0=r18 ... or @0=ZH громоздко, но ведь выход  Выход  ! Но... если .if не ожидает регистр как lvalue, то даже если предположить что он допускает его в rvalue, принимать его в lvalue все равно не будет  Я проверил все тот же unexepected REGISTER. Цитата(Artem_Petrik @ Jul 7 2010, 23:51)  P.S и вообще, бросайте Вы этот глючный avrasm. Есть же более достойные компиляторы. Похоже так! На месте Atmel мне со стыда гореть все это время  сделать прекрасную архитектуру и так позорно провалить в средствах разработки даже и не ЯВУ. Цитата(Artem_Petrik @ Jul 7 2010, 23:51)  Или вот про AVR GCC вам ReAl уже писал. Там похоже макроязык еще покруче, чем в IAR. Да еще и совесть чистая  . Пусть компилятор работает на Вас, а не Вы на компилятор  Да все верно похоже что переход на GNU-тый as закономерен, тем паче что он и свободный и мультиплатформенный.  Цитата(ReAl @ Jul 8 2010, 02:11)  Ещё приятная вещь в gcc-шном макро — это атрибуты обязательности макроаргумента : req (не надо и проверять в макросе на наличие, так как сам ругнётся ещё раньше на отсутствие) и возможность задать значение аргумента по умолчанию Код .macro outi port:req, val:req, tempreg=r16 ldi \tempreg, \val out \port, \tempreg .endm Код outi DDRB,0xFF; тут как временный будет r16 outi DDRC,0xCC,r24; а тут r24 Красиво! Фактически Вы меня убедили на раз Есть только одно но... А где описание добыть? В man только командная строка и опции. И учитывая что он под разные таргеты одно ли на всех описание? Есть же какие то сущности в разных архитектурах которые на модель x86 ни как не лягут.
Сообщение отредактировал SAAl - Jul 8 2010, 03:46
|
|
|
|
Сообщений в этой теме
SAAl Макросы в AVRASM/AVRASM2 и других ASM Jun 30 2010, 05:53 Artem_Petrik Насчет AVRASM2 не скажу (когда меня волновал анало... Jun 30 2010, 11:01 Qwertty Цитата(SAAl @ Jun 30 2010, 09:53) Можно л... Jun 30 2010, 11:19 SAAl Цитата(Qwertty @ Jun 30 2010, 17:19) Все ... Jul 1 2010, 16:33  ReAl Цитата(SAAl @ Jul 1 2010, 19:33) #if в AV... Jul 6 2010, 12:12   _Bill Цитата(ReAl @ Jul 6 2010, 16:12) Для AVR ... Jul 11 2010, 18:11 Deka Число параметров для одного макроса фиксированное ... Jul 5 2010, 12:41 SAAl Цитата(Deka @ Jul 5 2010, 18:41) Число па... Jul 6 2010, 02:00 adc Дело в том что передаваемые макросу параметры стро... Jul 6 2010, 06:48   ReAl Цитата(Artem_Petrik @ Jul 7 2010, 20:51) ... Jul 7 2010, 20:11 Exstreem Верно, на пустоту не проверить.
Макрос в асме, как... Jul 7 2010, 12:24 SAAl Цитата(Exstreem @ Jul 7 2010, 18:24) Верн... Jul 7 2010, 13:14 Deka Я бы тоже не отказался от помощи прикручивания к с... Jul 8 2010, 09:54 Exstreem Код ассемблировался:
.MACRO Pushl
.if @0<31
... Jul 8 2010, 14:49 Exstreem В прошлом сообщении допустил ошибку:
вместо
Цитата... Jul 8 2010, 18:13 SAAl Цитата(Exstreem @ Jul 9 2010, 00:13) В пр... Jul 9 2010, 02:55 Exstreem Да, конечно, пробовал, поэтому и выложил.
Ассембли... Jul 9 2010, 04:56 SAAl Цитата(Exstreem @ Jul 9 2010, 10:56) Да, ... Jul 9 2010, 05:16 Exstreem Цитатавот код который "компилится":
Код
... Jul 9 2010, 05:51 SAAl Цитата(Exstreem @ Jul 9 2010, 11:51) Ошик... Jul 9 2010, 07:00 Exstreem ЦитатаХитрость ясна, однако тоже полумера согласны... Jul 9 2010, 07:39 ILYAUL А SREG ? Jul 10 2010, 07:13 Exstreem Один из вариантов:
Код.MACRO Pushl
.if @0<=31
... Jul 10 2010, 16:29
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|