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. Если возможно. А если невозможно, то нужно выяснить какое из зол является меньшим и прибегнуть именно к этому злу.


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

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

Дофига таймеров с кучей режимов работы; аппаратные SPI, I2C, CAN, USB; DMA и много других плюшек.

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

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

не нужен мне арм

Ты его просто не пробовал. А потом начнешь даже в генератор импульсов вместо 555 микроконтроллер пихать ☺

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

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

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

vvviperrr ★★★★★
()

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

Я б советовал использовать GNU assembler, который использует gcc при компилировании под AVR. Cможешь легко читать ассемблерный выхлоп от gcc компилятора под AVR и что-то в нем при желании исправлять и переписывать на ассемблерные вставки, и кроме того так можно «научиться» у gcc писать код на ассемблере

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

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

Понятия не имею. Наверное есть какие-нибудь книжки по ассемблеру.

Почему не начать с простого примера и пробовать делать его более сложным?

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

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

Это объясняется в документации на конкретный ассемблер. Вот для GNU - https://sourceware.org/binutils/docs/as/

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

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

Это стандартный стартовый код. Содержит в себе таблицу прерываний, вызов конструкторов и деструкторов, инициализацию сегмента данных и обнуление BSS.

Ну и да, если хочется методического подхода, тог документацию нужно читать целиком. В противном случае - метод тыка и stackoverflow.com.

alexru ★★★★
()

А почему ты начал с «AT90S8535 и ATMEGA8535». Если хочешь просто попробовать и сделать пару учебных проектов, то возьми себе Atmega8/328/16/etc... Их можно достать в любых радиотоварах и гемора с поддержкой сих микроконтроллеров в avra не будет.

Ещё есть вариант - это Proteus, там можно поиграться тоже с разными моделями.

unixwz
()

программатор «5 проводков в LPT порт» собирается руками за полчаса :)

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

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

для AVR это совсем не так

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

Дофига таймеров с кучей режимов работы; аппаратные SPI, I2C, CAN, USB; DMA и много других плюшек.

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

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

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

Ты его просто не пробовал. А потом начнешь даже в генератор импульсов вместо 555 микроконтроллер пихать ☺

ну вот может потом

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

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

Cможешь легко читать ассемблерный выхлоп от gcc компилятора под AVR

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

Почему не начать с простого примера и пробовать делать его более сложным?

но можно же разобраться досконально, интерес есть и время есть. не по работе же делаю.

Это объясняется в документации на конкретный ассемблер. Вот для GNU - https://sourceware.org/binutils/docs/as/

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

Это стандартный стартовый код. Содержит в себе таблицу прерываний, вызов конструкторов и деструкторов, инициализацию сегмента данных и обнуление BSS.

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

А почему ты начал с «AT90S8535 и ATMEGA8535».

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

программатор «5 проводков в LPT порт» собирается руками за полчаса :)

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

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

У вас что ли алиэкспрессов с ибеями нет в Беларуси? Там и микроконтроллеры легко покупаются (девборды от 100 российских рублев), и бумага (ищи «pcb paper»).

Крайне не советую начинать с атмелей. Потому как это дно! Они устарели во всех отношениях, а по параметру цена/качество просто зашкаливают!

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

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

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

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

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

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

но в целом я бы радостно выбрал что-нибудь еще более примитивное, желательно выпаиваемое из мусора. мне же сугубо по приколу, я ничего серийного и на заказ делать не собираюсь. а как соберусь - ну там действительно за STM32 засесть можно, там даже линукс бывает

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

хотя вероятнее что дальше я буду двигаться в направлении Z80, впрочем, об этом пока рано рассуждать. но интерес есть.

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

Нет. Отмель — это финиш. Это просто дно. Путь для идиотов.

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

Z80

Окстись! Это ж вообще жесть!!!

Даже на самых элементарных STM32 оно эмулируется!

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

Блин, бери STM8 — стоит копейки. Восьмибитный. RM всего 500 страниц. Элементарщина! Зато есть еепром и еще кой-какие фишки.

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

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

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

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

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

Может стоит ещё посмотреть в сторону FPGA? Тоже очень интересная тема.

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

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

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

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