Ассемблер (ASM) для AVR в вопросах и ответах
0x001 - это просто число, в 16-ричном виде. Количество нулей в начале - только ради красоты. Соответственно число само по себе может обозначать все что можно подсчитать - милисекунды, номер ячейки, количество папугаев и т.д.
- Реклама
Alexeyslav, окей. Я к тому, что в ДШ для меги8 пример таблицы векторов прерываний выглядит следующим образом:
3 0x002 INT1 External Interrupt Request 1
4 0x003 TIMER2 COMP Timer/Counter2 Compare Match
5 0x004 TIMER2 OVF Timer/Counter2 Overflow
...
Здесь это что? Не похоже на адрес памяти, ибо rjmp больше байта занимать должен.
Спойлер
2 0x001 INT0 External Interrupt Request 03 0x002 INT1 External Interrupt Request 1
4 0x003 TIMER2 COMP Timer/Counter2 Compare Match
5 0x004 TIMER2 OVF Timer/Counter2 Overflow
...
Главное, чтоб был источник ЭДС, а с остальным разберемся
.
А, так в инструкции(даташите) сказано черным-по-белому что программная память адресуется словами. 1 слово - одна команда.
А это смотря где 0х0001 поставить - адрес ячейки ПЗУ, ячейки ОЗУ, константа, данные или имя флага пользователя - на выбор пользователя. 
- Сообщения: 162
- Зарегистрирован: Вс дек 09, 2012 12:14:44
Нужно защелкнуть hc595n после того как все данные передадутся. Защелкивание происходит по фронту на выводе STCP, верно? Сам вывод подключен к PB4. Тактовая частота мк 8Мгц. Данная конструкция позволительна?
SBI PORTB,4
NOP
NOP
CBI PORTB,4
Пустышек добавил, ибо боюсь за то, что успеет срагировать регистр, если обе команды друг за другом делать?
SBI PORTB,4
NOP
NOP
CBI PORTB,4
Пустышек добавил, ибо боюсь за то, что успеет срагировать регистр, если обе команды друг за другом делать?
- Реклама
Вроде нормально, если соответствующий бит порта уже был объявлен выходом, записью единицы в бит 4 порта DDRB.
HC595 вроде запросто 40Мгц держит, так что это даже перестраховка...
- Сообщения: 162
- Зарегистрирован: Вс дек 09, 2012 12:14:44
Понял, учту)
Задача номер два)
Есть две n-байтные переменные в оперативке (допустим из 10 байт). Периодически нужно содержимое одной(буфера) копировать в другую. Как это быстрее всего сделать?
Набросал свой быдло-макрос:
Задача номер два)
Есть две n-байтные переменные в оперативке (допустим из 10 байт). Периодически нужно содержимое одной(буфера) копировать в другую. Как это быстрее всего сделать?
Набросал свой быдло-макрос:
Итого, если мне не врет Студия, то получается 84 такта. Опять же если страховаться, и топить используемые регистры в стеке перед применением, то набежит еще 24 такта. Как эту решить эту задачу быстрее?;@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
Может быть, заменить CPI на TST? Экономия один такт.
Нет, эти команды не нужны вообще, т.к. DEC сама устанавливает флаг Z
Нет, эти команды не нужны вообще, т.к. DEC сама устанавливает флаг Z
- Сообщения: 162
- Зарегистрирован: Вс дек 09, 2012 12:14:44
- Сообщения: 758
- Зарегистрирован: Вс фев 10, 2013 15:26:00
а). для применения не в интеррупте:
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
Удочка. И/или запас соломки. Или потребуй аргументации, убедительности, оправдания. Или предоставь это всё себе сам.
Макрос не нужен.
Если реально будешь использовать более чем один раз такой кусок - тогда сначала обосновать целесообразность многоразовости, потом подумать ещё лучше над общей логикой и архитектурой, потом обосновать опять, потом понять разницу между макросом и процедурой.
Когда приходишь в учреждение, а там тётя цельный день бумажки с места на место перекладывает, с одной бумажки на другую бумажку циферки переписывает, ксерит на ксероксе и разносит копии по другим кабинетам с другими такими же тётями - ...
... но тут же не тётя, а программа! Потому что алгоритм.
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 раз.
- Сообщения: 162
- Зарегистрирован: Вс дек 09, 2012 12:14:44
Скорее информационной строкойтренаж с информационным табло...
у меня в конечном варианте именно такой код и получилсяа). для применения не в интеррупте:
Почему отдельное сложение пары с единицей более безопасно, чем сразу загрузка/сохранение с постинкрементом?б). более универсально и безопасно:
И где же цикл, а то один байт перешлем, а как же остальные?
Да, возможно и так, просто захотелось универсализировать этот кусок кода.Макрос не нужен.
Я понимаю так:разницу между макросом и процедурой.
макрос - удобный кусок кода, в который подставляешь нужные параметры и получаешь результат. Но если макрос большой/используется очень часто, то лучше этот кусок завернуть в процедуру - резко сэкономит место, но за счет команд вызова/возврата чуть проиграет в быстроте.
Очень часто макрос служит таким целям, которые противоречат самому принципу процедур и завернуть в процедуру никак не выйдет. Совсем недавно делал макрос который оперирует с PORTx, y TRISx, y DDRx, y где "x" и "y" - параметр макроса. Как такое красиво обернуть в процедуру?
- Сообщения: 162
- Зарегистрирован: Вс дек 09, 2012 12:14:44
А если скрещивать макроязык с процедурами - т.е. заходишь в процедуру по RCALL и выходишь по RET, а в самой процедуре используешь макрос. И удобство и экономия места (при частом использовании) налицо
Ну единственное что, переход и возврат добавляют по команде, ну и стек на 2 байта прогружается 
Тогда можно просто процедуру написать под каждый случай - количество кода 1 к 1.
Комбинаций параметров для макроса - море, для каждой комбинации писать процедуру? Вобщем, здесь имеется грань которую просто необходимо почувствовать чтобы правильно распорядится макросами и ненароком не усложнить себе жизнь.
Комбинаций параметров для макроса - море, для каждой комбинации писать процедуру? Вобщем, здесь имеется грань которую просто необходимо почувствовать чтобы правильно распорядится макросами и ненароком не усложнить себе жизнь.
Зачем эти все CLI, CEI, их же тогда везде придется тыкать? Не проще в прерывании сохранять слово состояния в стек, и перед выходом из прерывания восстанавливать?nirq писал(а):а). для применения не в интеррупте:
- Сообщения: 162
- Зарегистрирован: Вс дек 09, 2012 12:14:44
И правда... Чего-то я тупанулТогда можно просто процедуру написать под каждый случай - количество кода 1 к 1.
- Сообщения: 758
- Зарегистрирован: Вс фев 10, 2013 15:26:00
В предыдущем высере и ярко-синий цвет покрашено то, на которое должен срабатывать рефлекс "внимание опасность". Даже/особенно если "УМВР".
Или в таком деле соглашаемся признать важной приглянувшуюся каждую деталь, букву, запятую, а мелочей не бывает совсем - или лучше прямо сейчас заняться каким-нибудь другим делом.
Проще понять, чем объяснить <=== и эту фразу тоже. Но ещё проще посидеть в чате.
Но про это не о чем чатиться, нет предмета обсуждения. "Стол квадратный или круглый?" - примерно столько же смысла.
А решение задачи с разведением сферических коней неэффективно совмещать.
Или в таком деле соглашаемся признать важной приглянувшуюся каждую деталь, букву, запятую, а мелочей не бывает совсем - или лучше прямо сейчас заняться каким-нибудь другим делом.
Проще понять, чем объяснить <=== и эту фразу тоже. Но ещё проще посидеть в чате.
Но про это не о чем чатиться, нет предмета обсуждения. "Стол квадратный или круглый?" - примерно столько же смысла.
А решение задачи с разведением сферических коней неэффективно совмещать.
- Сообщения: 162
- Зарегистрирован: Вс дек 09, 2012 12:14:44
nirq, вот честно, пытался понять то, что вы пишите, но как-то не удалось
Множество средств художественной выразительности, а конкретики никакой.
Множество средств художественной выразительности, а конкретики никакой.


