настоящий и ненастоящий assembler через арудину

Газзель!!!

✩✩✩✩✩✩✩
22 Авг 2022
28
1
Во первых спасибо всем кто мне отвечал по настройке оболочки! здесь, тк мою тему стерли.

теперь вопр другой. Я знаю что в скетч можно делать вставки типа строки asm (" " \n\t) или много строк, но по многочисленным обрывкам в коментах по форумам, я так понял что это некий формат для С+, который потом видоизменяется или не принимается вовсе.

однако якобы c помощью avr gcc и без экстерн С можно в чистом виде использовать асембля внутри ардуины прям как в авр студио, если просто редактировать в ворде некий файл с расширением .S , который должен быть в папке вместе с .ino , но у меня такого нет! И нигде такого тоже не нашел. По еще меньшим обрывкам, внутри этого файла .S скорее всего должно быть нечто #include < .h> , но что именно там должно быть неизвестно совсем, а может это у меня каша в голове.

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

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

или дате плиз сылку. Все что я находил, это или последий этап, или перечень особенностей, или намеки как это состыковать, но готовой инструкции нигде нет. Например Гайвер пишет, что для использования ассемблера "где-то" должны быть созданы макросы https://alexgyver.ru/lessons/registers/ Это что, весь Instruction Set Summary нужно переписать? У 328Р их 131. И как их правильно создать для каждой- не известно. По моему тему интересна очень многим?

Спасибо заранее! извините, если быстро не отвечаю, надеюсь успеть прочитать ответо до того как сотрут
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,969
632
44
Цель- не хочу даже начинать учить ардуину и тем боле С, я не программист и им уже не стану никогда, для моих простых задач ассемблера хватит с избытком. Есть комп с юсбой, есть платка нано, хочется все это подсоединить и пользоваться без дальнейшего вникания.
Этокак? Чтобы программировать контроллер под ассемблером нужно знать его устройство гораздо глубже, ибо все управление происходит на самом низком уровне.
И да, вы не сможете просто так подключить контроллер к компьютеру и хотя бы запрограммировать его. Вам нужен либо программатор, либо контроллер с прошитым специальным загрузчиком с USB-UART.
 

Газзель!!!

✩✩✩✩✩✩✩
22 Авг 2022
28
1
да, все описание есть в даташите, перечень регистров и команды, а также главы отдельно поструктурно, наприм на порты, собсвенно все в одном, ясно и понятно от первоисточника. Немножко нужно напрячься со словарем, но можно и так догадаться, я не программер и фатальные ошибки мне не страшны порследствиями в примитивных проектах. Я пока не совсем разобрался с организацией памяти в 328Р, но методом перебора можно понять

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

Геннадий П

★★★★★★✩
14 Апр 2021
1,969
632
44
Вот я то и хочу использовать загрузчик ардуины, тоесть использовать готовую плату нано, но писать на асембле. Это абсолютно точно возможно, но пошаговой инструкции, возьми и пользуйся, нету.
Ну, пишете в ассемблере, затем в HEX или BIN файл, и затем загоняете через avrdude в плату.
 

Газзель!!!

✩✩✩✩✩✩✩
22 Авг 2022
28
1
так програматор нужен? у нано есть разьем для ин циркуит программинг? Не наю как атмега, я ее только купил, а на ПИКах передергивать проводочки вродебы несложно,, но бесит. Я понимаю что возможно все, и что все остальные так и делают, но хочется воткнуть в юсб и забыть
 

bort707

★★★★★★✩
21 Сен 2020
3,061
912
но писать на асембле.
вы программировать хоть на чем-то умеете?
Потому как ассемблер и Си конечно очень разные - но их обьединяет что и на том и на другом программировать нужно уметь!
Без программирования просто "включить и пользоваться" контроллер работать не будет.
 

bort707

★★★★★★✩
21 Сен 2020
3,061
912
А вообще сколько было тем от "старичков" с мыслью "не могу выучить Си, буду писать на АСМе" - всегда это в итоге было "НЕ ХОЧУ ВООБЩЕ НИЧЕГО учить" и кончалось абсолютно ничем.
 

Vaqtincha

★✩✩✩✩✩✩
14 Ноя 2022
154
21
Uzbekistan, Fergana

