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