Ну вот и здорово! Что и желал узнать!Engineer_Keen писал(а):Смотря какие
Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
- Реклама
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Дорогие "Коты". Поделитесь пожалуйста тем, кто как формирует задержки в асме при подключении lcd (wh0802a). А то без этого не хочет запускаться индикатор. И как правильно их рассчитывать?
- Engineer_Keen
- Друг Кота
- Сообщения: 3871
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
на асме задержки делают тупыми циклами:
вызов:
Если задержка нужна длиннее, вставляют вложенные циклы.
Величина задержки считается по количеству тактов (1 такт = 1/Fclk).
Код: Выделить всё
DELAY:DEC R16 ;(1 такт * количество проходов)
BRNE DELAY ;(2 такта по количеству проходов-1 + еще один такт)
RET ;(4 такта)
Код: Выделить всё
LDI R16,100 (100 - задержка в условных единицах (количество проходов цикла)
RCALL DELAY
Величина задержки считается по количеству тактов (1 такт = 1/Fclk).
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Или через прерывания по времени, тиками.
Docendo discimus
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вот, надыбал еще инфу если кому интересно:
http://cxem.net/mc/mc89.php
И таймеры как-то жалко использовать, так как они будут для другой цели включены
.
Наверное придется подключать к ноге вывод RW и читать бит готовности BF что опять таки не удобно
.
http://cxem.net/mc/mc89.php
И таймеры как-то жалко использовать, так как они будут для другой цели включены
Наверное придется подключать к ноге вывод RW и читать бит готовности BF что опять таки не удобно
- Реклама
- Engineer_Keen
- Друг Кота
- Сообщения: 3871
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Верно, таймерами через прерывания очень удобно, особенно если нужно много различных программных таймеров и задержек с кратными интервалами. Но это немного сложнее для новичков, нужно настраивать таймер, писать процедуру прерывания и как-то организовывать задание интервалов (если задержка одна, то просто настройкой OCR, а если много, то это кучка счетчиков и флагов состояния в памяти).
По ссылке тоже таймер используется, но тупо как счетчик, без прерываний, так конечно тоже можно, но не интересно...
По ссылке тоже таймер используется, но тупо как счетчик, без прерываний, так конечно тоже можно, но не интересно...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Почему с таймерами ,таймер один на все задержки - FREE TIMER
- Engineer_Keen
- Друг Кота
- Сообщения: 3871
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну я и имел ввиду один, просто выразился более общей фразой...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
любой код операции занимает 4 бита ?
Tell Me The Truth
Re: Ассемблер (ASM) для AVR в вопросах и ответах
спасибо...., но мне не понятно почему код операции имеет разную длину ?
с чем это связано ?
допустим, если мы имеем в системе команд AVR всего 64 разные операции....., то для их кодирования нам понадобится всего 6 бит
с чем это связано ?
допустим, если мы имеем в системе команд AVR всего 64 разные операции....., то для их кодирования нам понадобится всего 6 бит
Tell Me The Truth
- Engineer_Keen
- Друг Кота
- Сообщения: 3871
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
И десять останется для параметров? А этого хватит?
Для разных операций нужны разные параметры. Сами посудите: для копирования регистров (MOV) нужно 2 адреса по 5 бит, остается 6 бит на сам код, а для загрузки константы (LDI) нужно 4 бита (верхние R16-R31) и 8 бит константы - для кода остается 4 бита, и т.д.
Для разных операций нужны разные параметры. Сами посудите: для копирования регистров (MOV) нужно 2 адреса по 5 бит, остается 6 бит на сам код, а для загрузки константы (LDI) нужно 4 бита (верхние R16-R31) и 8 бит константы - для кода остается 4 бита, и т.д.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Engineer_Keen, насколько я в курсе то инструкция может заниматьне не только одно но и два слова
и если наши 64 операции ми кодируем 6 битами то в случае нехватки мы можем использовать 2 слова
или я в чем-то заблуждаюсь ?
и если наши 64 операции ми кодируем 6 битами то в случае нехватки мы можем использовать 2 слова
или я в чем-то заблуждаюсь ?
Tell Me The Truth
- Engineer_Keen
- Друг Кота
- Сообщения: 3871
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Можем конечно, например CALL/JMP, но вот в чем беда 2х словные команды занимают больше памяти и считываются в 2 раза дольше. Не знаю как это кратко объяснить, может чем-то поможет эта статья... Смысл в том, чтобы максимум команд, которые используются чаще всего закодировать минимумом бит (в данном случае 16-ю или 32-я). Так вот, если для решения того, будет ли команды 16 или 32 разрядная, использовать 1 бит, то для всех возможных сочетаний команд и операторов остается 15 бит, 32768, вроде много, но если посмотреть все коды операций AVR станет понятно что это предел, сюда не поместились даже так необходимые на первый взгляд операции с константой для младших регистров. Но зато они все выполняются за 1 такт (не считая умножения и переходов) и занимают одно слово, а для редко используемых CALL/JMP не жалко и 2 слов.FreshMan писал(а):мы можем использовать 2 слова
Для одной только LDI R15,XX пришлось бы задействовать 256 кодов, если пихать ее в однословные команды.
Можно было запихнуть в 2-словные команды не 2 а 4 команды, но большого толку от этого не было бы, а увеличение таких команд в 2 раза 1) уменьшает адресное пространство CALL/JMP в 2 раза 1) делает эти команды в 2 раза медленнее и длиннее. Вы готовы ради универсальности команд заплатить быстродействием в 2 раза?
Чтобы определить сколько команд должно быть 2х словными достаточно статистически посчитать количество используемых команд в программах и построить дерево кодирования Хаффмана, предполагаю что пути до команд CALL/JMP были самые длинные, а остальные гораздо короче, поэтому их оставили 2-словными.
Ну и не стоит забывать тот факт, что в младших AVR-ках 2-словных команд вообще нет!
FreshMan, вы лезите в глубокие дебри процессорной архитектуры, я понимаю что это интересно, но чтобы ответить приходится писать посты на пол-страницы. Если так интересно, лучше найдите какой-нибудь ресурс по устройству микропроцессорных систем.
- coredumped
- Опытный кот
- Сообщения: 838
- Зарегистрирован: Вт апр 12, 2011 18:38:19
- Откуда: с Земли
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вот ядро AVR в исходниках http://opencores.org/project,avr_core Глубже копать уже не кудаEngineer_Keen писал(а):Если так интересно, лучше найдите какой-нибудь ресурс по устройству микропроцессорных систем.
Все будет только лучше, в крайнем случае - хуже.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
FreshMan, если не знакомы, то ознакомьтесь с материалами дающими представление о ключевых идеях CISC и RISC архитектур процессоров. Если знакомы, то перечитайте и подумайте. Надеюсь, что вопросы отпадут сами собой...
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- Engineer_Keen
- Друг Кота
- Сообщения: 3871
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Данный путь мною указан уже был однажды...coredumped писал(а):Вот ядро AVR в исходниках http://opencores.org/project,avr_core Глубже копать уже не куда
Ну кстати не факт что эти именно то, что находится внутри AVRок, просто идентичная функциональность, ведь способов сделать одно и тоже разными методами множество
Re: Ассемблер (ASM) для AVR в вопросах и ответах
прошу прощения что ткнул свой нос куда не следует........, осознаю что моего багажа знаний еще не достаточно дабы поднимать подобные вопросыEngineer_Keen писал(а):FreshMan, вы лезите в глубокие дебри процессорной архитектуры,
с вашего разрешения задам вопросы по проще
1) где бы посмотреть принципиальную схему ядра AVR ? а то в даташитах только структурная
2)разрядность МК определяется разрядностью его шиной данных или АЛУ ?
3)почему нету единого стандарта в языке ассемблер ? к примеру, мне приходилось смотреть прогу написанную на асме для контроллера фирмы сименс ......, так там L - это аналог LDI, а Т - это аналог OUT
почему все это дело не стандартизировано......, чтобы LDI был и в Африке LDI
Tell Me The Truth
- Engineer_Keen
- Друг Кота
- Сообщения: 3871
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Уж лучше совать нос в контроллер, чем например, в бутылку с водкойFreshMan писал(а):прошу прощения что ткнул свой нос куда не следует........, осознаю что моего багажа знаний еще не достаточно дабы поднимать подобные вопросы![]()
Так вам производитель ее и открыл, агаFreshMan писал(а):1) где бы посмотреть принципиальную схему ядра AVR ? а то в даташитах только структурная![]()
Вроде обычно эти размерности одинаковые...FreshMan писал(а):2)разрядность МК определяется разрядностью его шиной данных или АЛУ ?
Потому мы говорим по русски, а англичане по английски, так получилось исторически, ну и просто особенности ассемблеров такие, что иногда бывает удобнее команду обозвать по своему.FreshMan писал(а):3)почему нету единого стандарта в языке ассемблер ? к примеру, мне приходилось смотреть прогу написанную на асме для контроллера фирмы сименс ......, так там L - это аналог LDI, а Т - это аналог OUT
почему все это дело не стандартизировано......, чтобы LDI был и в Африке LDI
Re: Ассемблер (ASM) для AVR в вопросах и ответах
а че боятся то ? если технология, схема, запатентована то пускай выложат ее на всеобщее обозрение....., пущай народ полюбуется....., а может они боятся того что разузнаю что и атмел не чиста наруку и скопипастила свою схему ?Engineer_Keen писал(а):Так вам производитель ее и открыл, ага
короче выходит что там все шито, крыто
1) у нас МК 8 разрядный, а длина машинного слова равна 2 байтам......, получается какая то неувязочка....., вы тут постом выше говорили о быстродейсьтвии....., так вот выходит чтоб достичь максимальной быстродействии надо чтобы длина машинного слова соответствовала разрядности МК, тогда за один такт МК будет полностью все переваривать...., у атмела в этом плане маленькое несоответствие......., странно как то
зачем же тогда человечество придумало всевозможные стандарты когда их не придерживаются ?Engineer_Keen писал(а):Потому мы говорим по русски, а англичане по английски, так получилось исторически, ну и просто особенности ассемблеров такие, что иногда бывает удобнее команду обозвать по своему.
выходит если я завтра создам контору под названием рога да копыта которая будет штамповвать МК под названием кошачий хвост......., мы напишем свой компилятор....., перековеркаем название команд из асма, но их функцию оставим, то это все-равно будет асм только в ином виде........, зачем тогда стандарты то и что тогда понимать под ассемблером ?
Tell Me The Truth


