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

Обсуждаем контроллеры компании Atmel.
Ответить
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Сообщение dr.doc »

Starichok51 писал(а):
да, такой алгоритм, как сделано у тебя, мне сразу понравился
Данный алгоритм я впервые встретил у Корабельникова, когда изучал PIC. А уже потом встретил и его родоначальника, но, к сожалению, запямятовал первоисточник.
Еще один плюс данного алгоритма - его обратимость. Когда писал частотомер/цифровую шкалу приходилось переводить вводимую ПЧ, так вот подсчет "в лоб" оказался очень громоздким. Проще вышло инвертировать BIN-BCD в BCD-BIN.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Сообщение ptr128 »

BOB51 писал(а):Компилятор соответствует структуре ядра и принятой системе адресации для конкретного семейства.
Нет смысла добавлять АВРкам свойства I8086 - там и имеющегося при правильном/полном использовании с избытком сделано.
Во-первых, Вы не правы, считая компилятор платформозависимым. Например, LLVM toolchain не содержит ни одного платформозависимого компилятора, что не мешает ему успешно конкурировать с тем же GCC.
Во-вторых, что-что, а уж макросредства ассемблера точно не зависят от целевой платформы. Напирмер, я (и далеко не только я) в свое время успешно использовал макроассемблер IBM/370 при компиляции ассемблерного кода для i8048, i8080 и Z80. И то, что все все мнемоники машинных команд IBM/370 были закрыты макросами, и макросами же генерился бинарный код машинных команд - никак не напрягало. В связи с тем, что макроассемблер IBM/370 изначально был предназначен для написания ассемблерного кода к любому процессору - это был штатный режим его работы. Ведь этим же макроассемблером писались программы и для каналов ввода-вывода, и для сопроцессоров, и даже для некоторых программируемых стоек управления. Все особенности структуры ядря и системы адресации без проблем учитываются при написаннии макроса, формирующего машинную команду или сегмент данных.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ptr128 писал(а):Например, LLVM toolchain не содержит
ptr128 писал(а):успешно использовал макроассемблер IBM/370 при компиляции ассемблерного кода для i8048, i8080 и Z80
главное, все это в теме про ассемблер для AVR очень уместно.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

trofim2 писал(а):А, где можно скачать fasm под AVR?
https://flatassembler.net/download.php
flat assembler g
This release contains executables for 32-bit Linux and Windows. It contains examples of macroinstructions that allow assembly of simple programs for the architectures like x86, x64, 8052, AVR, or Java Virtual Machine.
есть реализация под PIC, пробовал - вроде неплохо по сравнению с мплабовским ассемблером.
Народ применяет для 8048, 8080, 8085, Z80...
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Сообщение trofim2 »

Да....
Таким образом можно любой макроассемблер приспособить.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Сообщение ptr128 »

ARV писал(а):
ptr128 писал(а):Например, LLVM toolchain не содержит
https://github.com/avr-llvm/llvm
ARV писал(а):
ptr128 писал(а):успешно использовал макроассемблер IBM/370 при компиляции ассемблерного кода для i8048, i8080 и Z80
главное, все это в теме про ассемблер для AVR очень уместно.
То что я лично не использовал макроассемблер IMB/370 в качестве кроссассемблера AVR не говорит о том, что его нельзя использовать для AVR таким же образом, как и для перечисленных выше архитектур. Не исключаю, что до сих пор кому то удобней использовать HLASM в этих целях
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Реклама
Грызет канифоль
Сообщения: 264
Зарегистрирован: Сб июл 30, 2011 21:00:24

Сообщение AQ29 »

