LINUX.ORG.RU

AVR assembler, трансляция + эмуляция

 , ,


1

2

Пока с алиэкспресса едет программатор я тут думаю, а на чём писать, чем транслировать и как дебажить?

Да, я знаю что 90-95 процентов окружающих меня людей убеждено что ассемблер это очень плохо и не в коем случае нельзя на нём программировать.

Я вам обещаю что когда-нибудь я обязательно завяжу с этим и возьмусь за Си, но для начала хочется немного ассемблера, ладно?

Советы по сишке, кстати, я тоже не отклоняю, просто там всё более-менее понятно, поскольку большая часть хау-ту на тему AVR+Linux подразумевает именно сишку и gcc, про ассемблер же информации как-то маловато.

Вероятно сказывается тот факт, что в Unix-сообществе исторически недолюбливают ассемблер именно в пользу сишки, помнится юникс так и получился, когда кто-то бросил всё и внезапно переписал ОС на тормозной сишке. Все ругались, но почему-то привыкли, а потом компьютеры стали быстрыми и все даже забыли на что ругались. К чему это я, к тому что мне просто интересно потрогать ассемблер, я же не по работе это делаю, а для интереса сугубо(с работы меня уже за это выгнали).

Вот есть у меня две микросхемы, AT90S8535 и ATMEGA8535. посмотрел даташиты - всё очень похоже, хотя вот количество инструкций разное и не только. Уж не помню откуда они у меня взялись и что я с ними делал, но смутно помню что был оффтопик, avr studio и что-то даже работало. Есть, конечно, дурная мысль поставить оффтопик снова или даже запустить авр студию на вайне, но я как-то даже и не знаю что хуже. Хочется чего-то нативного, простого и надёжного.

Для начала нужно было повторить материал и я прочитал еще раз известную книгу Василия Белова в её последнем издании. Там всё на примере avr studio, по-этому, что бы не дурить себе голову, я накатил avra(совместимость заявлена) и вбил туда первый же примитивнейший хелло-ворд из данной книги. Собралось не сразу, поскольку выяснилось что AT90S8535 в списке поддерживаемых есть, а ATMEGA8535 почему-то отсутствует, хотя .def для неё лежит где надо искаропки. Причём при попытке подключить этот деф оно ругается на слишком длинную строку и на то, что девайса такого она не знает, хотя дефинишн для него искаропки в составе пакета есть(зачем?). Ладно, редактирую, меняю имя девайса на atmega8(ну а что еще делать?) и нарезаю строку так что бы она влезла - там комментарий длинный был. Всё транслируется, получаем hex, obj и прочую муть. Не знаю будет ли оно работать, а как вы думаете, будет?

Чтоб ответить на этот вопрос беру simulavr и пытаюсь ему скормить то что получилось. Для начала выясняю что «Only the bin file format is currently implemented. Sorry.», то есть хекс оно не хавает. Что там у нас еще есть? Есть какой-то obj - это вообще что? Утилита file говорит что это «data». И куда её такую? Пытаюсь скормить этот obj - что-то происходит. запускаю с показывалкой регистров - много чего дёргается, но по ощущениям происходит какая-то ерунда, поскольку дёргаются совершенно не те регистры которые я дёргал в коде, да и в выводе полно ворнингов, например «WARNING: Unknown opcode: 0xffff». Но дело даже не в этом, я вообще принципиально верно действую или пихаю не то и не туда?

Опять-таки, смотрю какие девайсы поддерживает simulavr и в чистом виде не вижу там не одной из своих микросхем. Я вообще наверное зря исправил ".device ATmega8535" на ".device ATmega8", ну а что мне оставалось? ставить оффтопик? покупать другую микросхему?

Хочется эмуляции, дебага, порты там дёргать скриптом на питоне и смотреть что будет в результате. Это вообще возможно?

Я просто в книжке прочитал что можно дебажить, всякие там точки останова вводить, регистры смотреть и мне эта мысль понравилась. Наверное если так делать - намного быстрее всё получаться будет или это сказки из идеального мира? Идея в том, что бы увидеть что прототип в принципе как-то шевелится и только после этого заливать его на кристалл, да и вообще не хочется сидеть сложа руки пока программатор два месяца идёт с алиэкспресса, а потом не приходит и надо заказывать его заново и еще два месяца ждать. За это время можно много рабочего кода наколбасить.

При этом хочется сделать всё красиво, по юникс-вэю, без IDE, оффтопика и wine. Если возможно. А если невозможно, то нужно выяснить какое из зол является меньшим и прибегнуть именно к этому злу.


