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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

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

Сообщение Pink-Pank »

Прокрутиться он может.. Только как это приведет к ложному срабатыванию - я не понимаю. Не вижу Вашего хода мыслей (алгоритма). Счетчик обычно наоборот, блокирует повторное срабатывание, пока крутится. ;)
2. Все зависит от кол-ва этих нопов, наличия свободной памяти и Вашего желания их копипастить.
Если нопов два-три, то эффективнее будет их прямо так и записать (кстати, это не обязательно должны быть именно они. Там может быть любая команда). А если нопов нужно 10 000... А памяти всего 512 байт... Ну, Вы поняли.) и даже если памяти хватает на эти 10 000.. Лично мне было бы лень писать такое количество команд..)
И вообще, как сказал дедушка ARV:
программист от быдлокодера отличается тем, что всегда применяет наиболее удобные, эффективные и простые методы для достижения решения поставленной задачи. при этом его не смущает ни применение goto, ни задержек пустыми циклами - его вообще ничего не смущает!

В общем, действуйте по ситуации! ;)
Fucking static initialization order fiasco
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

В серьёзных системах задачи разделяют, и как такового подавления дребезга там нет - это функция системы. А уж как она будет реализована - зависит от самой системы, если у нас аппарат за пару лимонов зелёных денег то там может быть ввод с кнопок - отдельный черный ящик, который решается любыми доступными методами вплоть до аппаратных и тупых задержек. Его работа никак не отражается на работоспособности остальной системы и поэтому там может запросто быть delay_ms на нопах.
Вот если задача ввода кнопок висит на том же контроллере что и основная задача... тогда применение задержек просто недопустимо(не берем в расчет то малое количество проектов когда основная функция выполняется исключительно по нажатию кнопки) и следует использовать таймер и прерывания, либо вставить алгоритм считывания состояния кнопок в уже существующее место - например функция сканирования динамической индикации. Часто в юбой системе можно найти такой место, где управление нашей функции считывания можно организовать с интервалом 10...20мс этого вполне достаточно чтобы избежать влияния дребезга и при этом никаких задержек.
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

Доброго времени суток.
Из обучалки - Двигаем! Бегущий огонек v1.2

lsl - Logical Shift Left - логический сдвиг влево
lsr - Logical Shift Right - логический сдвиг вправо

При этом, в освободившиеся биты вдвигаются нули

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

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

Сообщение Alexeyslav »

Есть.
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

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

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

Сообщение Alexeyslav »

Система команд приводится в каждом даташите на микроконтроллер, в виде таблицы, пояснения к команде и мнемонической формулы как она работает. Попробуйте понять как эта таблица устроена, вам это понравиться.
Команды сгруппированы, все команды сдвига находятся рядом поэтому зная хотябы одну из них можно найти и остальные обычным поиском по даташиту.
Если описание в даташите на английском покажется непонятным, можно взять описание любой команды отсюда но там они в алфавитном порядке...
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

Пока_без_кота писал(а):Есть ли похожие команды, но чтобы в освободившиеся биты вдвигались единицы ?
Если строго, то таких команд у AVR нет. Но можно сделать двумя командами. С упомянутыми вами командами можно использовать ori. А можно sec вместе с ror/rol. Можно, наверняка, ещё напридумывать способы.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

Kavka писал(а): Можно, наверняка, ещё напридумывать способы.
Спасибо большое. 2-х указанных вполне хватит для обучения))
jes
Нашел транзистор. Понюхал.
Сообщения: 177
Зарегистрирован: Сб сен 11, 2010 14:05:53

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

Сообщение jes »

Всем привет.
Относительно недавно общаюсь с AVR-ками, в принципе все потихоньку получается.

Как-то возникла простая задача - при компиляции заполнить требуемую область памяти программ определенным кодом, например, 00h (чтобы каждый раз не заполнять дамп вручную перед программированием).
В бытность общения с семейством 51, это делалось простой директивой ассемблера FILL с указанием самого образца, и число байт для заполнения.
Что-то ничего похожего в ассемблере AVR - я не нашел (может, плохо искал).
Неужели надо самому писать библиотеку для такой простой директивы ассемблера?

И попутно еще вопрос - как сделать операндом в команде текущий адрес программного счетчика?
И возможно ли это вообще?

Изпользуемое ПО - AVR Studio 4.12.460.

Заранее спасибо.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

jes, в АВРовском ассемблере нет директивы заполнение памяти программ на подобии упомянутой вами fill. Можете посмотреть GNU assembler для AVR, там есть.
Обращение к указателю адреса команд через PC (например, rjmp PC+25).
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
jes
Нашел транзистор. Понюхал.
Сообщения: 177
Зарегистрирован: Сб сен 11, 2010 14:05:53

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

Сообщение jes »

Спасибо за быстрый ответ.
А насчет программного счетчика - меня интересовала возможность использования его значения для расчета, например, той же области заполнения памяти программ.
Очень жаль что нет такой директивы в обычном асме, в некоторых случаях с ней было бы гораздо проще...
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

jes писал(а):меня интересовала возможность использования его значения для расчета, например, той же области заполнения памяти программ.
Это в каком варианте применения? :o Пример можете привести.
А на счёт заполнения надо помозговать, может что-то и придумается...не очень красивое, но работоспособное. :) Подумать надо...

