LINUX.ORG.RU
ФорумTalks

От ардуины к ассемблеру

 , , ,


1

1

Хочу разобраться с микроконтролерами. Не прям на каком-то серьёзном уровне, но чтобы писать любой код, который мне понадобится и знать, где что посмотреть. Сейчас про них особо ничего не знаю кроме общей эрудиции. Знаю C, сто лет назад знал 8086 язык ассемблера. Конечная цель - писать на ассемблере под STM32 (привет, ув. Assembler). Т.е. не факт, что я буду именно писать на ассемблере конечный продукт, в целом мне хотелось бы писать на Rust, но для этого считаю, что надо уметь писать на ассемблере в первую очередь, чтобы быть способным разобраться. Попутно научиться читать датащиты.

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

В чём смысл темы - хочу понять примерный путь освоения всего этого.

Пока я зашёл в местный магазинчик и купил там набор ардуины с кучей датчиков и на всякий случай Raspberri Pi. Планирую поставить Arduino IDE и потыкать привет-миры по обучалкам, чтобы хотя бы с чего-то начать. В целом хотелось бы побыстрей уйти на обычный консольный проект с Makefile, gcc, vim, в таком наборе мне комфортней работать, т.е. после этого буду пытаться разобраться, как перейти с Arduino IDE на консоль. И после этого хочу постараться сделать примерно то же, что уважаемый товарищ Assembler делает на протяжении последних месяцев, то бишь пытаться писать минимальные примеры на ассемблере, раскуривая спецификации на тот китайский заменитель ардуины, который мне продали. Пока это всё будет происходить, мне может быть доставят плату разработчика STM, на которую я в итоге планирую перейти и я повторю тот же путь уже с STM, предположительно пройдя его быстрей за счёт того, что общие концепции, наверное, будут схожи.

Вопрос по STM: есть ли существенная разница между разными линейками? Есть STM32L, которая вроде как потребляет мало, есть STM32F, которая вроде как более мощная. В чём суть отличий между всеми этими линейками? Просто небольшие отличия в наборе поддерживаемых инструкций? Т.е. если я разберусь с STM32L, остальное понять будет относительно несложно?

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

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

★★★★★

Последнее исправление: Legioner (всего исправлений: 1)

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

Да, я в курсе, тут в теме я всё смешал в кучу, сорри, не хотелось захламлять форум кучей вопросов.

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

А Arduino вообще не ARM (по крайней мере были, вроде есть какие-то бастарды от Arduino на других архитектурах, но подавляющее большинство осталось).

Касательно схожести концепций — ядра AVR вполне реально и достаточно просто запрограммировать полностью самостоятельно, на уровне регистров и/или ассемблера (для этого, разумеется, придётся выкинуть саму Arduino, ибо это суть песочница для дошкольников, основная задача которой это дать тебе подрыгать ногами и ни в коем случае не пускать тебя под капот). Они все похожи друг на друга, устроены монолитно и достаточно аскетично. А STM32 (Cortex-M и какая-то периферия) устроены существенно сложнее. Их вручную никто не программирует, большинство использует всякие библиотеки-прослойки, HAL и прочее.

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

Я к этому отношусь так, примерно аналогия с джавой: даже если я использую высокоуровневый spring boot, который работает поверх tomcat, который работает поверх асинхронных жава сокетов, которые работают поверх юниксового select-а, я считаю себя должным понимать и мочь написать программу на любом уровне этого слоёного пирожка, хоть на C с select-ом, хоть на Java с асинхронными сокетами, хоть на томкате с сервлетами. Даже если я по факту этого делать не буду и буду писать на spring mvc, все эти знания мне помогают понимать, как всё работает сверху донизу, предсказывать возможные проблемы и относительно быстро разбираться с возникающими проблемами, а не сидеть с открытым ртом и чесать в затылке, почему эта магия перестала делать пуфф. Вот примерно так же с STM хочется - несмотря на то, что я может и буду писать на C с прослойками, мне нужно понимать, что эти прослойки делают на уровне отдельных регистров и адресов памяти, чтобы для меня тут не было магии, а был просто удобный и написанный функционал, который я использую, но в принципе могу и не использовать. Поэтому и заморачиваюсь всем этим.

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

