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