Страница 193 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт июл 02, 2013 19:38:31
Alexeyslav
0x001 - это просто число, в 16-ричном виде. Количество нулей в начале - только ради красоты. Соответственно число само по себе может обозначать все что можно подсчитать - милисекунды, номер ячейки, количество папугаев и т.д.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт июл 02, 2013 22:19:45
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 больше байта занимать должен.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт июл 02, 2013 22:30:57
Alexeyslav
А, так в инструкции(даташите) сказано черным-по-белому что программная память адресуется словами. 1 слово - одна команда.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт июл 04, 2013 06:56:41
BOB51
А это смотря где 0х0001 поставить - адрес ячейки ПЗУ, ячейки ОЗУ, константа, данные или имя флага пользователя - на выбор пользователя.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт июл 05, 2013 18:40:40
1essor1
Нужно защелкнуть hc595n после того как все данные передадутся. Защелкивание происходит по фронту на выводе STCP, верно? Сам вывод подключен к PB4. Тактовая частота мк 8Мгц. Данная конструкция позволительна?
SBI PORTB,4
NOP
NOP
CBI PORTB,4
Пустышек добавил, ибо боюсь за то, что успеет срагировать регистр, если обе команды друг за другом делать?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт июл 05, 2013 19:31:34
SmarTrunk
Вроде нормально, если соответствующий бит порта уже был объявлен выходом, записью единицы в бит 4 порта DDRB.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт июл 05, 2013 19:38:14
Alexeyslav
HC595 вроде запросто 40Мгц держит, так что это даже перестраховка...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт июл 05, 2013 20:06:51
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 такта. Как эту решить эту задачу быстрее?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт июл 05, 2013 20:18:33
SmarTrunk
Может быть, заменить CPI на TST? Экономия один такт.
Нет, эти команды не нужны вообще, т.к. DEC сама устанавливает флаг Z
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт июл 05, 2013 20:37:21
1essor1
Действительно
10 тактов выйграны)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июл 06, 2013 05:28:02
BOB51
Похоже на тренаж с информационным табло...

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июл 06, 2013 07:04:59
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
Удочка. И/или запас соломки. Или потребуй аргументации, убедительности, оправдания. Или предоставь это всё себе сам.
Макрос не нужен.
Если реально будешь использовать более чем один раз такой кусок - тогда сначала обосновать целесообразность многоразовости, потом подумать ещё лучше над общей логикой и архитектурой, потом обосновать опять, потом понять разницу между макросом и процедурой.
Когда приходишь в учреждение, а там тётя цельный день бумажки с места на место перекладывает, с одной бумажки на другую бумажку циферки переписывает, ксерит на ксероксе и разносит копии по другим кабинетам с другими такими же тётями - ...
... но тут же не тётя, а программа! Потому что алгоритм.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июл 06, 2013 10:04:42
1essor1
тренаж с информационным табло...
Скорее информационной строкой
а). для применения не в интеррупте:
у меня в конечном варианте именно такой код и получился
б). более универсально и безопасно:
Почему отдельное сложение пары с единицей более безопасно, чем сразу загрузка/сохранение с постинкрементом?
И где же цикл, а то один байт перешлем, а как же остальные?
Макрос не нужен.
Да, возможно и так, просто захотелось универсализировать этот кусок кода.
разницу между макросом и процедурой.
Я понимаю так:
макрос - удобный кусок кода, в который подставляешь нужные параметры и получаешь результат. Но если макрос большой/используется очень часто, то лучше этот кусок завернуть в процедуру - резко сэкономит место, но за счет команд вызова/возврата чуть проиграет в быстроте.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июл 06, 2013 10:12:04
Alexeyslav
Очень часто макрос служит таким целям, которые противоречат самому принципу процедур и завернуть в процедуру никак не выйдет. Совсем недавно делал макрос который оперирует с PORTx, y TRISx, y DDRx, y где "x" и "y" - параметр макроса. Как такое красиво обернуть в процедуру?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июл 06, 2013 10:28:00
1essor1
А если скрещивать макроязык с процедурами - т.е. заходишь в процедуру по RCALL и выходишь по RET, а в самой процедуре используешь макрос. И удобство и экономия места (при частом использовании) налицо

Ну единственное что, переход и возврат добавляют по команде, ну и стек на 2 байта прогружается

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июл 06, 2013 10:59:06
Alexeyslav
Тогда можно просто процедуру написать под каждый случай - количество кода 1 к 1.
Комбинаций параметров для макроса - море, для каждой комбинации писать процедуру? Вобщем, здесь имеется грань которую просто необходимо почувствовать чтобы правильно распорядится макросами и ненароком не усложнить себе жизнь.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июл 06, 2013 12:59:24
SmarTrunk
nirq писал(а):а). для применения не в интеррупте:
Зачем эти все CLI, CEI, их же тогда везде придется тыкать? Не проще в прерывании сохранять слово состояния в стек, и перед выходом из прерывания восстанавливать?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июл 06, 2013 13:50:53
1essor1
Тогда можно просто процедуру написать под каждый случай - количество кода 1 к 1.
И правда... Чего-то я тупанул

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июл 06, 2013 13:51:46
nirq
В предыдущем высере и ярко-синий цвет покрашено то, на которое должен срабатывать рефлекс "внимание опасность". Даже/особенно если "
УМВР".
Или в таком деле соглашаемся признать важной
приглянувшуюся каждую деталь, букву, запятую, а мелочей не бывает совсем - или лучше прямо сейчас заняться каким-нибудь другим делом.
Проще понять, чем объяснить <=== и эту фразу тоже. Но ещё проще посидеть в чате.
Но
про это не о чем чатиться, нет предмета обсуждения. "Стол квадратный или круглый?" - примерно столько же смысла.
А решение задачи с разведением сферических коней неэффективно совмещать.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июл 06, 2013 14:03:37
1essor1
nirq, вот честно, пытался понять то, что вы пишите, но как-то не удалось
Множество средств художественной выразительности, а конкретики никакой.