Комментарии 81
По-моему, более «традиционный» подход к такому (который исповедуют всякие микропитоны и эспруино) — это интерпретатор на самом проце, с написанием кода в терминале. Не берусь судить, какой подход проще или лучше.
Потому как предназначения разные. Виртуальные машины / интерпретаторы на МК, могут исполнять скрипты автономно и вполне могут использоваться в продакшене. Но там мы упираемся в ограничение ресурсов МК, необходимость портирования вирутальной машины / интерпретатора, а так же еще написание библиотек переферии.
В моем подходе программы/скрипты не могут исполняться автономно, но нам доступны все ресурсы нашего хостового ПК, все виды библиотек и все виды языков программирования. При этом при использовании С/С++ можно использовать стандартные библиотеки от производителя для работы с переферией.
Я лично подустал от невозможности использовать динамическую память, от медленных компиляторов, от кривой поддержки хотя бы С++11, от безумных аппаратных косяков в процах и ошибок монтажа…
Все мы страдаем от несовершенства мира в своем углу.
невозможности использовать динамическую память
Запрет на предприятии? Если так, то да, больно. Если нет, то при использовании FreeRTOS все более чем шикарно. Работа с динамической памятью (при достаточном выделении ресурсов под ее дефрагментацию и прочее) очень удобна.
кривой поддержки хотя бы С++11
GCC адекватно может в C++14 (около года пишу так).
от безумных аппаратных косяков в процах
В самих ядрах косяков либо нет совсем, либо их не много. А вот периферия… Да.
ошибок монтажа…
С опытом такие вещи достаточно быстро раскрываются. Особенно если монтаж осуществлял не ты сам.
Лично мне нравится под МК программировать. Как только ты доходишь до понимания того, что твоего кода 5-10 кб, а остальное библиотеки и ты закидываешь их в отдельное место и больше почти не шьешь, то прошивка занимает не более 2-3 секунд. Очень удобно. А остальные 200 кб BSP лежат себе тихонько в конце flash и все. Как-нибудь напишу статью на эту тему. Как организовать это правильно. Есть подводные камни.
За статью спасибо. Приятно было почитать. Однако именно так я врят ли буду вопрос. Все же я когда-то давно написал универсальное средство вывода и отладки (да-да, на базе UART-а. Вернее USB-UART-а, но ни суть. Надо кстати задокументировать будет и описать...). Его мне хватает с головой.
И что, поддержка этого ядра исчезла из транка gcc?
Или просто их Code Composer старый? Не велика беда, мне кажется…
В ядрах третьей версии поддержки нужного чипа я тогда не нашёл, а делать порт самостоятельно было не в моих силах. Со сборкой более новых версий gcc для кросс-компилирования под эту платформу тоже были какие-то проблемы, сейчас уже не вспомню, какие.
Запрет на предприятии? Если так, то да, больно. Если нет, то при использовании FreeRTOS все более чем шикарно. Работа с динамической памятью (при достаточном выделении ресурсов под ее дефрагментацию и прочее) очень удобна.
Ну, прямого запрета нет, только рекомендации MISRA :) Но с фриртосом действительно удобно, хотя бы heap_1 можно себе позволить и стеки руками не создавать.
В самих ядрах косяков либо нет совсем, либо их не много. А вот периферия… Да.
Кхе-кхе… Миландр 1986ВЕ1… Кхе-кхе…
Но да, ошибки в периферии существенно чаще попадаются.
С опытом такие вещи достаточно быстро раскрываются. Особенно если монтаж осуществлял не ты сам.
Ну, понятное дело, что раскрываются, просто каждый раз тратится уйма времени на поиски этих ошибок. А переделать печатную плату — это дело нескольких недель; пока оплата пройдет, пока ее изготовят, пока доставят…
GCC адекватно может в C++14 (около года пишу так).
Keil, к сожалению, только частично умеет в С++11, причем стандартная библиотека осталась от С++98. А их новый компилятор armclang пока сыроват.
Страдаю с Anal
А еще можно делать кровавый патчинг через терминал, тоже очень мило ))
Давеча попробовал mecrisp.sourceforge.net и остался доволен результатами. Как раз надо было сопрячь железку со странным протоколом с МК. Получилось хорошо и быстро.
Прототип сделал. Теперь думаю, что может его не перекладывать на Си, а продолжать писать на форте.
В этой, конкретной, реализации очень удобно разрабатывать тем, что можно слова создавать в ОЗУ, а потом пересоздавать их во FLASH. А если есть возможность подключить SD, то набросав редактор можно полностью вести процесс разработки на МК.
hightechdoc.net/mecrisp-stellaris/_build/html/index.html
Ещё можно этого автора почитать и его директорию проекта с Форт кодом на Github
jeelabs.org/2016/02/dive-into-forth
P.S. Экспериментировал, в частности, с www.mpeforth.com/xc7.htm
Когда-то давно коллега в «толстый» STM32 (тогда «толстым» был STM32F4) запихивал Lua.
А почему просто не воспользоваться возможностями которые идут из коробки?
С кросс-компилятором идет gdb, openocd умеет работать как gdb сервер,
подключаемся gdb к openocd и вот у нас repl, gdb умеет и скрипты запускать,
и интерпретироваться подмножество языка С, типа *(int *)0x4 = 5;
,
и можно даже вызывать отдельные функции из загруженного кода в память МК.
Ну и скрипты на python он поддерживает.
У GDB нет REPL, это скорее консоль для исполнения уже встроенных команд и откомпилированных команд программы. Может интерпретровать простые констуркции С но и только.
Проблематично вызывать ф-ции из программы, а допустим иницилизировать структуры и классы и передавать их в аргументы это будет жуткая боль.
Скрипты и расширения на python отчасти спасают, но всеравно читаемость и масштабируемость будет хромать.
Во второй части будет наглядный пример, как все довольно просто работать будет. В этой статье мы всего лишь готовим инструмент для этого.
то что у микросхемы должен быть обязательно JTAG интерфейс — на той тестируемой плате это не прокатывало, так как там была единственная stm32 и у нее был выведен SWD только
стоимость такого решения — было бы интересно узнать у людей кто в теме
Ну и BSDL решает только вопрос тестирования соединений микросхем ( на сколько я понял )
Допустим более сложные тесты уже не провернуть — к примеру проверить работу трансформатора на определенной частоте, корректность работы микросхем (на случай их брака)
Под каждую задачу свой инструмент. И что-то громоздкое городить на бедном мк, не всегда рационально.
P.s. не холивара ради.
Может конечно будь у меня OpenOCD я бы пошел по пути близкому к вашему, но так через test driven development и автоматизацию деплоя удалось упростить большую часть экспериментов с освоением периферии чипа, бонусом получив дополнительное покрытие тестами.
Пока у меня не до конца закрыт вопрос с аналоговым трактом, но его для успешного завершения проекта всё равно решать, лень мне руками несколько десятков модулей тестировать, поэтому, видимо, стенд обрастёт парочкой программируемых источников напряжения для генерации тестовых сигналов (хотя может хватит фильтрованного ШИМа с малины опять же).
Ну вы и маньяк. Я всегда стараюсь код разбить на разные с-файлы, например, каждой периферии свои. Так удобнее писать. Написал один модуль, потестил в железе, написал другой и т.д. Но для меня это всего-лишь хобби.
Как же меня достали эти микроконтроллеры. Я больше так жить не хочу. Я устал. Это супергеморой. Я устал от того количества проводов, и места, которое занимает устройство на столе. От того что иногда приходится подготавливаться, припаиваться, чтобы посмотреть события на шине, чтобы отладить периферию. Инструменты отладки и программирования есть разные, нужно разбираться в различных программаторах, методах, способах, и чего-там нового напридумывали разработчики этого софта. Самый ужасное это программирование периферии. Помимо хороших знаний схемотехники, конкретной схемы, особенностей, нужно вкуривать дотащит. Если у вас 5-10 различных периферийных устройств на разных шинах, в среднем вам нужно досконально знать и понимать как это устройство лучше использовать. Средний даташит до 100 страниц (ADE7878A), потом нужно написать под него LL драйвер, если у вас RTOS, на одной шине, реализовать атомарный доступ, драйвер ос по сути. Читать Datasheet, App note, Reference Manuals, Programming Manuals и понимать как лучше реализовывать те или иные фишки. И это только для конкретного проца или серии. Хороший проект, и вы прочитаете > 1000 страниц.
Если вы более-менее сложную электронику разрабатываете, вам нужна техника, которую нужно переодически обновлять. За этот год только купил: анализатор спектра, осциллограф, лаб БП. Есть хороший мультиметер, анализатор логический. А мне еще генератор сигналов векторный нужен. Периодически RF занимаюсь. До кучи вы должны быть электронщиком-схемотехником.
Прошивки могут быть достаточно большими, например текущий проект: 20к строк бутлоадер + 80к строк основная. Это без либ конечно. Недавно ступил и не поставил скобочки в условии у функции, как итог, прошивка неожиданно падала, а компилятор молчал. Или решил обновить freertos на свежий, поставил скомпилировал и устройство стало падать раз в день. От чего? Как найти? Вернул в зад. Отладка сложная, невозможна без таких подходов, как у автора например. В свое время создал для себя UART логгер на SD, тк устройство не для работы на столе предназначалась.
Единственный критерий исправной прошивки — работа устройства без всяких ватчдогов в течении недели/месяца. Это значит что код должен быть качественным.
Софт: Нормальный софт платный, я пользуюсь Visual Studio + VisualGDB + ReSharper. Две последних позиции более 10к в год. Не понимаю людей как можно пользоваться Keil, IAR, CooCox, Eclipse и тд. Пользовался всем, ужасный софт.
Документация: Все нужно документировать, иначе никто кроме тебя не разберет, особенно те места, где пересекаются границы программистов.
Иногда требуется софт на ПК для настройки, или сам пишешь если нет документации или программиста. Лучше делать его кроссплатформенный.
Зарплата: разРаб на stm32 — 100к в СПБ, ну и чуть больше в МСК, а в регионах… Знать нужно ВООООО, опыта — ВООООО лет от 5-ти.
Для меня большое счастье, когда нужно писать например на Go или Java. А SQL — это кайф. А mongoDB — еще больший кайф. А знаешь Java можно сказать что знаешь Android, несмотря на то что нужно в тренде быть, знать что нового в ОС напридумывали и как это правильно в коде реализовать.
Все, кто ко мне приходят с целью узнать, как быть разрабом МК, отговариваю, показываю этот супергеморой, показываю ЗП на HH, говорю что лучше быть Android программистом. Go, Java, Kotlin.
Один мои приятель, с появлением второй дочери, в регионе, денег перестало хватать, бросил МК, и ушел в Go. Можно быстро переучиться с C/C++. Спустя год зарабатывает хорошие деньги, и гораздо счастлив.
Другие мои знакомые, кто хоть раз писали прошивки, сразу поняв что это геморой, ушли в системное C++/C# и БД.
Не занимайтесь этими микроконтроллерами, не тратьте свое драгоценное время, они его отбирают, отбирают эмоции, которые вы могли бы потратить на родных и близких и задолжали, будьте программистом и хорошо зарабатывайте. Вы не будете писать такие эпосы, а в вашей жизни будет время больших чудес, а не штудированная даташитов.
Но с опытом, считаю железка это проблемы — ее нужно произвести, ее нужно продать. Иногда нужны компоненты, которые нужно еще и растаможить.
Софт легко поправить и выслать новую версию, с железом так не получится, будешь рекламации собирать от заказчиков, и ответственность выше, потому что железка должна работать надежно.
Полное слияние железа и софта для него.
Ну да, это должно нравиться, иначе боль, тоска и в лучшем случае уход в чистые программисты. С зарплатами увы, есть такая проблема, которая усугубляется еще и тем, что работа начинает «держать». Уходить с нее, собственно, некуда, только на другую такую же.
По остальным языкам, впрочем, тоже. В свое время мне ветка по верилогу на forum.ixbt.com помогла больше, чем все имеющиеся на тот момент книги.
«разработка встраиваемых систем — это очень интересно, но не для всех»
Подписываюсь под каждым словом.
И под каждым словом автора комментария в начале ветки (кроме SQL и Java, не приходилось разрабатывать на них).
Уже несчётное число раз думал уйти нафиг из embedded. Но кайф от разработки железа, пайки, отладки удерживает. Плюс ЗП вроде вменяемая.
Надеюсь, что всё же к 30 годам гормоны улягутся и я таки уйду в чистого программиста, ибо ситуация с соотношением ЗП\навыки в эмбеде и правда удручает.
А с кайфом по разработке железа, нужно понять какого он типа — если это доминантность (делаешь то что другие не могут или что-то уникальное что никто другой не делал), я всегда вспоминаю профессоров в институте, некоторые из них академические ветки придумали, но при этом ходят в протертых штанах, получают копейки, и за это держаться, когда зав.каф. уже давно используют по полной индексы хирша, гранты, конференции и тд в том числе для прибыли.
Наверное, в определенное время они не готовы меняться, что против логики жизни, и остаются делать то, что редко кому нужно.
Это не значит что нужно талант на деньги менять, это значит что свое реальное время жизни надо менять на реальные ресурсы.
Цель/смысл жизни это штука такая… У всех разная.
А все железо, они на хобби оставили, коптеры собирают, ну и что там AlexGyver делает на youtube. Просто не нужно бояться перемен.
Просто вот для Вас, если я правильно понимаю, «эмбеддед»===«программированию контроллеров». Написание программ для них, не больше и не меньше. Работа с собственно самой железкой скорее неприятное дополнение, обязанность, нежели чем сколь-нибудь интересный процесс. Ещё и деньги, фиктически, отнимает. В таком случае на этом «эмбеддед» сидеть нет никакого смысла, это верно.
Embedded я скорее называю разработка устройства, с процом и ОЗУ, где есть ОС, более менее полноценная типа Linux. Это сложная схема и плата, uboot, это настройка ядра, buildroot, это кросс-компиляция, ну и дальше, какой-либо твой софт.
Все что типа at91sam, stm32, nxp и тд. это микроконтроллеры, там интересные схемотехнические решение, и крайне сложный софт. Это иногда разработка DC/DC (тут недавно статья была от Nordic), иногда и трансформатор помотать руками приходится. Это про то как и чем bulk от boost отличаются, и что такое Sepic. А прошивка — вдохнуть жизнь в плату.
Я просто хочу сказать, что на берегу, где есть backend/frontend есть жизнь, она более интересная, более нужная людям и как результат более высокооплачиваемая. А драгоценное время жизни, вы можете потратить на родных и близки, на то, что действительно важно!
ходят в протертых штанах
Посмотрел на свои ботинки, в которых вместо замка — пластиковые стяжки для проводов…
Чёрт, пора идти за новыми. Мне просто лень на другой конец города ехать.
А насчёт разработки железа — в данный момент времени я просто понимаю, что не смогу променять то, чем мне нравится заниматься, на то, от чего меня спать тянет, пусть даже за вдвое большую ЗП.
Очень надеюсь, что через несколько лет я всё же смогу найти направление в IT вне эмбеда, за которое смогу зацепиться и в которое смогу развиваться.
Я сейчас думаю что здорово быть, красивым (следить за собой, одеваться стильно и в спортзал регулярно ходить).
Вам наверное по советую сделать большой и сложный проект embedded, значимый для вашей психики. Завершить что-то. Тогда вам захочется чего-то нового.
В политике самый высокий курс обмена времени на блага, в финансах, но никак не в программировании.
А самое-самое удовольствие, когда в проекте есть место и для
легкого безумияПЛИС, программу/не программу для которой тоже пишешь ты.
Это нужно только в военных НИИ для разработки радаров.
Меня перевели в новый отдел, нас стало 4 человека: схемотехник и три программиста. Знаете сколько было руководителей? 3 человека. На них весели еще обязанности, но главной конечно было драть с нас 3 шкуры. Нужно было делать то что нужно, а не то что ты хочешь, и не всегда этот проект или железка интересна. Конечно, нужно уметь работать над проектом, в независимости от того нравится или не нравится железка, но порой, когда запросов много ты просто превращается в некий обработчик чужих хотелок. А для работы того или иного устройства нужно вложить душу. Я понял, что в современном мире, имея убеждения, которые позволяют кайфовать от того что например железка заморгала как надо, более шустрые ребята будут попросту использовать вас, ваше время, мозги, меняя на ЗП в 65к (3 года назад была такая зп у меня). Таким поведением и взглядами вы заранее обрекаете себя на использование вас другими бабуинами.
Душу можно вкладывать в свой проект, в свой бизнес, что не посредственно вам эквивалент затрачено частички души, времени и сил. А не пустые поздравления старших коллег, показывающих вашу значимость, признание в коллективе, или эмоции от заработавшей платы, по сути манипулируя вами.
Как только простые люди поймут основу своего я, самоидентифицируются, управлять, т.е. манипулировать ими будет чрезвычайно тяжело».
Я уволился, сейчас получается зарабатывать в разы больше, и заниматься своими проектами. Следующий шаг — уйти из программирования под МК и стать разработчиком на высокоуровневых языках. Мк, оборудование останутся только для хобби проектов. Жизнь с годами должна становиться проще.
Подписываюсь под каждым Вашим словом.
На эту тему есть отдельный культовый опус
Вы в Самом Деле Хотите Стать Программистом Микроконтроллеров?
https://habr.com/ru/articles/668368/
Отладка сложная, невозможна без таких подходов, как у автора например. В свое время создал для себя UART логгер на SD, тк устройство не для работы на столе предназначалась.Единственный критерий исправной прошивки — работа устройства без всяких ватчдогов в течении недели/месяца. Это значит что код должен быть качественным.
Я тоже от этого сильно страдал до того как не начал пользоваться интерфейсом командной строки (CLI) поверх UART вкупе с модульными тестами внутри прошивки.
https://habr.com/ru/articles/694408/
Теперь жизнь буквально заиграла новыми красками
Вся отладка теперь сводится к запуску модульный тестов из UART-CLI и просмотру YouTube пока формируется отчет. Красота!
Знать нужно ВООООО, опыта — ВООООО лет от 5-ти.
Вот, кстати, список того, что надо знать, чтобы работать программистом микроконтроллеров
Коллоквиум по программированию микроконтроллеров
https://habr.com/ru/articles/676076/
Даже не знаю много это или мало?
На мой взгляд, микроконтроллеры — это одна из немногих областей, где осталось настоящее программирование, с алгоритмами и оптимизацией. В большом мире, где фреймворк на фреймворке и ты только дергаешь чужие методы и раскидываешь кнопки по форме, совсем не осталось места для творчества.
Дело еще в том что кому-то проще читать даташиты и описывать LL функции, а кто-то, кто постоянно с абстракциями работает, он может над логикой поработать.
Как не странно, си отлично поддерживает модульность, функции заглушки и тд, и позволяет работать в команде. Так вот, те, кто работает только с логикой, уже не знают что там внизу, хоть и могут посмотреть.
«Фреймворк на фреймворке» — у меня так руководитель говорил, хотя на деле, для современных stm32 уже приходится использовать криптолибы, либы USB, и другие.
Наверное он так говорил, тк он иногда на ассемблере писал под какой-нибудь pic10f200, да и вообще asm много времени посвятил и разным процам.
Напомнило историю одного байта
Если так то у меня стояла другая задача.
Мне требовалось проверять физические устройства/платы на ошибки монтажа, корректность установленных микросхем.
А так же мне нужен был удобный инструмент для экспериментов и изучения работы с новыми устройствами.
Поэтому qemu и off-target test driven development мне тут в помощь не будут.
github.com/jeelabs/embello/tree/master/explore/1608-forth
Мое личное мнение — большинство психологических неудобств вытекает из того, что при работе с железом, плохо оборудованы рабочие места, и сам рабочий процесс не очень хорошо налажен. Ну вот банальщина — один осциллограф на отдел, две или три платы на 6 и более программистов, все испытательные стенды собраны из веточек из желудей (Вместо разъемов скрутки которые вылетают и т.п.) потому что «Зачем нам нормально все собирать, все равно этот стенд потом разбирать» и так далее. «Электротехника — это наука о контактах» — вот это точное попадание. Можно до посинения отлаживать код, а потом выяснить, что кто-то где-то вместо пайки засунул провод в разъем на стенде, капнул при пайке припоем и замкнул цепь, подал вместо 24V DC 24V AC, примеры можно до бесконечности приводить…
В общем, если коротко о главном, в меньшинстве пишется сама полезная нагрузка (функционал и т.п.) а в большинстве — борьба со всем сопутствующим.
Но нигде почему-то не говорится про цену внедрения.
Эта технология, когда PC является кукловодом для микроконтроллера-марионетки, идеальна для тестов на пропай при массовом производстве электронных плат.
Можно на NetTop PC прокручивать хитрый алгоритм Cross-Detect
https://habr.com/ru/articles/762142/
и протестировать PCB до того как на нее накатят первую прошивку.
Как перестать писать прошивки для микроконтроллеров и начать жить