Я ни в коем случае не пытаюсь с тобой спорить и целиком согласен с таким подходом. Просто предупреждаю.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)

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

Ардуино - баловство для детей. Оно может что-то общее рассказать про МК, но ты быстро из него вырастешь.

apt_install_lrzsz ★★★
()

Предлагаю такой вариант (для авр):

  1. собрать железки. из твоего списка тебе не хватает только программатора. Доступней всего купить USB ISP или AVRISP. Чтобы запрогать твою первую платку.
  2. «собрать» тулчейн для avr (gcc+binutils+libc+gdb+avrdude). ну или качнуть
  3. Написать простейшую прогу под твой МК, которая будет моргать. Написать под нее Makefile. Скомпилять без ошибок.
  4. Соединить плату с программатором и компом и прошить ее. Убедится что то что ты прошил работает как ты задумывал (например моргает светодиод).

Как только ты освоишь этот простой путь, дальше тебя уже ничто не остановит. Но этот путь придется пройти и именно в таком порядке.

ЗЫ. Заметь, тут нет ни ардуины ни ассемблера.

yax123 ★★★★★
()
Последнее исправление: yax123 (всего исправлений: 2)

STM32 программируют на Си, изучать ассемблер, и тем более, писать на нём программы, излишне, это же не 8051.

x-signal ★★
()
Ответ на: комментарий от intelfx

для этого, разумеется, придётся выкинуть саму Arduino

Зачем? Никто не запрещает писать на ассемблере или C, вместо плюсов (которые они обозвали Wire или как-то так) в их недо-IDE.

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

Ясное дело, ардуина накладывает ограничения в плане использования пинов микроконтроллера, но базовые вещи (таймеры, АЦП, I2C и SPI) использовать ничего не мешает.

Meyer ★★★★★
()
Последнее исправление: Meyer (всего исправлений: 1)

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

При условии, что ты уже хорошо умеешь писать на ассемблере. В противном случае получишь путаницу.

Серьезно говорю, лучше начни с си.

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

Да, этого пока хватит.

И после этого хочу постараться сделать примерно то же, что уважаемый товарищ Assembler делает на протяжении последних месяцев

Этот уважаемы товарищ – обычный тролль, который сам вообще ничего ещё не сделал. И, по-ходу, не планирует.

Вопрос по STM: есть ли существенная разница между разными линейками?

Для начинающего прям существенной разницы нет. Однако, серия f1xx уже устарела и немного отличается (тут @Eddy_Em лучше бы рассказал).

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

Верно. Она дополнительно только позволяет иметь доступ к шинам, к которым на десктопе обычно доступа нет (I2C, SPI, GPIO, камеры/дисплеи).

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

Не начинай с ассемблера

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

Meyer ★★★★★
()
Ответ на: комментарий от x-signal

Плюсую. ТС, если хочешь asm и знаком с 8086, то можешь попробовать 8051 (если он доступен в виде отладочных плат).

Для новичка в STM от asm будет больше проблем, чем пользы. Вот когда уже более-менее освоишь, как это всё программируется и работает, переходи в asm, если уж прям так хочется.

apt_install_lrzsz ★★★
()

отвечает господин нищук

Вопрос по STM: есть ли существенная разница между разными линейками? Есть STM32L, которая вроде как потребляет мало, есть STM32F, которая вроде как более мощная. В чём суть отличий между всеми этими линейками? Просто небольшие отличия в наборе поддерживаемых инструкций? Т.е. если я разберусь с STM32L, остальное понять будет относительно несложно?

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

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

При условии, что ты уже хорошо умеешь писать на ассемблере. В противном случае получишь путаницу.

Серьезно говорю, лучше начни с си.