Зачем козе баян? Пишите на Си.

anonymous
()

Твой говнокод на ассемблере будет практически всегда тормознее более-менее нормально написанной «тормозной сишки».

anonymous
()
Ответ на: комментарий от anonymous

да-да, конечно, я знаю и не сомневаюсь. но всё-же, существует ли способ писать на чём-то кроме си? или эта тема табуирована?

n0153
() автор топика

There might be several reasons to write code for AVR microcontrollers using plain assembler source code. Among them are:

Code for devices that do not have RAM and are thus not supported by the C compiler.
Code for very time-critical applications.
Special tweaks that cannot be done in C.

вот меня пункт первый особенно интересует. выходит что иногда сишку в принципе нельзя применить? как так? подрыв устоев?

n0153
() автор топика
Ответ на: комментарий от n0153

выходит что иногда сишку в принципе нельзя применить? как так? подрыв устоев?

Никакого подрыва это же медленный микроконтроллер, каждый такт может быть на счету. А может и не быть, тогда проще на си :)

DuMOHsmol
()
Ответ на: комментарий от DuMOHsmol

это понятно. но из этого непосредственно следует, что gcc-шный вариант ассемблера можно применять там же, где и gcc-шную сишку, наверное. отсюда вопрос - насколько ассемблер из avr studio похож на gcc-шный вариант? уж наверное не идентичен. надо разобраться.

n0153
() автор топика
Ответ на: комментарий от n0153

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

DuMOHsmol
()
Ответ на: комментарий от DuMOHsmol

я, повторюсь, ничего против си не имею. просто хочу попробовать си и ассемблер, что бы лично, на своём опыте ощутить все плюсы и минусы. мне не лень.

n0153
() автор топика
Ответ на: комментарий от DuMOHsmol

Насчет древней AVR Studio не знаю, но в Atmel Studio компилятор GCC.

насколько я помню, там на ряду с ассемблером поддерживается ряд компиляторов или что-то в этом роде. в любом случае - не суть, до оффтопика я пока не дошёл - это последняя мера:)

n0153
() автор топика

Уф, прочитал портянку целиком :)

avra

А чего не ассемблер из GCC? По-моему он популярнее.

Only the bin file format is currently implemented. Sorry.», то есть хекс оно не хавает.

Есть тулза hex2bin.

DuMOHsmol
()

Не совсем улавливаю суть этой портянки, но чем avr-as не угодил? Он поддерживает все, что поддерживает GCC. И отладка GDB.

Это тупняк и трата времени, но если сильно хочется...

alexru ★★★★
()

Выкинь это устаревшее говно! Переходи на STM32.

anonymous
()

Из всех эмуляторов годный только из avrstudio. Всё остальное гуано и недоделано (если вообще работает). В частности в них, как правило, нет прерываний. Таймеров тоже нет. Т.ч. ни для чего более серьёзного, кроме как дёрнуть пин, их использовать не возможно.

beastie ★★★★★
()
Ответ на: комментарий от DuMOHsmol

А чего не ассемблер из GCC? По-моему он популярнее.

вот я тоже прихожу к этому выводу, хотя там всё как-то странно

Есть тулза hex2bin.

именно это мне и надо было, просто не знал как сформулировать

Не совсем улавливаю суть этой портянки, но чем avr-as не угодил?

исключительно тем, что исходники из книжки на нём не запускаются. придётся применить смекалку, как обычно.

Выкинь это устаревшее говно! Переходи на STM32.

так можно много на что перейти. а сколько он стоит? сколько жрёт? в дип корпусе есть? какую обвязку требует? чем зашивается? сомневаюсь что это соответствует моим задачам, спасибо что не интел

кстати вот эта статья про ассемблеросрач мне кажется очень нейтральной и здравой http://easyelectronics.ru/c-vs-assembler.html по сути именно так я и хотел поступить, так и поступлю. остаётся вопрос средств. не понимаю где мне читать про avr-as что бы всё понять и всё заработало.

n0153
() автор топика

При этом хочется сделать всё красиво, по юникс-вэю, без IDE, оффтопика и wine. Если возможно. А если невозможно, то нужно выяснить какое из зол является меньшим и прибегнуть именно к этому злу.

http://www.atmel.com/tools/studioarchive.aspx версия 4.19 для ассемблера самое оно, правда под ненавистный мастдай

VKraft ★★
()
Ответ на: комментарий от n0153

Простая программа на ассемблере:

