Ассемблер (ASM) для AVR в вопросах и ответах
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
0x001 - это просто число, в 16-ричном виде. Количество нулей в начале - только ради красоты. Соответственно число само по себе может обозначать все что можно подсчитать - милисекунды, номер ячейки, количество папугаев и т.д.
- ranger93
- Вымогатель припоя
- Сообщения: 560
- Зарегистрирован: Пт июл 02, 2010 19:30:22
- Откуда: Новосибирск / Магнитогорск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
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
...
Здесь это что? Не похоже на адрес памяти, ибо rjmp больше байта занимать должен.
Главное, чтоб был источник ЭДС, а с остальным разберемся
.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А, так в инструкции(даташите) сказано черным-по-белому что программная память адресуется словами. 1 слово - одна команда.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А это смотря где 0х0001 поставить - адрес ячейки ПЗУ, ячейки ОЗУ, константа, данные или имя флага пользователя - на выбор пользователя. 

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Нужно защелкнуть hc595n после того как все данные передадутся. Защелкивание происходит по фронту на выводе STCP, верно? Сам вывод подключен к PB4. Тактовая частота мк 8Мгц. Данная конструкция позволительна?
SBI PORTB,4
NOP
NOP
CBI PORTB,4
Пустышек добавил, ибо боюсь за то, что успеет срагировать регистр, если обе команды друг за другом делать?
SBI PORTB,4
NOP
NOP
CBI PORTB,4
Пустышек добавил, ибо боюсь за то, что успеет срагировать регистр, если обе команды друг за другом делать?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вроде нормально, если соответствующий бит порта уже был объявлен выходом, записью единицы в бит 4 порта DDRB.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
HC595 вроде запросто 40Мгц держит, так что это даже перестраховка...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Понял, учту)
Задача номер два)
Есть две n-байтные переменные в оперативке (допустим из 10 байт). Периодически нужно содержимое одной(буфера) копировать в другую. Как это быстрее всего сделать?
Набросал свой быдло-макрос:
Итого, если мне не врет Студия, то получается 84 такта. Опять же если страховаться, и топить используемые регистры в стеке перед применением, то набежит еще 24 такта. Как эту решить эту задачу быстрее?
Задача номер два)
Есть две 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 такта. Как эту решить эту задачу быстрее?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Может быть, заменить CPI на TST? Экономия один такт.
Нет, эти команды не нужны вообще, т.к. DEC сама устанавливает флаг Z
Нет, эти команды не нужны вообще, т.к. DEC сама устанавливает флаг Z
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Действительно
10 тактов выйграны)
10 тактов выйграны)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Похоже на тренаж с информационным табло... 
Re: Ассемблер (ASM) для AVR в вопросах и ответах
а). для применения не в интеррупте:
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 раз.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
тренаж с информационным табло...
Скорее информационной строкой
а). для применения не в интеррупте:
у меня в конечном варианте именно такой код и получился
б). более универсально и безопасно:
Почему отдельное сложение пары с единицей более безопасно, чем сразу загрузка/сохранение с постинкрементом?
И где же цикл, а то один байт перешлем, а как же остальные?
Макрос не нужен.
Да, возможно и так, просто захотелось универсализировать этот кусок кода.
разницу между макросом и процедурой.
Я понимаю так:
макрос - удобный кусок кода, в который подставляешь нужные параметры и получаешь результат. Но если макрос большой/используется очень часто, то лучше этот кусок завернуть в процедуру - резко сэкономит место, но за счет команд вызова/возврата чуть проиграет в быстроте.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Очень часто макрос служит таким целям, которые противоречат самому принципу процедур и завернуть в процедуру никак не выйдет. Совсем недавно делал макрос который оперирует с PORTx, y TRISx, y DDRx, y где "x" и "y" - параметр макроса. Как такое красиво обернуть в процедуру?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А если скрещивать макроязык с процедурами - т.е. заходишь в процедуру по RCALL и выходишь по RET, а в самой процедуре используешь макрос. И удобство и экономия места (при частом использовании) налицо
Ну единственное что, переход и возврат добавляют по команде, ну и стек на 2 байта прогружается 

-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Тогда можно просто процедуру написать под каждый случай - количество кода 1 к 1.
Комбинаций параметров для макроса - море, для каждой комбинации писать процедуру? Вобщем, здесь имеется грань которую просто необходимо почувствовать чтобы правильно распорядится макросами и ненароком не усложнить себе жизнь.
Комбинаций параметров для макроса - море, для каждой комбинации писать процедуру? Вобщем, здесь имеется грань которую просто необходимо почувствовать чтобы правильно распорядится макросами и ненароком не усложнить себе жизнь.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Зачем эти все CLI, CEI, их же тогда везде придется тыкать? Не проще в прерывании сохранять слово состояния в стек, и перед выходом из прерывания восстанавливать?nirq писал(а):а). для применения не в интеррупте:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Тогда можно просто процедуру написать под каждый случай - количество кода 1 к 1.
И правда... Чего-то я тупанул
Re: Ассемблер (ASM) для AVR в вопросах и ответах
В предыдущем высере и ярко-синий цвет покрашено то, на которое должен срабатывать рефлекс "внимание опасность". Даже/особенно если "УМВР".
Или в таком деле соглашаемся признать важной приглянувшуюся каждую деталь, букву, запятую, а мелочей не бывает совсем - или лучше прямо сейчас заняться каким-нибудь другим делом.
Проще понять, чем объяснить <=== и эту фразу тоже. Но ещё проще посидеть в чате.
Но про это не о чем чатиться, нет предмета обсуждения. "Стол квадратный или круглый?" - примерно столько же смысла.
А решение задачи с разведением сферических коней неэффективно совмещать.
Или в таком деле соглашаемся признать важной приглянувшуюся каждую деталь, букву, запятую, а мелочей не бывает совсем - или лучше прямо сейчас заняться каким-нибудь другим делом.
Проще понять, чем объяснить <=== и эту фразу тоже. Но ещё проще посидеть в чате.
Но про это не о чем чатиться, нет предмета обсуждения. "Стол квадратный или круглый?" - примерно столько же смысла.
А решение задачи с разведением сферических коней неэффективно совмещать.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
nirq, вот честно, пытался понять то, что вы пишите, но как-то не удалось
Множество средств художественной выразительности, а конкретики никакой.
Множество средств художественной выразительности, а конкретики никакой.