Ассемблер (ASM) для AVR в вопросах и ответах
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Необязательно самоизменяться в процессе хода всей программы. Полиморфность можно применить в программах к устройствам, в которых реализован интерфейс конфигурации. Например в охранных устройствах, или в чём-нибудь другом, имеющим интерфейс взаимодействия с пользователем. Самоизмениться программе достаточно один раз при изменении конфигурации устройства. В следствии этого мы не потеряем производительность на проверках всевозможных байтов конфигурации и прочего в ходе работы программы. Так, что команда SPM сделана не только для всевозможных бутлоадеров и как дополнение к EEPROM.
ЗЫ: На работе есть несколько приборов, сделанных на 2313 тиньке. В интерфейсе куча настроек (over 300), при этом присутствует сложная логика работы устройства и при этом очень шустро работает. Как-то поинтересовался у разработчиков с центрального офиса, мол как они ухитрились так быстро проверять столько конфигов, и как они засунули всё это туда? Ответ - полиморфизм в программе.
Да я и не удивился ответу, там такие спецы сидят, что HEX или BIN файл вручную набить смогут.
ЗЫ: На работе есть несколько приборов, сделанных на 2313 тиньке. В интерфейсе куча настроек (over 300), при этом присутствует сложная логика работы устройства и при этом очень шустро работает. Как-то поинтересовался у разработчиков с центрального офиса, мол как они ухитрились так быстро проверять столько конфигов, и как они засунули всё это туда? Ответ - полиморфизм в программе.
Да я и не удивился ответу, там такие спецы сидят, что HEX или BIN файл вручную набить смогут.
I am DX168B and this is my favourite forum on internet!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
думаю, слово "полиморфизм" - это типа тумана
самопрограммирование в плане самомодификации программы МК AVR - это из области фантастики даже для больших мег с памятью 64 и более килобайт, а про тини и говорить нечего. дело в том, что невозможно ЗАПИСЫВАТЬ в область кода и одновременно ИСПОЛНЯТЬ код из записываемой области. именно поэтому область ЗАГРУЗЧИКА отделена от области ПРОГРАММЫ - читайте даташиты. таким образом, код из области загрузчика может изменять код программы, но сам себя не может ни тот, ни другой. значит, для "полиморфизма" программа должна иметь несколько кодов загрузчика в разных областях памяти и умело переключаться между ними - стоит произойти одному-единственному сбою, и вся память окажется похереной полностью.
к тому же в тини довольно мало памяти для того, что бы реализовать этот самый алгоритм полиморфизма - тут на ПК для этих целей приходится страшные извраты делать, а уж в МК и подавно. поэтому разработчики вашего девайса, скорее всего, все эти 300 настроек (даже не представляю, какие именно это могут быть настройки - не компьютер же с Windows на тини2313 они сделали!) на ПК компилируются в новую прошивку (вот вам и полиморфизм), которая затем грузится в МК при помощи тривиального bootloader-а.
это мое скромное мнение
к тому же в тини довольно мало памяти для того, что бы реализовать этот самый алгоритм полиморфизма - тут на ПК для этих целей приходится страшные извраты делать, а уж в МК и подавно. поэтому разработчики вашего девайса, скорее всего, все эти 300 настроек (даже не представляю, какие именно это могут быть настройки - не компьютер же с Windows на тини2313 они сделали!) на ПК компилируются в новую прошивку (вот вам и полиморфизм), которая затем грузится в МК при помощи тривиального bootloader-а.
это мое скромное мнение
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Нет, это не ПК на тиньке, а диагностический прибор с семисегментным индикатором и 16 кнопками. Меню конфигурации там огромное - 20 пунктов, по 8 настроек в каждом пункте. 300 - это я конечно преувеличил. Несложно конфигуратор засунуть в область бутлоадера. Тем более там, чтобы войти в настройки, надо нажать на отдельную кнопку и удерживая её включить питание. К ПК ничего не подключается. Это полностью автономный прибор для теста акустических охранных датчиков.
Полностью менять весь код тоже нет смысла. Достаточно хотя-бы менять адреса меток в условиях, заранее наготовив шаблонов. Тем более тинька это позволяет в альтернативном режиме. То есть можно считать определённую область, сделать изменения, затереть старое и записать изменённое. При осмотре схемы я заметил, что вывод в индикатор работает через SPI и опрос кнопок происходит через дешифратор. Генерация звука скорее всего реализована таймером в PWM режиме. Фиг знает, как они сделали, но мне сказали, что конфигурация сделана методом полиформизма.
Полностью менять весь код тоже нет смысла. Достаточно хотя-бы менять адреса меток в условиях, заранее наготовив шаблонов. Тем более тинька это позволяет в альтернативном режиме. То есть можно считать определённую область, сделать изменения, затереть старое и записать изменённое. При осмотре схемы я заметил, что вывод в индикатор работает через SPI и опрос кнопок происходит через дешифратор. Генерация звука скорее всего реализована таймером в PWM режиме. Фиг знает, как они сделали, но мне сказали, что конфигурация сделана методом полиформизма.
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Здравствуйте, возникла проблема с подавлением дребезга контактов. Программа по таймеру выводит бегущую единицу в порт А, при нажатии на кнопку на 0 пине порта В, сбрасывается или устанавливается (в зав. от предыдущего состояния) бит разрешающий прерывание таймера. Код сброса/установки работает нормально, а вот обработка нажатия косячит. Иногда после сброса горит несколько светодиодов, иногда МК реагирует со второго нажатия. Пробовал разные интервалы задержки но не помогло. В чем может быть проблема?
- Вложения
-
- Timer.zip
- код и схема в протеусе
- (37.66 КБ) 176 скачиваний
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Ассемблер (ASM) для AVR в вопросах и ответах
.. опрос контактов ведут в прерывании и задержку делают там-же путем введения счетчика.Skyer писал(а):Здравствуйте, возникла проблема с подавлением дребезга контактов.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А без таймера разве не обойтись? Там же только одна кнопка.
P.S. начал разбирать динамическую индикацию, вопрос: почему пример из обучалки выводит цифры по очереди, должно же быть одновременно (для глаза)? Ставил разные значения задержки, но результат одинаковый. Код и схему приложил
P.S. начал разбирать динамическую индикацию, вопрос: почему пример из обучалки выводит цифры по очереди, должно же быть одновременно (для глаза)? Ставил разные значения задержки, но результат одинаковый. Код и схему приложил
- Вложения
-
- DynamicIndication.zip
- код и схема в протеусе
- (61.19 КБ) 208 скачиваний
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Ассемблер (ASM) для AVR в вопросах и ответах
... можно, только зачем???Skyer писал(а):А без таймера разве не обойтись?
... если хотите занять все время МК опросом - можете делать это в основном цикле, но как ИМХО сделать лучше - написал выше...Skyer писал(а):Программа по таймеру выводит бегущую единицу в порт ..
Re: Ассемблер (ASM) для AVR в вопросах и ответах
то есть, каждую секунду по прерыванию таймера проверять состояние порта? я правильно понял? А насчет первого способа, где может быть ошибка то?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Доброго времени суток!
Просмотрел всю тему, но ответа на возникший вопрос не нашел. Поэтому сам вопрос:
Имеется ли в ассемблере AVRStudio возможность условного компилирования.
Почитал про директивы ассемблера в Евстифееве и Ревиче, но особо полезного для решения данного вопроса там ничего не обнаружил...
Думаю это должно как-то решаться, но с необходимыми для этого директивами асма, если таковые существуют, пока не встречался.
Может кто-нить что подскажет?
Просмотрел всю тему, но ответа на возникший вопрос не нашел. Поэтому сам вопрос:
Имеется ли в ассемблере AVRStudio возможность условного компилирования.
Код: Выделить всё
; Например, определяю константу
.equ digit = 4
...
; Если Digit = 4 то компилируется участок кода
...
; Иначе компилируется следующий участок кода
...
Почитал про директивы ассемблера в Евстифееве и Ревиче, но особо полезного для решения данного вопроса там ничего не обнаружил...
Думаю это должно как-то решаться, но с необходимыми для этого директивами асма, если таковые существуют, пока не встречался.
Может кто-нить что подскажет?
Опыт и мудрость приходят с годами... К некоторым годы приходят одни...
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Ассемблер (ASM) для AVR в вопросах и ответах
... ИМХО такие ответы лучше искать в help_e к компилятору.VirZh писал(а):Почитал про директивы ассемблера в Евстифееве и Ревиче, но особо полезного для решения данного вопроса там ничего не обнаружил...
сделать можно так:
Код: Выделить всё
.equ digit = 5
.if digit == 4
// если = 4
.............
.elif digit == 5
// если = 5
.............
.elif digit == 6
// если = 6
.............
.else
// если другое значение
.............
.endif- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Ассемблер (ASM) для AVR в вопросах и ответах
для того чтобы не было заметно мерцание таймер настроим например на 1КГц. Внутри прерывания переменная-счетчик count увеличивает свое значение на 1 при обнаружении факта нажатия и обнуляется при отпускании. При достижении count заданного значения (например 250) - сбрасываем count в 0 и считаем что нажатие было.... (факт нажатия в данном случае регистрируется при удержании кнопки 250/1000=1/4 сек)Skyer писал(а):то есть, каждую секунду по прерыванию таймера проверять состояние порта? я правильно понял?
Последний раз редактировалось ChipKiller Пн мар 07, 2011 13:19:52, всего редактировалось 1 раз.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ChipKiller писал(а): ... ИМХО такие ответы лучше искать в help_e к компилятору.![]()
сделать можно так:Код: Выделить всё
.equ digit = 5
.if digit == 4
// если = 4
.............
.elif digit == 5
// если = 5
.............
.elif digit == 6
// если = 6
.............
.else
// если другое значение
.............
.endif
Большое Мяу!!!
Опыт и мудрость приходят с годами... К некоторым годы приходят одни...
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Ассемблер (ASM) для AVR в вопросах и ответах
.. обычно для этого хватало связки .include и .equ, но с помощью директив условной получится, возможно, более гибко....VirZh писал(а):... попытаюсь с помощью этого облегчить себе жизнь при использовании различных индикаторов, клавиатур и прочего дополнительного железа
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Понятно, вечером попробую. А что может быть с динамической индикацией? В протеусе использовал модель индикатора с 4 цифрами, работает без сильного мерцания, а при использовании отдельных индикаторов (по одной цифре) косячит. В железе использую два индикатора, с тремя цифрами каждый.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ChipKiller писал(а):.. обычно для этого хватало связки .include и .equ, но с помощью директив условной получится, возможно, более гибко....
Думаю это избавит от необходимости держать кучу inc файлов...
Опыт и мудрость приходят с годами... К некоторым годы приходят одни...
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Ассемблер (ASM) для AVR в вопросах и ответах
... протеусом не пользуюсь - нет необходимости. Думаю "косячит" из-за того, что модели индикатора с 4 цифрами и отдельных индикаторов отличаются - не стоит забывать, что это всего-лишь модель....Skyer писал(а):В протеусе использовал модель индикатора с 4 цифрами, работает без сильного мерцания, а при использовании отдельных индикаторов (по одной цифре) косячит
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Skyer писал(а):Понятно, вечером попробую. А что может быть с динамической индикацией? В протеусе использовал модель индикатора с 4 цифрами, работает без сильного мерцания, а при использовании отдельных индикаторов (по одной цифре) косячит. В железе использую два индикатора, с тремя цифрами каждый.
Протеус не показывает все в реальном времени. Поэтому не стоит смотреть на то есть там мерцание или нет. Из опыта, мерцание не наблюдается если соблюдать следующее:
- засветка по очереди всех знаков должна происходить за время не более 20 мс (период сканирования <=20мс)
- При сканировании сначала гасим все знаки (0 на общие аноды или 1 - на общие катоды), затем выставляем нужные сегменты, после чего засвечиваем нужный разряд.
В реале делал максимум до 10 знаков (больше не было необходимости) Работает без мерцаний.
Кстати, в протеусе можно уменьшить тактовую частоту контроллера, например, раз в 50-100 по сравнению с реальной. и тогда ты увидишь, где идет неправильное переключение сегментов или разрядов, которое и вызывает мерцание
Опыт и мудрость приходят с годами... К некоторым годы приходят одни...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Всем спасибо, помогло
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Кто нить может дать работающих код по самопрограммированию меги ?
интересует мега64...
нужно организовать хранение некоторых переменных в памяти программ..
p.s. по примерам что находил не совсем понятно
в частности как зоны RWW и NRWW задаются и где лучше что размещать...
интересует мега64...
нужно организовать хранение некоторых переменных в памяти программ..
p.s. по примерам что находил не совсем понятно
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Еще один вопрос а можно ли организовать чтение из программной памяти при помощи индексной индексации ?
LDD r16 , X + 10 - походу дела читает из RAM, а мне нужно из FLASH.. причем чтобы значение X после выполения чтения не терялось...
p.s. пока приходиться сохранять значение в стек, и инкрементировать регистр сложением.. - и долго и как то коряво.. - может быть есть какое то другое решение ?
LDD r16 , X + 10 - походу дела читает из RAM, а мне нужно из FLASH.. причем чтобы значение X после выполения чтения не терялось...
p.s. пока приходиться сохранять значение в стек, и инкрементировать регистр сложением.. - и долго и как то коряво.. - может быть есть какое то другое решение ?