#include <avr/io.h>
	.text
	.type	main, @function
	.global main
main:
1:	jmp	1b
	.size	main, .-main

Компилировать так: avr-gcc -mmcu=atmega2561 main.S

Если хочется стартовый код тоже самому писать, то нужно линкерные скрипты менять, ну и собственно стартовый код или писать или выдирать из самого GCC.

alexru ★★★★
()
Ответ на: комментарий от n0153

а сколько он стоит?

От 16 рублей за STM32F030 в 20-ногом корпусе и выше. Средней паршивости STM32F103 стоит около сотни.

сколько жрёт?

Зависит от модели, есть L-серия, которая от батареек рассчитана работать.

в дип корпусе есть?

Нет, конечно. Какому идиоту может понадобиться DIP? Это ж мало того, что размеры огромные, так еще и дырки в печатной плате сверли...

Для тренировок полным-полно девборд, по цене от ~110 рублей (для STM32F030) до где-то тысяч 5-8 за какие-нибудь мегакрутые сборки с экранчиками и кучей всякой фигни.

какую обвязку требует?

В минимуме — пара кондеров.

чем зашивается?

Много вариантов: можно St-link'ом, можно через баксовый переходник USB<->TTL через бутлодыря, можно вообще напрямую через USB-DFU у моделей, это поддерживающих.

сомневаюсь что это соответствует моим задачам

Не сомневайся, очень соответствует. Купи и программируй.

Для начала можешь мои сниппеты поюзать. На сайте STM тоже сниппетов полно под любой камень.

anonymous
()

Пока с алиэкспресса едет программатор

мог бы просто купить самую дешевую ардурину за 100-200р и из нее сделать isp программатор. avrdude поддерживает. ну либо usbasp собрать.

vvviperrr ★★★★★
()

Да, я знаю что 90-95 процентов окружающих меня людей убеждено что ассемблер это очень плохо и не в коем случае нельзя на нём программировать

Чего?

fenris ★★★★★
()
Ответ на: комментарий от beastie

Из всех эмуляторов годный только из avrstudio

а как же proteus?

vvviperrr ★★★★★
()

vim+avr-gcc+avrdude+makefile вот и весь юниксвей

Dark_SavanT ★★★★★
()
Ответ на: комментарий от beastie

Из всех эмуляторов годный только из avrstudio. Всё остальное гуано и недоделано (если вообще работает). В частности в них, как правило, нет прерываний. Таймеров тоже нет. Т.ч. ни для чего более серьёзного, кроме как дёрнуть пин, их использовать не возможно.

встаёт вопрос, а нужны ли они? а что насчёт отладки реальной схемы вживую по jtag, к примеру? это поддерживается получше?

n0153
() автор топика
Ответ на: комментарий от alexru

Простая программа на ассемблере:

ок, допустим, где-нибудь написано об этом внятно и развёрнуто? что это такое, с чем это есть и как? что-то я находил по этой теме, но там так всё пояснено, типа всё и так ясно, только вот еще какие-то частности прояснить надо.

n0153
() автор топика
Ответ на: комментарий от anonymous

Для начала можешь мои сниппеты поюзать. На сайте STM тоже сниппетов полно под любой камень.

но ты же согласишься что порог вхождения тут повыше будет по совокупности параметров. и таки да, дип корпус мне важен, поскольку я печатные платы вообще не делаю, потому что они мне не нужны. то есть в моём случае это означает переходник, который не факт что существует даже. в общем может быть, но в другой раз.

n0153
() автор топика
Ответ на: комментарий от n0153

фанатики должны страдать. не оффтопик это голый avr-gcc и avrdude. ну мб взлетит еще openocd с avrjtag, не пробовал. а протеус - отличный профессиональный инструмент.

vvviperrr ★★★★★
()
Ответ на: комментарий от fenris

Да, я знаю что 90-95 процентов окружающих меня людей убеждено что ассемблер это очень плохо и не в коем случае нельзя на нём программировать

Чего?

я тоже удивляюсь

n0153
() автор топика
Ответ на: комментарий от n0153

порог вхождения тут повыше

Да, зато периферия какая богатая! А в говноотмелях — пшик!

Да и по цене самый выигрышный вариант — STM32.

дип корпус мне важен

Нет, ты поймешь, что удобней паять SMD. И ПП делать под SMD. А для беспаечных макеток, как я уже говорил, есть девборды, где камень с минимальной обвязкой уже распаян. И стоят они от силы в 2 раза дороже голого камня!

я печатные платы вообще не делаю, потому что они мне не нужны