ptr128 писал(а): Я не знаю, что Вы называете "классическим ассемблером", так как когда я впервые начал писать на ассемблере 8080 в 1984 году, то использовал для этого макроассемблер IBM/370 в режиме кросс-компиляции.
Под классическим ассемблером понимаю написание программ обычными ассемблерными командами: mov, ldi и т.д.
Макроассемблером условно называю язык АБ (Algorithm Builder), в котором широко используются макрокоманды и подпрограммы с параметрами. Встроенные макрокоманды расширяют действия обычных ассемблерных команд на многобайтные переменные. Скажем, а — 4-хбайтная переменная в SRAM, b - 4-хбайтная переменная в EEPROM, сложить эти переменные можно одной встроенной макрокомандой: a + b, наглядно и просто.
ptr128 писал(а): IMHO, если планируете профессионально программировать МК, то учите С, а макроассемблеры оставьте в покое. Даже несмотря на то, что использование asm в С требует несколько большей писанины, чем написание модуля на макроассемблере.
В итоге, оно окупается сторицей на всех этапах жизненного цикла ПО
На мой взгляд, на макроассемблере АБ будет не «несколько меньше писанины», а глобальное упрощение программирования. Без примера такое заявление звучит неубедительно. Приведу простой пример из практики, измерительный прибор, который по затуханию сигнала определяет концентрацию вещества М.
Для такого измерения центральный МК должен считать с периферийного МК (расположен в блоке 1) опорный сигнал Vopor и измеренный после затухания сигнал Vizmer. Затем разделить один сигнал на другой, взять логарифм, провести калибровку, упаковать для вывода на индикатор и вывести на индикатор. Упрощённо на АБ программа будет выглядеть следующим образом:

Read_Blok_1 (Read_Vopor, Vopor, 4)
Delenie (Vopor, Vizmer, Itog_Delenia, 1)
Log_10 (Itog_Delenia, M)
Kalibrovka_1024 (M, ee_Koef_M)
Upakovka (M, Indicator)
Vyvod_Indikator

Это всё библиотечные элементы, только надо несколько настроить под параметры задачи.
Написать и отладить по времени займет, наверно день, два.
Объём будет довольно приличный . Один логарифм займет более 1 КБ, Read_Blok_1 (чтение данных от другого МК с проверкой, повторными запросами при неудачном обмене, чтением состояния периферийного МК и т.д.), вроде бы, ещё более мощный элемент.
Это, практически, ассемблер с его скоростью, гибкостью и небольшим объёмом кода.

Думаю, если бы АБ развили для других семейств МК, можно было бы программы без проблем переносить на другие семейства. Сошлюсь на вашу фразу: «Все особенности структуры ядра и системы адресации без проблем учитываются при написании макроса, формирующего машинную команду».
ptr128 писал(а): Код на ЯВУ может быть автоматизировано проанализирован на предмет надежности и безопасности. Для ассемблера я таких анализаторов не встречал.
Думаю, можно было развить и анализ на надёжность и безопасность и прочее. Вопрос в том, кто будет это делать. Труда много, а этот труд денег не принесёт. Более того, для производителей МК будет ещё и убыток, ведь объём написанных программ будет значительно меньше, значит, будут покупать более дешёвые МК.
Получается, наработались, а прибыли упали. Капиталисты деньги считают.
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Сообщение ptr128 »

AQ29 писал(а): Макроассемблером условно называю язык АБ (Algorithm Builder), в котором широко используются макрокоманды и подпрограммы с параметрами.
Не вижу никаких отличий от любого макроассемблера, включая те, с которыми работал в 80-е годы прошлого века.
ptr128 писал(а): IMHO, если планируете профессионально программировать МК, то учите С, а макроассемблеры оставьте в покое. Даже несмотря на то, что использование asm в С требует несколько большей писанины, чем написание модуля на макроассемблере.
В итоге, оно окупается сторицей на всех этапах жизненного цикла ПО
AQ29 писал(а): На мой взгляд, на макроассемблере АБ будет не «несколько меньше писанины», а глобальное упрощение программирования.
Мне пришлось полностью свою фразу отквотить, чтобы Вы могли ее еще раз внимательно прочитать. Сизифов труд, заниматься математикой на ассемблере. "учите C".
AQ29 писал(а): Более того, для производителей МК будет ещё и убыток, ведь объём написанных программ будет значительно меньше, значит, будут покупать более дешёвые МК.
Капиталисты деньги считают.
У Вас первая фраза противоречит последней. Для примера, час работы даже низкоквалифицированного программиста обходится не менее, чем в $20 (я не говорю, что этот индус столько получит на руки - если интересно, расчет могу привести). МК с бОльшим объемом флеш, если оно и потребуется, будет стоить, от силы, на полдоллара дороже. Отсюда получаем, что день работы индуса, в теории, имеет шансы окупиться только на тираже свыше нескольких сотен экземпляров. Проблема в том, что на нескольких сотнях дополнительный флеш станет стоить десяток центов. И мы так итерационно прийдем к тысячным тиражам. А если оценить шансы (когда памяти для C не хватает, а ассемблером можно еще вписаться) и учесть то, что поддерживать и контролировать ассемблерный код в разы дороже, то написание всего проекта на ассемблере не окупится вообще никогда. Именно поэтому, при производстве ПО, на ассемблере пишут программисты себестоимостью от $50 в час и только очень незначительную часть кода всего проекта, где использование ассемблера действительно необходимо. А при таком подходе, понятно, что использование ассемблера в виде ассемблерных вставок на C очевидно выгодней.
На мой вгляд, целиком на ассемблере сейчас проекты пишут только два типа людей:
1. Те, для кого ассемблер просто хобби. Ради фана, при наличии свободного времени.
2. Безработные, которым время все равно девать не куда.

