Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

0x001 - это просто число, в 16-ричном виде. Количество нулей в начале - только ради красоты. Соответственно число само по себе может обозначать все что можно подсчитать - милисекунды, номер ячейки, количество папугаев и т.д.
Аватара пользователя
ranger93
Вымогатель припоя
Сообщения: 560
Зарегистрирован: Пт июл 02, 2010 19:30:22
Откуда: Новосибирск / Магнитогорск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ranger93 »

Alexeyslav, окей. Я к тому, что в ДШ для меги8 пример таблицы векторов прерываний выглядит следующим образом:
Спойлер2 0x001 INT0 External Interrupt Request 0
3 0x002 INT1 External Interrupt Request 1
4 0x003 TIMER2 COMP Timer/Counter2 Compare Match
5 0x004 TIMER2 OVF Timer/Counter2 Overflow
...

Здесь это что? Не похоже на адрес памяти, ибо rjmp больше байта занимать должен.
Главное, чтоб был источник ЭДС, а с остальным разберемся :).
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

А, так в инструкции(даташите) сказано черным-по-белому что программная память адресуется словами. 1 слово - одна команда.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

А это смотря где 0х0001 поставить - адрес ячейки ПЗУ, ячейки ОЗУ, константа, данные или имя флага пользователя - на выбор пользователя. :tea:
Аватара пользователя
1essor1
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вс дек 09, 2012 12:14:44

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение 1essor1 »

Нужно защелкнуть hc595n после того как все данные передадутся. Защелкивание происходит по фронту на выводе STCP, верно? Сам вывод подключен к PB4. Тактовая частота мк 8Мгц. Данная конструкция позволительна?

SBI PORTB,4
NOP
NOP
CBI PORTB,4

Пустышек добавил, ибо боюсь за то, что успеет срагировать регистр, если обе команды друг за другом делать?
SmarTrunk
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение SmarTrunk »

Вроде нормально, если соответствующий бит порта уже был объявлен выходом, записью единицы в бит 4 порта DDRB.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

HC595 вроде запросто 40Мгц держит, так что это даже перестраховка...
Аватара пользователя
1essor1
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вс дек 09, 2012 12:14:44

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение 1essor1 »

Понял, учту)
Задача номер два)

Есть две n-байтные переменные в оперативке (допустим из 10 байт). Периодически нужно содержимое одной(буфера) копировать в другую. Как это быстрее всего сделать?

Набросал свой быдло-макрос:

;@0 - откуда, @1 - куда, @2 - количество байт
.MACRO RAMMOV

LDI r16,@2

LDI XL,low(@0)
LDI XH,high(@0)

LDI YL,low(@1)
LDI YH,high(@1)

byte_move:

LD r17,X+
ST Y+,r17

dec r16

CPI r16,0
BRNE byte_move

.ENDM


Итого, если мне не врет Студия, то получается 84 такта. Опять же если страховаться, и топить используемые регистры в стеке перед применением, то набежит еще 24 такта. Как эту решить эту задачу быстрее?
SmarTrunk
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение SmarTrunk »

Может быть, заменить CPI на TST? Экономия один такт.

Нет, эти команды не нужны вообще, т.к. DEC сама устанавливает флаг Z
Аватара пользователя
1essor1
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вс дек 09, 2012 12:14:44

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение 1essor1 »

Действительно :))
10 тактов выйграны)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Похоже на тренаж с информационным табло... 8)
nirq
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение nirq »

а). для применения не в интеррупте:

cli
next:
LD r17,X+
ST Y+,r17
DEC r16
brne next
sei

б). более универсально и безопасно:

ld r17,X
st Y, r17
adiw XH:XL, 1
adiw YH:YL, 1

Удочка. И/или запас соломки. Или потребуй аргументации, убедительности, оправдания. Или предоставь это всё себе сам.



Макрос не нужен.
Если реально будешь использовать более чем один раз такой кусок - тогда сначала обосновать целесообразность многоразовости, потом подумать ещё лучше над общей логикой и архитектурой, потом обосновать опять, потом понять разницу между макросом и процедурой.