Т.е. электронику ты не разрабатываешь вообще? Зачем тогда тебе микроконтроллеры?

anonymous
()
Ответ на: комментарий от vvviperrr

На любителя. Мне за глаза хватает geany. Отладка — через контрольные ноги и UART или USB-CDC.

anonymous
()
Ответ на: комментарий от vvviperrr

а протеус - отличный профессиональный инструмент.

ну я же не профессионал какой-нибудь. я как раз фанатик. стало быть avr-gcc мой выбор. где описан данный диалект ассемблера? жажду почитать. видимо пока придётся дебажить осциллографом, а там может быть с джейтэгом освоюсь, когда для осциллографа мутновато станет.

а если вдруг стану профессионалом настолько, что вот совсем, то поставлю себе значит оффтопик и буду там протеус гонять, что поделать. но это навряд ли, не такой я человек.

n0153
() автор топика
Ответ на: комментарий от n0153

так и я электроникой и микроконтроллерами занимаюсь исключительно в качестве хобби. и в виртуалке в винде стоит весь проприетарный фарш - и протеус, и атмел студия, и iar для stm-ок. из той же студии удобно работать с jtag через avr-dragon. в протеусе удобно симулировать, рисовать схемы, разводить pcb. а когда изучал ассемблер - да, мне хватало вима и тулчейна. если и тебе этого хватает - не понимаю, в чем тогда вопрос.

да и вообще не хочется сидеть сложа руки пока программатор два месяца идёт с алиэкспресса

вот уже бы давно писал в протеусе, а не тратил бы время тут))

да и ответил я тебе про программатор. что ты заказал? китайский usbasp?

vvviperrr ★★★★★
()
Последнее исправление: vvviperrr (всего исправлений: 2)
Ответ на: комментарий от anonymous

Да, зато периферия какая богатая! А в говноотмелях — пшик!

а какая такая там периферия есть, которая мне нужна а в атмелях нету?

И ПП делать под SMD.

с этого места подробнее. я умею делать платы ЛУТом и фоторезистом, но трудозатраты таковы, что удобнее использовать паечную макетку, готовую или самодельную. а беспаечных технологий я вообще не понимаю. габариты мне, как правило, не важны и схемы я делаю достаточно простые как правило и всегда в одном экземпляре. ну не нужны мне ПП. вечно как ПП - так проблема. то сопля, то непропай, то перетрав, то непротрав. сверлить, драть, пилить, хлорным железом дышать. зачем? к картонке проволочных скобочек прихватил и паяй себе в радость к ним длинные выводы. или просто на покупную макетку, причём её же много раз использовать можно, как и самодельную, впрочем.

Т.е. электронику ты не разрабатываешь вообще? Зачем тогда тебе микроконтроллеры?

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

хотя была у меня идея на тему с ультразвуком поиграться, до мегагерца. жутко интересно замедлить его и послушать. вот тут арм пригодился бы. прикидывал я и приходил к выводу что сделать это без арма почти невозможно. но это потом. с наскоку не потяну, объективно. а так поиграюсь с аврами, прочувствую некоторые моменты и тогда уже приду спрошу про арм. может к тому времени появится доступная и быстра фрезеровка ПП, и линуксовый софт удобный для их разводки. а пока это только головную боль себе аккумулировать.

n0153
() автор топика
Ответ на: комментарий от vvviperrr

и в виртуалке в винде стоит весь проприетарный фарш

не исключаю такого подхода, но начну с примитивного, пожалуй

а когда изучал ассемблер - да, мне хватало вима и тулчейна. если и тебе этого хватает - не понимаю, в чем тогда вопрос.

в общем-то уже не вопрос, просто информацию на будущее собираю.

да и ответил я тебе про программатор. что ты заказал? китайский usbasp?

да, именно его, сугубо самый дешевый.

n0153
() автор топика
Ответ на: комментарий от n0153

я умею делать платы ЛУТом и фоторезистом... вечно как ПП - так проблема. то сопля, то непропай, то перетрав, то непротрав.

точно умеешь? )

сверлить, драть, пилить, хлорным железом дышать. зачем?

такова карма радиолюбителя;)

твой вопрос легко решается при помощи поисковой системы: http://avr-prog.blogspot.ru/2014/01/simulavr.html

zudwa
()
Ответ на: комментарий от n0153

да, именно его, сугубо самый дешевый.