Ну в моём плане C идёт перед ассемблером, безусловно начну с C и, скорей всего, им и закончу (а может Rust-ом, но тут пока не уверен).

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

Вот этого плана и придерживайся. Ассемблер никуда не денется.

А на rust когда-то был проект по поддержке stm32, но он то ли умер, то ли был приостановлен (а потом всё равно умер) несколько лет назад. Но может ты что-то новой найдёшь (а то и сам напишешь).

apt_install_lrzsz ★★★
()
Ответ на: отвечает господин нищук от n_play

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

Постараюсь заказать оригиналы. Вопрос денег особо не стоит, каждую тысячу экономить не собираюсь, устройства тысячами клепать тоже пока не собираюсь. Если быть конкретней, то планирую заказать такую плату: NUCLEO-L073RZ STM32L073RZ Arduino Cortex-M0. Есть у меня какой-то нереализованный гештальт - писать максимально энергосберегающий код и вроде как для этого максимально подходит серия L. Хотя для практических целей, скорей всего, буду использовать что-то более мощное.

Legioner ★★★★★
() автор топика

Можешь глянуть easyelectronics.ru, там достаточно много статей и о stm и о программирование под микроконтроллеры

snake266 ★★
()

Есть ли какие-то альтернативные линуксу ОС для Raspberri Pi

RISC OS Open ©.

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

Если быть конкретней, то планирую заказать такую плату: NUCLEO-L073RZ STM32L073RZ Arduino Cortex-M0.

а ведь мог бы и фуфел с алика за 150р рупий заказать. (blue pill)

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

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

Такая штука - stm32f429i-disc. Отладочная плата discovery. Это обычный микроконтроллер stm32, без всяких ОС как на малине. На плате есть графический дисплей с тачскрином. Развернуться с ней можно ого-го.

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

На них микроконтроллер оригинальный все равно.

Нет.

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

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

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

Ну вот в этом комплекте с ардуиной есть и макетная плата и дисплейчик и кнопочки и ещё кучка всяких датчиков-актуаторов. Их я и планирую присобачить к STM. Для того в том числе и покупал эту ардуину.

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

Главное, убедись, что правильно подключаешь. И что по напряжениям эта техника подходит к твоей отладке. +3,3/+5 В

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

последний раз из китая через КЗ мне посылка за 2 недели в рашку дошла. прошлый раз чуть дольше, почти 4.

но тебе наверно надо было доплатить полтушку за ali saver/standard.

а у меня не было выбора, те категории товара только наземно везли. (ну и с «беслптаной доставкой»)

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

речь лет 4-5 назад? ну может быть да, тогда оригинал впихнули. а за последние пару лет, сомнительно.

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

В том-то и дело, что до КЗ оно доходит за несколько дней, а потом надолго исчезает в астрале таможни. Потом появляется и за несколько дней доходит до конечного пункта. Не знаю точно, кого винить, но паттерн такой уже видел несколько раз. Наверное когда в Россию везут, таможне пофиг, пропускают не глядя, а в самой России порядку больше.

Legioner ★★★★★
() автор топика

Планирую поставить Arduino IDE и потыкать привет-миры по обучалкам, чтобы хотя бы с чего-то начать. В целом хотелось бы побыстрей уйти на обычный консольный проект с Makefile, gcc, vim, в таком наборе мне комфортней работать, т.е. после этого буду пытаться разобраться, как перейти с Arduino IDE на консоль.

Продолжаю всем страдающим советовать https://github.com/sudar/Arduino-Makefile (в нормальных ос можно сделать sudo apt install arduino-mk)

ya-betmen ★★★★★
()

Но вроде для микропроцессоров этого должно хватить.

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

cvs-255 ★★★★★
()
Ответ на: комментарий от Meyer

Только смысла в этом нет особо, если ты не какую-нибудь attiny13a программируешь

cvs-255 ★★★★★
()
Ответ на: комментарий от Legioner

Последний раз посылка с али шла до меня около двух месяцев, из которых 6 недель она зависла в астрале.