Безусловно, для проектов на МК умение программировать на ассемблере желательно. Но уже давно это умение не является необходимым. А вот умение программировать на C, IMHO, необходимо любому программисту.
Другое дело, что народ из крайности в крайность бросается, начиная городить объектно-ориентированные модели на МК. Но это уже из другой оперы. Я о C++ вспоминаю, только если у меня памяти заведомо больше, чем может потребоваться проекту даже в дальней перспективе.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Сообщение Andrew Martin »

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

Сообщение BOB51 »

Ладныть...
Усе хорошо в меру умеренного потребления и для соответствующего места (иначе потравиться и лечебным препаратом можно).
По вопросу ассемблера...
Когда делается небольшая самоделка (полностью на своей схемотехнике) без такового не обойтись.
Когда используется уже кем-то разработанное устройство то для сокращения времени разборов с конфигурацией и прочими наворотами предпочтение высокоуровневому языку (а то, что какой-то разработчик ранее позаботился о создании библиотек,
БИОС и прочего для данного блочка нас вобщем уже не интересует).
НО... стоит только отступить от "стандартных правил использования" или попытаться намутить "отсебятинку" как в большинстве случаев у "начинающих" появляется призрак бело-пушистого... (не котейки!)...
Теперь про библиотеки-макросы в применении к ассемблеру от Атмел (студио 4.19 и проччее...)...
Библиотечные решения хороши для абстракций, отвлеченных от железа - математика, всяческие преобразования - то, что основано на ядре и системе команд, но не касается прикладных аппаратных модулей.
Макрос - больше как создание "недостающих" микрокоманд, возможно целевых блоков программной конфигурации аппаратных средств (своеобразный базовый БИОС для конкретного кристалла).
И при всем прочем раскидаем проект по разным файлам, имеющим соответственные задачи.
Воть как-то так...
:dont_know:
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Сообщение ptr128 »

BOB51 писал(а): По вопросу ассемблера...
Когда делается небольшая самоделка (полностью на своей схемотехнике) без такового не обойтись.
В общем случае, без ассемблера на любой платформе не обойтись. В ядре любой ОС есть ассемблерные вставки. Ведь даже в том же C нет операторов ввода-вывода. Я призывал не увлекаться ассемблером, так как этим не только увеличиваете трудозатраты, но и понижаете надежность и безопасность кода.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

BOB51 писал(а): По вопросу ассемблера...
Когда делается небольшая самоделка (полностью на своей схемотехнике) без такового не обойтись.
От АСМа сейчас толку не больше, чем от применения коммутаторных лампочек вместо светодиодов.
Это некоторые не могут обойтись, а другие обходятся и вполне успешно. Для новичков АСМ вообще неподъёмный груз, а профи его практически не юзают.
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Сообщение ptr128 »

scorpi_0n писал(а): От АСМа сейчас толку не больше, чем от применения коммутаторных лампочек вместо светодиодов.
ptr128 писал(а):Ведь даже в том же C нет операторов ввода-вывода.
Объясните, пожалуйста, как на C можно что-то вывести в порт или прочитать из порта, если вдруг архитектура не позволяет обратиться к порту через адресное пространство памяти? (например, x86)
Так же очень интересно было бы увидеть код на C, останавливающий выполнение команд (sleep), обеспечивающий задержку на 1-2 такста, запрещающий и разрешающий прерывания.

Я прошу именно код на С, а не вызов функции C, уже содержащей в себе ассемблерную вставку.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
akl
Друг Кота
Сообщения: 4473
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Сообщение ptr128 »

