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

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

Сообщение Alexeyslav »

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

Сообщение 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 больше байта занимать должен.
Главное, чтоб был источник ЭДС, а с остальным разберемся :).
Реклама
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

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

Сообщение BOB51 »

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

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

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

SBI PORTB,4
NOP
NOP
CBI PORTB,4

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

Сообщение SmarTrunk »

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

Сообщение Alexeyslav »

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

Сообщение 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 такта. Как эту решить эту задачу быстрее?
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Сообщение SmarTrunk »

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

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

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

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

Сообщение BOB51 »

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

Сообщение 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 раз.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 162
Зарегистрирован: Вс дек 09, 2012 12:14:44

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

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

Сообщение Alexeyslav »

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

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

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

Сообщение Alexeyslav »

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

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

Сообщение SmarTrunk »

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

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

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

Сообщение nirq »

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

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



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

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

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

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