@bort707,
Никогда не понимал зачем асм (если это не мат. задачи) когда есть удобный с/с++. От такого железа как у нано асм думаю не сильно поможет. Я думаю давно надо было закопать авр с неадекватно конский ценой.
 
Изменено:

Газзель!!!

✩✩✩✩✩✩✩
22 Авг 2022
28
1
я подозревал что этим все и кончится. Все люди разные, и у всех разне потребности. Сам пишите, сколько уже было тем, значит ответа так и не было. А еслиб он был, то и столько тем больше не было бы.

Можно разжевать, авр дю понимает нано? тоесть в авр студие создаю хекс, и потом авр дюд его через юсб зальет в нано?
 

poty

★★★★★★✩
19 Фев 2020
3,230
940
@Газзель!!!, ответы были, в том числе и в этой теме. Но дошкольнику всё равно не объяснить даже материал начальной школы, не поймёт.
Да, пишете "на ассемблере" или на любом другом языке, используете любой компилятор и линковщик, получаете hex и заливаете с помощью любого программатора или с помощью загрузчика Ардуино. Любой чел, кто хоть раз программировал, это знает с самого начала.
 

Газзель!!!

✩✩✩✩✩✩✩
22 Авг 2022
28
1
прошу еще раз разжевать, avrdude понимает загрузчик ардуино, и я могу прошить просто подключив в юсб нано, без написания отделього кода или указанияспециальных команд?

я на этрм сайте не нашел. Пожалуйста, дайте сылку. Я не могу создать пост чтобы поделитсья своими знаниями. Форум вроде называется вопросы, даже кнопка для "отправить вопрос". Можно мне хромоум лысому и без прописки ответить по делу?

вот что нашел https://microsin.net/programming/avr/starting-out-with-avrdude.html

При компилировании прошивки Hello-World-Arduino-ATmega328.hex было учтено, что светодиод подключен к порту PB5 (цифровой порт D13 Arduino).


#define LED PB5 //Для плат Arduino Uno и metaboard.


Подключите плату Arduino Nano через USB (при этом на микроконтроллер ATmega328 будет подано питание), и выполните команду:


avrdude -C"C:\Program Files\Arduino1.0.6\hardware\tools\avr\etc\avrdude.conf" -pm328p -carduino
-PCOM20 -b57600 -Uflash:w:c:\temp\HEX\Hello-World-Arduino-ATmega328.hex:i


я правильно понимаю, что этого достаточно?


ну да, и посоветуйте беспроблемный авердюд для ХР
 

poty

★★★★★★✩
19 Фев 2020
3,230
940
@Газзель!!!, а попробовать? Или нужно разжевать? Блин, посмотрите, наконец, как hex загружается в нано из IDE? Все команды дублируются в окно событий при включении соответствующей опции. Или так и будете ссылки требовать по теме, которая уже оскомину набила?
 

Газзель!!!

✩✩✩✩✩✩✩
22 Авг 2022
28
1
да, работает без проблем сходу, спасибо за подсказку.

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

далее читать только глупым. быстрая инструкция ассемблер на ардуино без программатора ( тоесть с уже имеющимся при покупке bootloader.)

инструкция и сам авердюд взяты здесь: https://microsin.net/programming/avr/starting-out-with-avrdude.html
внизу сылки есть пример для ардуины, нужно просто внимательно прочитать, обратить внимание на обе кавычки, номер порта и тп.

я использовал обычную китай ардуино nano 328P, avrdude-6.4 -mingw32, вместе с windowsXP, AVR Studio4.19 build730, arduino 1.6.13 + драйвер юсб CDM 2.08.24 WHQL Certified.

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

2. Если ардуина новая, то там уже зашита прога постоянного моргания светодида, но всеравно, установите лучше сразу ардуину, чтоб всегда назад зашить готовую библиотеку basic Blink и посмотреть на моргающий светодиод. Сама программа ардуино в процессе не участвует.
это нужно для проверки: если светодиод моргает-значит сейчас внутри залита прошивка blink. заодно и работоспособность платы проверите и COM Port. выдергивать или перевтыкать платку из юсб больше не требуется на всем пути.