скорей всего он идет со своей китайской прошивкой, в системе видится как usb-hid, и работает только со своей китайской софтиной, которая есть только под винду. чтоб перешить его под нормальный usbasp (который будет работать под линуксом), тебе нужен второй программатор :)

vvviperrr ★★★★★
()
Ответ на: комментарий от vvviperrr

Не факт, покупал два дешевых uasbasp, внутри обычная прошивка, только старая. Насколько помню, программаторы с hid китайцы подписывают usb isp.

DuMOHsmol
()
Ответ на: комментарий от DuMOHsmol

ну видимо как повезет. моим знакомым пришел hid, приходили перепрошиваться. а подписывать китайцы могут и так - New USBASP USBISP AVR Programmer USB ATMEGA8 ATMEGA128 Support Win7 64K Free Shipping. вот и гадай тут.

vvviperrr ★★★★★
()
Ответ на: комментарий от zudwa

точно умеешь? )

ну так. получилось когда от меня потребовали плату, но для себя я их не делаю. как минимум их в чём-то развести нужно, софт осваивать. а потом еще и принтер нужен, ну не покупать же его. была бы ЧПУ-фрезеровка доступная, я бы может её и освоил, как более универсальный метод, подходящий для обработки самых разных материалов + автоматизация сверления вдогонку. а чисто ради плат заморачиваться - что-то лень.

когда я делал ЛУТом - принтер мне выдали, файл для печати тоже. сказали сделай плату и я сделал. получилось норм. пробовал маркером рисовать - тоже норм. участвовал в работе с фоторезистом - увидел это шаманство и подумал что лучше я до конца дней на картонке паять буду.

был бы у меня оффтопик и принтер - может быть и делал бы обычный ЛУТ, вроде не сложно, но т.к. нету - то и не заморачиваюсь.

твой вопрос легко решается при помощи поисковой системы: http://avr-prog.blogspot.ru/2014/01/simulavr.html

читал и это и другое - там не объясняются директивы препорцессора. в частности вот:

.section .text
.global  main

непонятно

n0153
() автор топика
Ответ на: комментарий от vvviperrr

ну видимо как повезет. моим знакомым пришел hid, приходили перепрошиваться. а подписывать китайцы могут и так - New USBASP USBISP AVR Programmer USB ATMEGA8 ATMEGA128 Support Win7 64K Free Shipping. вот и гадай тут.

мой случай https://ru.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATME...

n0153
() автор топика
Ответ на: комментарий от n0153

вчитался в описание и понял что это наверное была не самая умная покупка в моей жизни. но скриншот Khazama AVR Programmer обнадёживает, наверное это свидетельствует о стандартности прошивки. но рядом скриншот с иероглифами и он меня совсем не радует. надо было смотреть хотя бы на что-нибудь кроме цены. поторопился.

n0153
() автор топика
Ответ на: комментарий от vvviperrr

типа припаиваюсь к нужным выводам другим программатором и зашиваю туда USBasp и забываю про особенности его родословной навсегда?

ну видимо придётся. как вариант - возьму старый ноут, накачу разочек туда оффтопик и перешью LPT-портом, так ведь тоже можно, да?

кстати я нашёл где описаны эти директивы: http://www.nongnu.org/avr-libc/user-manual/mem_sections.html меня просто смутило «libc» в URL-ке. выглядит как то, что мне пока что ненужно. а оказывается директивы ассемблера описаны именно там.

n0153
() автор топика
Ответ на: комментарий от n0153

.section .text - указание линкеру разместить код в области программ

.global main - экспорт точки входа в программу из текущего модуля компиляции, например, если используется какой-то стартап код, который далее передает управления в main.

zudwa
()
Ответ на: комментарий от vvviperrr

можно

кстати я внезапно понял что припаиваться никуда не нужно, он программирует теми же контактами, которыми можно программировать его.

если используется какой-то стартап код

пока не совсем понятно что это за код, надо почитать

n0153
() автор топика
Ответ на: комментарий от zudwa

http://www.nongnu.org/avr-libc/user-manual/assembler.html
External functions need to be declared to be .global. main is the application entry point that will be jumped to from the ininitalization routine in crts1200.o.

что за «crts1200.o.» я не понял. видимо надо прочитать всю документацию целиком

n0153
() автор топика
Ответ на: комментарий от n0153

ноги растут из gas, но и тут используются туманные на первый взгляд термины https://sourceware.org/binutils/docs-2.27/as/Global.html например что еще за «partial program»?

это что-то что мы инклюдим? или что бы что-то что мы дефайним было видно в том, что было заинклюжено?

короче читать надо

n0153
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.