Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Макросы ассемблер AVR
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Alt.F4
Возможно ли каким-то образом в макросе в качестве @0, @1, @2 использовать не числа, а названия меток?
Типа:
rcall @0 ;
rjmp @1 ;
Спасибо.
x736C
Конечно. Например, длинный условный переход:
Код
.macro  rjeq
        brne    PC+2
        rjmp    @0
.endm

p.s. если я правильно понял суть вашего вопроса.
Alt.F4
Блин, думал об одном, написал о другом.
Возможно ли каким-то образом вместо @0, @1, @2 использовать названия таблиц?
Код
ldi     ZH,high(@0);
ldi     ZL,low(@0);
Спасибо
Палыч
Цитата(Alt.F4 @ Sep 2 2010, 09:27) *
Возможно ли каким-то образом вместо @0, @1, @2 использовать названия таблиц?

Ассемблер из AVRStudio? Возможно. Откройте Help на Ассемблер - там в разделе макросов Ваш пример почти один в один (команда только другая).
Alt.F4
Цитата
Ваш пример почти один в один
Код
.MACRO SUBI16; Start macro definition
subi @1,low(@0); Subtract low byte
sbci @2,high(@0); Subtract high byte
.ENDMACRO; End macro definition
.CSEG; Start code segment
SUBI16  0x1234,r16,r17; Sub.0x1234 from r17:r16

Похоже конечно, но не то.
ILYAUL
ldwi Z,tablini*2
Я Вам об этом уже писал в другой теме
Alt.F4
Код
.macro 123        ;
ldi     ZH,high(@0)     ; Заносим начальный адрес таблицы в SRAM
ldi     ZL,low(@0)         ;
~~~~;
.endmacro;

на второй строке выдает ошибку: syntax error, unexpected REGISTER
x736C
Попробуйте поправить так:
Код
.macro    ldiw
    ldi    @0L,low(@1)
    ldi    @0H,high(@1)
.endm

Вызывайте так:
Код
    ldiw    Z,imm


P. S. Толком так и не понял, чего конкретно вы хотите реализовать. twak.gif

UPD: Ошибку скорее всего выдает потому, то неправильно передаете параметры макросу. Скорее всего регистр 8-битный.
Приведите, пожалуйста, код вызова макроса.

Регистр тут ни при чем, это я оговорился. Но все-таки, вызов макроса хотелось бы увидеть.
SasaVitebsk
когда то делал. С Си забыл как дурной сон. smile.gif
x736C
Я использую чуть дополненные макросы Чана.
Надеюсь, тоже забуду этот страшный сон. smile.gif
Нажмите для просмотра прикрепленного файла
Alt.F4
Код
ldi    @0L,low(@1)
ldi    @0H,high(@1)
Еее, вот так работает!
Я вот только въехать не могу, почему вес программы не уменьшается. К примеру: было 3 подпрограммы по 10 строк, сейчас один макрос и 3 подпрограммы по 2 строки. А объем занимаемой памяти тот же =((
з.ы. кончились 2048Байт блин, а еще столько надо написать...
x736C
Чудес не бывает и макросы не добавляют новых команд процессору.
При компиляции программы происходит замена обращения к макросу телом самого макроса.
Сделано это для удобства, чтоб экономить время программиста.

UPD: Вам может помочь не универсальный макрос, а универсальная функция, которую будете три раза вызывать. К примеру. Не знаю ваших конкретных обстоятельств.
Alt.F4
Весь код повторяющийся уже загнал в подпрограммы. Думал макросы спасут дело...
з.ы. вот блин, и печатку уже для устройства сделал, и коробочку прикупил + все подогнал напильником, для светодиодов отверстия просверлил... sad.gif
x736C
Емче контроллера в этом корпусе нет?
Переписывать, оптимизировать, отказываться от части функционала.
Alt.F4
Цитата
Емче контроллера в этом корпусе нет?
У производителя вроде как есть attiny4313 (у меня attiny2313), а так нету лучше с 20pin + UART.
Буду наверное убирать функционал + еще раз пересматривать код. Правда сначала допишу до конца rolleyes.gif ...
з.ы. и почему макросы не могут заменить функции, было бы так удобно. А то можно легко запутаться с огромным количеством ссылок на подпрограммы...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.