3. устанавливаем AVR Studio. создаем програму из одной единственной инструкции NOP и сразу жмем build (F7). Нужно именно NOP, ровно три буквы на экране, больше совсем ничего. почему именно NOP? - потому что ошибка в прошивке или компиляции невозможна, и если чтото не получается, значит ошибка именно в установке программ или подключении платы.
( запоздалая поправка после испытаний. Одного NOP достаточно только если плата новая из магазина. Если плата бу или сами уже успели поиграться, то после выполнения NOP за 1/16000000 долю секунды, чип начинает жить своей жизнью, если вы лазили в первые 16 регистров, трогали SREG или I/O для EPROM. Reset не помагает. Связано это както исторически с запутаными видами регистров, чтото наподобии как было экстендет для 8086 himem и emm, и вникать туда новичку да и ваще пользы нет, просто для запоминания сначала ограничтись R16-R31, для поморгать этого хватит с избытком, а далее только учить наизусть. поэтому чтобы точно погасить диод прога выглядит так:

;начало проги
cli ; это я начитался страшилок про прерывания, скорее всего не нужно но пусть будет
clr R0 ; далее очищаем все регистры до 31, иногда этого хватает но не гарантировано, поэтому опять нехай будет
clr R1
clr R2
clr R3
clr R4
clr R5
clr R6
clr R7
clr R8
clr R9
clr R10
clr R11
clr R12
clr R13
clr R14
clr R15
clr R16
clr R17
clr R18
clr R19
clr R20
clr R21
clr R22
clr R23
clr R24
clr R25
clr R26
clr R27
clr R28
clr R29
clr R30
clr R31
nop ; это обязательно, чтоб прога не была пустая и была хоть чем нибудь заполнена
jmp 0x0000 ; это обязательно последней строкой, чтоб прога гонялась бесконечно а не 1 раз, аналог GOTO
; конец проги

Есть алтернативный вариант программы, если у вас именно 386Р:

;начало проги
sbi 0x04, 5 ; защелкиваем контакт светодиода на вход
; конец проги

но эта прога чето делает, в отличии от первого варианта выше, и черт его знает, че там может происходить. Кроме того, первый вариант судя по всему подойдет к любой атмеге, tiny и тп. Если что то очень древнее то выкинуть 16 регистров, или просто оставить только 2 последние строчки.


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

4. выходим из AVR Studio, находим blibli.hex и копируем его в папку в корне диска С:, я назвал например C:\BLIBLI\blibli.hex

5.распаковываем AVRDude в папку в корне диска. я назвал например, C:\Avrdude\

6. чтобы потом не набирать все в ручную, открываем текстовый редактор ворд, вордпад, а лучше блокнот и копируем туда из инструкции команду с ключами. поскольку у нас все папки в корне С:, то удаляем кавычки, выбираем свой ком порт, забиваем свои названия папок. получается следующее:

avrdude C:\Avrdude\avrdude.conf -pm328p -carduino -PCOM9 -b57600 -Uflash:w:c:\BLIBLI\blibli.hex:i

Внимание, в блокноте и тп оно должно быть в одну строку, без переносов и абзацев, иначе оно мышкой не с копируется правильно! проверяйте, чтобы текст нигде не слипся, не было русских символов, например с и с, кавычек, \ и тп, все только на английской клавиатуре! У меня COM Port номер 9, поэтому заменяете -PCOM9 на то как у вас.

копируем текст мышкой.

7.как в инструкции, нажимаем в виндовсе выполнить и там cmd . переходим в папку Avrdude ( если кто забыл DOS, то выйти из директории вверх CD.. войти в директорию CD Avrdude, показать список DIR). к счастью в виндовсе в досовском окошке работает мышка и копипаст. Вставляем строку из блокнота. Все, готово, контролер прошит новой прошивкой и светодиод на платке НЕ мигает, в досовсоком окне вылезет нечто ######################.
Если светодиод мигает дальше, значит не сработало, ищем ошибку, перепроверяем строку. если в будущем с новыми прошивками не шьется, значит дело в неправильно написанной прошивке
 
Изменено:

Газзель!!!

✩✩✩✩✩✩✩
22 Авг 2022
28
1
прошу еще разжевать.

скачал книгу Мортон Дж. AVR вводный курс.

вот что там не понятно, цитирую " Для входных сигналов порогом между состояниями логического 0 и логической 1 является половина напряжения питания (например, +2.5 В)."
открываю даташит 328р пункт 28.2 пишет Input low -0,5...+0,3Vcc high 0,6Vcc...Vcc+0,5V output low (для 5Vcc) 0,8V high 4,1V
чета половина в 2,5В у меня нигде не получается. Кто прав?

я наверное слепой но в упор не вижу инструкции для сложения регистра и константы. Только adiw для сдвоеного регистра. SUB есть, по идее и AD должен быть?
Ладно, можно обойтись, но вот не могу понять, просто сбросить и установить бит в R0...R31 можно както? без переходов, сравнений и математических извращений, не затрагивая остальные биты и тп? просто тупо изменить бит одной командой ? SBI CBI указано что только для I/O регистров. я наверное слепой, ткните плиз. Или это нужно туда сюда копировать регистр, чтоб в нем изменить бит? Попробовал в АВР Студии указать sbi R17, 5 ругается wrong number.
Везде пишут, что в R0..R31 работают _ВСЕ _ инструкции, в даташите написано The CBI and SBI instructions work with registers 0x00 to 0x1F only. Кто прав?

Если смотреть таблицу регистров, то пустой нулевой регистр reservd но не заштрихован серым. остальные reservd все заштрихованы серым. В чем разница?
Не понимаю, если прибавляю 0x20 к I/O регистрам я использую их просто для хранения информации в :
1 во всех 0x20 ...0xFF
2 во всех 0x20 ...0xFF кроме заштрихованных
3 во всех 0x00 ...0xFF кроме НЕзаштрихованных
4. только в любом 0x20 ... 0x5F


разжуйте смысл General purpose I/O register . Его вроде получается просто напрямую использовать по адресу без прибавления 0x20. Так можно? или он при этом где то че то включает выключает? хотел было использовать так

out 0x1E, R18
cbi 0x1E, 5
in R18, 0x1E

вроде работает, но не хватает для удобства еще парочки General purpose I/O register и както выглядит все это глупо. не может быть такого чтоб нельзя было напрямую просто момент бит. и после операции, в General purpose I/O register остается значение без изменений, пока к нему опять не обращусь? а если я к нему обращусь как 0x1E и как 0x3E, в нем будут одни и те же данные, или он задвоится?
 

Газзель!!!

✩✩✩✩✩✩✩
22 Авг 2022
28
1
только что заметил, что аврдюд пишет : Device signature = 0x1e950f (probably lgt8fx328p)

что это значит? на чипе написано атмел мега 328р
 

Газзель!!!

✩✩✩✩✩✩✩
22 Авг 2022
28
1
вроде инструкции и регистры совпадают, по крайней мере в общей части. В целом работает но есть какие странности со скоростью срабатывания авердюда и работоспособностью прошивки, пока опять не разобрался. в итоге дохлый штекер, непонятный чип и странности прошивки, три неизвестные переменные для учащегося новичка.

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

JackOfShadows

✩✩✩✩✩✩✩
19 Мар 2022
27
4

Газзель!!!

✩✩✩✩✩✩✩
22 Авг 2022
28
1
не знаю, эта сылка както связана с микрочипом а он нас забанил. я уже поискал сам, поэтому вынужден теперь спрашивать. судя по яндексу в Тоолс должна быть гдето галочка Line numbers но я в упор ее не вижу. собственно япросто ваще все кнопки потыкал
 

Газзель!!!

✩✩✩✩✩✩✩
22 Авг 2022
28
1
прошло много времени, но чуть дополню. Речь имено об бутлодер ардуины+ avrstudio+averdude.

нумерацию строк приходится использовать в Notepad++ вместе с addon " CustomizeLineNumbers plugin "
https://community.notepad-plus-plus.org/topic/20871/hexadecimal-line-numbers/2

изучая на практике я столкнулся с тем, что прошив новую плату чем либо своим, тем же nop, потом потом вернуть прошить обратно скеч ардуины блинк, и опять записать свое, хотябы тот же nop, то оно продолжаем моргать. чудо? на дальнейших шагах еще более чудесно оказалось то, что сразу после прошивки прога работала, но если нажать кнопку reset , то перестаала. в итоге моя прога на ассембле глючила, хотя и упорядоченно. вот что мне подсказал Starichok51 на РадиоКот
"для бутлодера не существует таблицы векторов в начале флеши, так как в "пустой" флеши там вообще не прописаны адреса векторов.
а также бутлодер может перенести таблицу векторов в совсем другое место, в такое место, куда "не достанет" записываемая прошивка."
в итоге прошивка для теста должна выглядить не из одного nop а так.

nop ; сюда приходят прерывания
nop ; которые я ващето не использую
nop ; однака ж вот...
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
cli ; запрет всех прерываний, то же не знаю зачем
clr R16 ; вот теперь после nop эти clr не стопорят диод
clr R17 ; в чем разница все равно не понятно
clr R18
clr R19
clr R20
clr R21
clr R22
clr R23
clr R24
clr R25
clr R26
clr R27
clr R28
clr R29
clr R30
clr R31
nop ; кажись это строка 44 dec

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

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

Код:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop

cli ;     то же не знаю зачем
clr R16 ; вот теперь после nop эти clr не стопорят диод
clr R17 ; в чем разница все равно не понятно
clr R18
clr R19
clr R20
clr R21
clr R22
clr R23
clr R24
clr R25
clr R26
clr R27
clr R28
clr R29
clr R30
clr R31

nop ; кажись это строка 44 децементал.


dec R16 ; здесь b7 будет 127раз 1 + 128й раз 1.
inc R17 ; здесь b7 будет 127раз 0 + 128й раз 1.

mov R31, R16 ; здесь  в R31 и 0x1E будем
asr R31
asr R31
asr R31
asr R31
asr R31
asr R31
asr R31
out 0x1E, R31 ; переворачивать b7 в b0.
cbi 0x1E, 7
cbi 0x1E, 6
cbi 0x1E, 5
cbi 0x1E, 4
cbi 0x1E, 3
cbi 0x1E, 2
cbi 0x1E, 1
in R31, 0x1E ;  перевернули.

add R18, R31 ;здесь b7 сложится из 128раз
;             перевернутых единиц R16 и перевернутых нулей R17
;             а потом , после использования, вычтется из
;             перевернутых нулей R16 и перевернутых единиц R17.

mov R31, R18
asr R31
asr R31
asr R31
asr R31
asr R31
asr R31
asr R31
out 0x1E, R31
cbi 0x1E, 7
cbi 0x1E, 6
cbi 0x1E, 5
cbi 0x1E, 4
cbi 0x1E, 3
cbi 0x1E, 2
cbi 0x1E, 1
in R31, 0x1E ;

add R21, R31 ; используем моргнувшие в R18 единички, складываем их.

mov R31, R17 ; возвращаемся и доделываем,  не даем R18 мгновенно заполниться.
asr R31
asr R31
asr R31
asr R31
asr R31
asr R31
asr R31
out 0x1E, R31
cbi 0x1E, 7
cbi 0x1E, 6
cbi 0x1E, 5
cbi 0x1E, 4
cbi 0x1E, 3
cbi 0x1E, 2
cbi 0x1E, 1
in R31, 0x1E

sub R18, R31 ; , доделали, после пользования моргнувшей
;              в R18 единички 127 раз держим b7 в ноль.



mov R31, R21
asr R31
asr R31 ; b7 зажигает pb5.


sbi 0x04, 5
out 0x05, R31 ; по задумке должно 128 гореть и гаснуть.
jmp 44 ; появился цикл, которго по начальной задумке нужно было избежат, но немного изменил цель

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

bort707

★★★★★★✩
21 Сен 2020
3,061
912
если соберетесь изучать ассемблер, который в разы, нет в сотню раз проще скечей
То- то я смотрю, что прошло полгода - а вы все обсуждаете, как блинк в плату загрузить.
Изучали бы скетчи - у вас бы на второй день все работало.

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

Газзель!!!

✩✩✩✩✩✩✩
22 Авг 2022
28
1
я не заходил на сайт полгода. щас просто заодно обновил тему. Вы не поняли,я не придумывал, у меня нет ни операторов, ни таблиц прерываний, ни загрузчиков. я предупредил, что при использовании ассемблера с бутлодером ардуины, то возникают глюки, которые устраняются ни просто при запрете прерываний, а если все строки прерываний забить nop ами. это нигде не обсуждается, я дал примечание. ну а скетчи че изучать, загрузил блинк и готово. это примерно как вместо чтоб научится читать, сразу смотреть кино