scorpi_0n писал(а): Для одного МК может быть несколько АСМ. Все они подходят как вставки в Си? Нет!
Зависит от кривизны toolchain. В общем случае - да, подходят.
"If your code needs to support multiple assembler dialects (for example, if you are writing public headers that need to support a variety of compilation options), use constructs of this form:
{ dialect0 | dialect1 | dialect2... }"
Пруф: https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
scorpi_0n писал(а): Если убрать в Си поддержку АСМ не изменится ровным счётом ничего, просто не будет поддержки АСМ.
Докажите.
ptr128 писал(а): Я прошу именно код на С, а не вызов функции C, уже содержащей в себе ассемблерную вставку.
Код где?
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

ptr128 писал(а): Код где?
А что, выходной код на АСМе? Не будьте так смешны! Бросайте свои РС-привычки, МК это вам не РС.

И потом, вам уже сказали открытым текстом
Достали!
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Сообщение ptr128 »

scorpi_0n писал(а): Не надо умничать.
Бред!
Успокойся. Здесь взрослые мужчины технические вопросы обсуждают, а не сварливые бабы эмоциями обмениваются :)))
scorpi_0n писал(а):Не плодите легенды! Си не относится к языкам с высокой надёжностью и безопасностью. Одни указатели чего только стоят.
Внимательно прочитайте название темы. Видите слово "Микроконтроллеры"? Ну так приведите пример проекта для МК, который обходится без указателей на любом языке.

Добавлено after 3 minutes 48 seconds:
scorpi_0n писал(а): А что, выходной код на АСМе?
Я прошу Вас доказать, что Ваше утверждение
scorpi_0n писал(а): От АСМа сейчас толку не больше, чем от применения коммутаторных лампочек вместо светодиодов.
истинно. Каким образом Вы можете это доказать, я написал:
ptr писал(а): Объясните, пожалуйста, как на C можно что-то вывести в порт или прочитать из порта, если вдруг архитектура не позволяет обратиться к порту через адресное пространство памяти? (например, x86)
Так же очень интересно было бы увидеть код на C, останавливающий выполнение команд (sleep), обеспечивающий задержку на 1-2 такста, запрещающий и разрешающий прерывания.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Друг Кота
Аватара пользователя
Сообщения: 23858
Зарегистрирован: Пт дек 12, 2014 09:36:15
Откуда: Минск

Сообщение FAKIR »

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

Сообщение BOB51 »

akl писал(а)::kill: Достали! Тема называется Ассемблер (ASM) для AVR в вопросах и ответах.
Поддерживаю мнение!
От себя добавлю...
Высказывания некоторых Котов, при всем уважении к их породистости,
вместо развития темы навыков использования компиляторов ассемблера
весьма напоминают собор святой инквизиции на тему
"осуждение и обоснование запрета изучения неверной трактовки
великого СИ, представляемой еретиками-ассемблеристами и вселенской ереси
их (сторонников демона-асмодея) высказываний и учений".
8)
Ежли у кого чего в ответ - просю в личку, дабы тему не размывать.
:wink:
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Сб сен 17, 2016 18:56:30

Сообщение dimmer »

Парни помогите, компилирую это в avrasm2:

Код: Выделить всё

.macro test1
.ifdef @0
	.message "Defined"
.else
	.message "Not Defined"
.endif
.endmacro

.macro test2
.ifndef @0
	.message "Not Defined"
.else
	.message "Defined"
.endif
.endmacro

.cseg
	nop
	test1 regX
	nop
	test2 regX

получаю бред какой-то:

Код: Выделить всё


                 .cseg
000000 0000      	nop
test.asm(3): Defined
test.asm(5): Not Defined
                 	test1 regX
000001 0000      	nop
test.asm(11): Not Defined
                 	test2 regX
это глюк компилятора, или закон какой-то против меня?

Однако:

Код: Выделить всё

                 .def regX = r2
                 
                 .macro test
                 .ifdef @0
                 .else
                 	.message "Not Defined"
                 .endif
                 
                 .ifndef @0
                 .else
                 	.message "Defined"
                 .endif
                 .endmacro
                 
                 .cseg
000000 0000      	nop
test1.asm(12): Defined
                 	test regX
                 
000001 0000      	nop
test1.asm(7): Not Defined
                 	test regY
Ответить

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