jes, а какой версии ассемблер в вашей студии? Студия старенькая просто.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
jes
Нашел транзистор. Понюхал.
Сообщения: 177
Зарегистрирован: Сб сен 11, 2010 14:05:53

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

Сообщение jes »

Например, после последней команды программы - присваиваем переменной значение счетчика команд, вычитаем из МАХ адреса это значение.
Потом, указываем команду заполнения образцом, в качестве размера области - наше полученное значение адресов.
В общем, на асме для 51 семейства - это делалось буквально на раз.

Не скажу, что во всех асмах для 51 - эта команда писалась одинаково, но, насколько помню - была она почти во всех его модификациях лишь с некоторыми отличиями.
Я был немного удивлен, что в асме для AVR - этого нет.
Команда заполнения образцом-байтом - по-моему является стандартом де-факто для работы почти любого ассемблера.
В общем-то, можно пойти другим путем, попробовать написать макрос или библиотеку для этого, но, чего-то особо не хочется (наверное, лень-матушка).

А версия ПО - это AVR Studio v4.12.460.
Просто к ней привык, сейчас начнешь менять на получше, что нибудь еще вылезет.

P.S.
В аттаче - кусок исходника для PIC, в качестве примера вышеуказанных рассуждений.
Когда-то ваял плавное включение ламп накаливания, пришлось немного вникнуть в PIC-и.
Вложения
Буфер обмена-1.jpg
(80.02 КБ) 359 скачиваний
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

Хм... Если используешь .org , то зачем заполнять неиспользуемые области?
Или это отрывок и в нём не видно, что "заполненная" область выполняется?

Я спрашивал не версию студии, а ассемблера в её составе.
Должно быть где-то тут "C:\Program Files\Atmel\AVR Tools\"
Папка AvrAssembler2 там есть? Файл avrasm2.exe внутри есть?
(Не знаю с какой версии студия идёт в комплекте со второй версией ассемблера).
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
jes
Нашел транзистор. Понюхал.
Сообщения: 177
Зарегистрирован: Сб сен 11, 2010 14:05:53

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

Сообщение jes »

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

Это же не супер-сложная команда для реализации в составе ассемблера.
В моей версии студии - есть avrasm2.exe, правда, похожей команды в нем нет.

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

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

Сообщение BOB51 »

Не путайте заполнение памяти программ данными при помощи средств компилятора на стадии написания программы/работы препроцессора при компиляции и заполнение ячеек пзу программ самим МК в процессе выполнения программы!!!
Это еще если теми данными заполняется ВНЕШНЕЕ ОЗУ ДАННЫХ, а не EEPROM АВРки... Там свои правила практически у каждого МК (Это не MCS51 в режиме совмещения памяти программ/данных!!!)
8)
jes
Нашел транзистор. Понюхал.
Сообщения: 177
Зарегистрирован: Сб сен 11, 2010 14:05:53

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

Сообщение jes »

А причем тут "... заполнение ячеек пзу программ самим МК в процессе выполнения программы!!! ..."?
Я пока не работал с AVR-ками, которые сами изменяют ПЗУ программ, хватало обычных, может быть чуть-чуть попозже попробую.

Да и 51 семейство - было обычное, с раздельной памятью команд и данных, без режима их совместной работы.
В большинстве микроконтроллеров - применяются именно раздельная память программ и данных (Гарвардская архитектура в отличие от Неймановской), правда, говорят, есть исключения, но, я с ними не сталкивался.

В общем, что я хотел узнать - узнал, всем спасибо, а кто хочет лишний раз поспорить (или блеснуть своим интеллектом) - извините, без меня...
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

jes писал(а):Если программа - попадет именно в неиспользуемую область
При правильном написании программы - дичайшая ситуация. :shock:

jes писал(а):Да мало ли для чего может понадобится такое.
Вот это другое дело. :)
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
jes
Нашел транзистор. Понюхал.
Сообщения: 177
Зарегистрирован: Сб сен 11, 2010 14:05:53

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

Сообщение jes »

А что, помех со всевозможными наводками и прочей гадостью - уже нет в электронике?

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

Дичайший случай, или нет - он имеет право быть, пусть и с малой вероятностью.
Соломку лучше стелить всегда заранее, и по возможности везде.
И еще неизвестно, какая соломка - понадобится, и главное - где...

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

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

Сообщение Alexeyslav »

Против помех привозящих к зацикливанию существует WathDog, а от несанкционированных переходов(это как надо поиздеваться над кристаллом) ни один программный подход не поможет. Заполнять пустое пространство константой - это ненужная работа в AVR, потому и команд таких нет. Если уж управление передано в неиспользуемое пространство по ошибке, то имеется единственный выход - перейти к начальной инициализации и начать все сначала. А что еще делать в таких случаях? неужели есть способ провернуть фарш обратно и восстановить работоспособность программы с того места где что-то пошло не так? Пустое место в памяти программ аналогично NOP-у и в конце концов управление будет передано по адресу 0000 и пойдет инициализация с самого начала. Правда есть ньюансы - если в это время разрешены прерывания и они действуют, то инициализация может пойти не по тому сценарию как это бывает по сигналу сброса.

Изменять память программ из самой программы тоже не выйдет - доступ к памяти программ на запись возможна только с адресов бутлоадера, даи ресурс ФЛЕШ-памяти не способствует такой практике - обычно эта возможность используется для самопрограммирования(обновление прошивки без программатора) или заливки таблиц-констант в процессе техобслуживания.
Ответить

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