Сейчас снова 2-3 недели посылки с али идут в Казахстан, всё норм стало

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

MSP430 launchpad по-моему сейчас снято с производства и продаются только старые наборы со складов. TI почему-то раздумали продвигать свои МК в массы.

DarthVadimius ★★★★
()

Недавно другому товарищу с аналогичным вопросом советовал книгу Beginning STM32 Development https://www.oreilly.com/library/view/beginning-stm32-developing/9781484236246/ Там всё описывается пошагово для STM32F103+libopencm3+GCC Ну и сейчас нужно учитывать, что STM32 поштучно нет в розничной продаже. На них срок поставки только начало 2022 года. Но отладочные платы ещё можно купить. Так что для самоделок стоит присмотреться к AVR, так как они есть в продаже. Может быть их будет достаточно.

DarthVadimius ★★★★
()
Последнее исправление: DarthVadimius (всего исправлений: 1)
Ответ на: комментарий от James_Holden

Такая штука - stm32f429i-disc

Это была моя первая отладка для STM32. То что я решил с неё начать было ошибкой. Я её покрутил, не придумал куда применить, решил, что MSP430 хватит для всех задач и в результате забросил изучение STM32 на несколько лет. STM32F429 discovery потом я в результате подарил другу, когда я уехал из России.

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

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

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

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

nerfur ★★★
()

Сразу напишу свою первую ошибку, как мне кажется. Нет особого смысла покупать этот набор. Самой ардуины хватит для изучения за глаза. Померять напряжения между пинами можно мультиметром. Замкнуть пины можно проводками. Плюс встроенная лампочка, которой можно поморгать, плюс ввод/вывод через порт. Т.е. единственное, что нужно, это несколько проводков с заточенными концами (вот их можно купить), чтобы втыкать в дырочки, а то щупы мультиметра туда не лезут. А все эти кучи светодиодов это только лишняя возня. В общем надо покупать саму ардуину, несколько проводков, а потом уже, если захочется собрать какое-то конкретное устройство, можно покупать макетную плату и нужные компоненты, ну или сразу паяльную плату.

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

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

Основная ошибка тут - выбор абдурины вместо микроконтроллера. Это игрушка для детей до 12 лет. Для тебя, учитывая возраст и опыт программиста, это как-то не то.

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

$4 на силиконовые норм шупы

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

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

Что значит вместо? На ардуине стоит микропроцессор Atmega 328P. На C для него я уже писать научился. Чем он тебе не нравится?

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 1)

писать на ассемблере под STM32

Зачем?
Даже под Ti на Си пишут.

Shadow ★★★★★
()

Ассемблер ARM прикольный. RISC-V и MIPS тоже. Одна и та же команда может делать кучу разной фигни, а команды засунуть произвольную константу в регистр вообще нету. А MIPS32 вообще всегда по 2 команды сразу выполняет. Веселуха, в общем. И всё это весьма далеко от унылого x86. Так что начинать с ассемблера - плохая идея. Лучше посмотреть, для начала, как сишный компилятор за тебя придумывает как засунуть в r3 константу 0x12345678 при отсутствии такой команды, а уж потом решать, надо тебе в ассемблер лезть или нет. В большинстве случаев он тебе вообще не понадобится.

Stanson ★★★★★
()

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

Знаю один хороший учебник по основам электричества и схемотехники: https://www.allaboutcircuits.com/textbook

Можно «пролистать» на досуге и освежить память

Вопрос по STM: есть ли существенная разница между разными линейками? Есть STM32L, которая вроде как потребляет мало, есть STM32F, которая вроде как более мощная

Зависит и от самих моделей, тот же F0 довольно слабенький. Для старта имхо лучше брать F1/F4 - банально из-за того, что под них в инете намного больше туториалов/примеров сваяно

x86-
()
Ответ на: комментарий от Anonymous

Почему я не могу использовать маркетинговый термин?

Если stm32 сейчас дешевле и намного лучше, то получается что AVR устаревшая платформа.

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