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

 
 
 
Reply to this topicStart new topic
> Макросы ассемблер AVR, ай нид хэлп
Alt.F4
сообщение Sep 1 2010, 20:11
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Возможно ли каким-то образом в макросе в качестве @0, @1, @2 использовать не числа, а названия меток?
Типа:
rcall @0 ;
rjmp @1 ;
Спасибо.

Сообщение отредактировал Alt.F4 - Sep 1 2010, 20:12
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 1 2010, 20:46
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Конечно. Например, длинный условный переход:
Код
.macro  rjeq
        brne    PC+2
        rjmp    @0
.endm

p.s. если я правильно понял суть вашего вопроса.

Сообщение отредактировал x736C - Sep 1 2010, 20:49
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 2 2010, 05:27
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Блин, думал об одном, написал о другом.
Возможно ли каким-то образом вместо @0, @1, @2 использовать названия таблиц?
Код
ldi     ZH,high(@0);
ldi     ZL,low(@0);
Спасибо

Сообщение отредактировал Alt.F4 - Sep 2 2010, 05:27
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 2 2010, 05:53
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Alt.F4 @ Sep 2 2010, 09:27) *
Возможно ли каким-то образом вместо @0, @1, @2 использовать названия таблиц?

Ассемблер из AVRStudio? Возможно. Откройте Help на Ассемблер - там в разделе макросов Ваш пример почти один в один (команда только другая).
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 2 2010, 11:09
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
Ваш пример почти один в один
Код
.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

Похоже конечно, но не то.

Сообщение отредактировал Alt.F4 - Sep 2 2010, 11:10
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Sep 2 2010, 11:30
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



ldwi Z,tablini*2
Я Вам об этом уже писал в другой теме


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 2 2010, 14:13
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Код
.macro 123        ;
ldi     ZH,high(@0)     ; Заносим начальный адрес таблицы в SRAM
ldi     ZL,low(@0)         ;
~~~~;
.endmacro;

на второй строке выдает ошибку: syntax error, unexpected REGISTER
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 2 2010, 14:55
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Попробуйте поправить так:
Код
.macro    ldiw
    ldi    @0L,low(@1)
    ldi    @0H,high(@1)
.endm

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


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

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

Регистр тут ни при чем, это я оговорился. Но все-таки, вызов макроса хотелось бы увидеть.

Сообщение отредактировал x736C - Sep 2 2010, 14:28
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 2 2010, 15:01
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



когда то делал. С Си забыл как дурной сон. smile.gif
Прикрепленные файлы
Прикрепленный файл  macro.zip ( 1.06 килобайт ) Кол-во скачиваний: 39
 
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 2 2010, 15:08
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Я использую чуть дополненные макросы Чана.
Надеюсь, тоже забуду этот страшный сон. smile.gif
Прикрепленный файл  avr.zip ( 1.36 килобайт ) Кол-во скачиваний: 298
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 2 2010, 16:12
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Код
ldi    @0L,low(@1)
ldi    @0H,high(@1)
Еее, вот так работает!
Я вот только въехать не могу, почему вес программы не уменьшается. К примеру: было 3 подпрограммы по 10 строк, сейчас один макрос и 3 подпрограммы по 2 строки. А объем занимаемой памяти тот же =((
з.ы. кончились 2048Байт блин, а еще столько надо написать...
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 2 2010, 16:16
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Чудес не бывает и макросы не добавляют новых команд процессору.
При компиляции программы происходит замена обращения к макросу телом самого макроса.
Сделано это для удобства, чтоб экономить время программиста.

UPD: Вам может помочь не универсальный макрос, а универсальная функция, которую будете три раза вызывать. К примеру. Не знаю ваших конкретных обстоятельств.

Сообщение отредактировал x736C - Sep 2 2010, 16:19
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 2 2010, 16:25
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Весь код повторяющийся уже загнал в подпрограммы. Думал макросы спасут дело...
з.ы. вот блин, и печатку уже для устройства сделал, и коробочку прикупил + все подогнал напильником, для светодиодов отверстия просверлил... sad.gif
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 2 2010, 16:27
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Емче контроллера в этом корпусе нет?
Переписывать, оптимизировать, отказываться от части функционала.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 2 2010, 16:35
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
Емче контроллера в этом корпусе нет?
У производителя вроде как есть attiny4313 (у меня attiny2313), а так нету лучше с 20pin + UART.
Буду наверное убирать функционал + еще раз пересматривать код. Правда сначала допишу до конца rolleyes.gif ...
з.ы. и почему макросы не могут заменить функции, было бы так удобно. А то можно легко запутаться с огромным количеством ссылок на подпрограммы...

Сообщение отредактировал Alt.F4 - Sep 2 2010, 17:54
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 02:10
Рейтинг@Mail.ru


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