Когда приходишь в учреждение, а там тётя цельный день бумажки с места на место перекладывает, с одной бумажки на другую бумажку циферки переписывает, ксерит на ксероксе и разносит копии по другим кабинетам с другими такими же тётями - ...
... но тут же не тётя, а программа! Потому что алгоритм.
Последний раз редактировалось nirq Сб июл 06, 2013 13:52:21, всего редактировалось 1 раз.
Аватара пользователя
1essor1
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вс дек 09, 2012 12:14:44

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение 1essor1 »

тренаж с информационным табло...

Скорее информационной строкой :wink:

а). для применения не в интеррупте:

у меня в конечном варианте именно такой код и получился

б). более универсально и безопасно:

Почему отдельное сложение пары с единицей более безопасно, чем сразу загрузка/сохранение с постинкрементом?
И где же цикл, а то один байт перешлем, а как же остальные?

Макрос не нужен.

Да, возможно и так, просто захотелось универсализировать этот кусок кода.

разницу между макросом и процедурой.

Я понимаю так:
макрос - удобный кусок кода, в который подставляешь нужные параметры и получаешь результат. Но если макрос большой/используется очень часто, то лучше этот кусок завернуть в процедуру - резко сэкономит место, но за счет команд вызова/возврата чуть проиграет в быстроте.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Очень часто макрос служит таким целям, которые противоречат самому принципу процедур и завернуть в процедуру никак не выйдет. Совсем недавно делал макрос который оперирует с PORTx, y TRISx, y DDRx, y где "x" и "y" - параметр макроса. Как такое красиво обернуть в процедуру?
Аватара пользователя
1essor1
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вс дек 09, 2012 12:14:44

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение 1essor1 »

А если скрещивать макроязык с процедурами - т.е. заходишь в процедуру по RCALL и выходишь по RET, а в самой процедуре используешь макрос. И удобство и экономия места (при частом использовании) налицо :))) Ну единственное что, переход и возврат добавляют по команде, ну и стек на 2 байта прогружается :tea:
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Тогда можно просто процедуру написать под каждый случай - количество кода 1 к 1.

Комбинаций параметров для макроса - море, для каждой комбинации писать процедуру? Вобщем, здесь имеется грань которую просто необходимо почувствовать чтобы правильно распорядится макросами и ненароком не усложнить себе жизнь.
SmarTrunk
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение SmarTrunk »

nirq писал(а):а). для применения не в интеррупте:
Зачем эти все CLI, CEI, их же тогда везде придется тыкать? Не проще в прерывании сохранять слово состояния в стек, и перед выходом из прерывания восстанавливать?
Аватара пользователя
1essor1
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вс дек 09, 2012 12:14:44

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение 1essor1 »

Тогда можно просто процедуру написать под каждый случай - количество кода 1 к 1.


И правда... Чего-то я тупанул :))
nirq
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение nirq »

В предыдущем высере и ярко-синий цвет покрашено то, на которое должен срабатывать рефлекс "внимание опасность". Даже/особенно если "УМВР".
Или в таком деле соглашаемся признать важной приглянувшуюся каждую деталь, букву, запятую, а мелочей не бывает совсем - или лучше прямо сейчас заняться каким-нибудь другим делом.

Проще понять, чем объяснить <=== и эту фразу тоже. Но ещё проще посидеть в чате.
Но про это не о чем чатиться, нет предмета обсуждения. "Стол квадратный или круглый?" - примерно столько же смысла.



А решение задачи с разведением сферических коней неэффективно совмещать.
Аватара пользователя
1essor1
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вс дек 09, 2012 12:14:44

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение 1essor1 »

nirq, вот честно, пытался понять то, что вы пишите, но как-то не удалось :dont_know:
Множество средств художественной выразительности, а конкретики никакой.
Ответить

Вернуться в «AVR»