реклама на сайте
подробности

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


Участник
*

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



Наверное уже не первый кто спрашивает но поиск не дал результатов.

Можно ли в макрокомандах имеющихся для AVR ассемблеров использовать неопределенное кол-во параметров.
Можно ли средствами макрокоманд AVRASM2 проверить переданный в макроопределение параметр по принципу есть\нет или меньше больше, если переданный параметр не константа (адрес, порт) а регистр.
Может быть уже существует реализация команды push списком push_list ZH, ZL, YL, YH, R0 и т.д.?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Artem_Petrik
сообщение Jul 6 2010, 09:29
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006



2 SAAL:
Что-то быстро найти нормальное описание avrasm2 мне не удалось sad.gif . А всю студию качать лениво.

Но вот нашел некий пример здесь:

Код
.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=пустоте или еще как), тогда вообще будет то чего изначально хотелось.
Go to the top of the page
 
+Quote Post
SAAl
сообщение Jul 7 2010, 12:11
Сообщение #3


Участник
*

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



Цитата(Artem_Petrik @ Jul 6 2010, 15:29) *
2 SAAL:
Что-то быстро найти нормальное описание avrasm2 мне не удалось sad.gif . А всю студию качать лениво.


Описание из первых рук smile.gif

Цитата(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=пустоте или еще как), тогда вообще будет то чего изначально хотелось.


ВОТ!!! И Вы тоже пришли к тому же мнению но нет проверки на пустоту не получается, точнее я не нахожу способа проверить параметр на пусто smile.gif
Go to the top of the page
 
+Quote Post
Artem_Petrik
сообщение Jul 7 2010, 17:51
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006



Цитата(SAAl @ Jul 7 2010, 15:11) *

Ну, это я видел, из этой степи и пример нарыл, но на нормальное описание оно как-то не тянет. Когда AVRASM2 только появился, я бегло просматривал его описание, и в памяти отложилось, что там наконец сделали нормальный макроязык... Похоже я ошибся smile.gif
 
Цитата(SAAl @ Jul 7 2010, 15:11) *
ВОТ!!! И Вы тоже пришли к тому же мнению но нет проверки на пустоту не получается, точнее я не нахожу способа проверить параметр на пусто smile.gif

Хорошо, пусть на пустоту не получается, а если проверить на равенство r16 например, покатит? Тогда можно извратится типа 
.IF @0=r16 or @0=r17 or @0=r18 ...  or @0=ZH
громоздко, но ведь выход smile.gif


P.S и вообще, бросайте Вы этот глючный avrasm. Есть же более достойные компиляторы. Вот например пример (каламбурим smile.gif ) из описания IAR-овского ассемблера:
Код
DO_LPM MACRO
  IF _args == 2
    LPM \1,\2
  ELSE
    LPM
  ENDIF
ENDM

Как видите количество аргументов можно проверить по IF. А если еще REPT прикрутить - вообще сказка будет.

Или вот про AVR GCC вам ReAl уже писал. Там похоже макроязык еще покруче, чем в IAR. Да еще и совесть чистая rolleyes.gif .
Пусть компилятор работает на Вас, а не Вы на компилятор  biggrin.gif
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jul 7 2010, 20:11
Сообщение #5


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Artem_Petrik @ Jul 7 2010, 20:51) *
P.S и вообще, бросайте Вы этот глючный avrasm. Есть же более достойные компиляторы.
+много.
На компакте и на ftp от самого атмела более чем десятилетней давности был в комплекте бесплатный комплект от IAR — только ассемблер и линкер, версия 1.30, кажется. Как только я его обнаружил, avrasm был забыт как страшный сон.

Чей макроасм "мощнее" — IAR или gcc, мне тяжело сказать, так как IAR я не пользуюсь почти десять лет, а gcc, похоже, не использую на полную катушку, так как на асме пишу очень мало.
Ещё приятная вещь в 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




--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - SAAl   Цитата(Artem_Petrik @ Jul 7 2010, 23:51) ...   Jul 8 2010, 03:40
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 04:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01476 секунд с 7
ELECTRONIX ©2004-2016