Programming microcontrollers
Comments 11
+2
спасибо за статью, очень здорово!

у меня вопрос: а почему именно эта IDE? Т.е. как я понимаю, она платная и только под win. Что именно из IDE нужно студентам? Средства отладки? Просто как я понимаю, проект-то учебный, маленький, его можно хоть в блокноте накидать.
Почему C++ а не C? Я в микроконтроллерах совсем чайник, но всегда казалось что C++ для многих задач — явный оверкил.
-1
Здравствуйте,
IAR лицензионный мы используем на работе, и привыкли к нему, задача наша, найти толковыъ студнтов и потом по возможности взять на работу, а ведь хорошо, когда они уже знают среду в которой мы работаем.
Триал версия IAR для ARM доступна со всеми фичами для приложений до 30 кБ кода. Собтсвенно, это меня устраивает, код получился значительно меньше.
С++ мне нравится по одной простой причине — что при грамотном подходе код получается очень читабельным и понятным. Кроме того, поскольку кодирование это вообще у нас второстепенно :) на первом месте разработка архитектуры, а она у нас делается на UML. С диаграмм UML потом очень удобно все перекладывать в код и классы, чисто теоретически можно их потом автоматом генерить (но это моветон). Для коммерческих проектов, конечно все это делается вручную. Зато по архитектуре сразу понятна задумка автора и можно на раннем этапе указать на ошибки.
А вообще микроконтроллеры шагнули далеко вперед за 8 лет :) И вот микроконтроллер за 2 бакса с 16 кБатам ОЗУ и 128 ПЗУ. поэтому использование С++ тут как бы уже нормально, но если очень надо, можно использовать С++ и на более мелких микроконтроллерах, только надо будет например переопределить new, чтобы динамически память не выделялась, по возможности не использовать виртуальные функции и и еще ряд ухищрений, но думаю, что сейчас это уже не нужно — памяти хватит для любого нашего проекта :)
+3
С одной стороны мотивация ясна, и все же с IDE задумка несколько спорная: велик риск получить на выходе не толкового студента, а мартышку которая научилась по кнопкам в IDE нажимать. Я понимаю, если задача сложная, когда разбираешь какое-нибудь хитрое состояние гонок, там да, и дебаггер был бы полезен, или когда рефакторишь крупный проект — то крутые возможности IDE — очень кстати, — но все эти плюшки, на мой взгляд, нужно давать уже состоявшемуся специалисту, а никак не зеленому студенту, от которого требуется понимание как компилятор запустить, код зальется на микроконтроллер и т.п.

По поводу C++: все правильно пишете — код читаемый получается при грамотном подходе, а чтобы подход с C++ был грамотным — ему нужно лет 5 обучаться, собирать все шишки и грабли. Если вы хорошо разбираетесь в C++ — то вам будет относительно просто писать код, а студенты, которые ничего в этом не понимают, при первой же ошибке впадут в ступор и ничего не дадут на выходе. Опять же, для больших проектов — да, может быть C++ в плане организации архитектуры кода хорош, но для маленьких учебных задач — оверкил.
0
Я какое-то время назад (пол-года примерно) тоже спрашивал у опытных в Embedded коллег, почему IAR, а не Eclipse + GCC, например.
Были случаи, когда GCC генерировал приложение, зависавшее через некоторое время работы (несколько часов — сутки, где-то). Серьезные проблемы были в продакшене. При этом компилятор IAR выдавал полностью рабочее приложение по тем же сорцам. Конечно, мог иметь место человеческий фактор при портировании кода в иную среду компиляции. Однако, по моим «умозрительным» оценкам IAR выдает значительно более компактный машинный код. Возможно, у IAR более компактные подмены стандартным функциям Си или еще что-то.
+2
Вставлю свои пять копеек.
В настоящее время для разработки под arm и в частности stm32 наиболее распространены 4 ide(не претендую на истину).
Первые две, это IAR и KEIL. Коммерческие ide, специально созданные для создания по встраиваемых систем. Они платны, есть триал версии с ограничением кода прошивки.
Вторые две это eclipse + gcc для arm или собранный на его основе Cocoox. Они бесплатны.
Собственно главное различие в том, что iar и keil работают из коробки, под них есть масса примеров, драйвера для программаторов встроены в дистрибутив и.т.п.
Во вторых двух совершенно другая история, как пример, в eclipse нельзя просто залить код в микроконтроллер, есть кнопка залить и запустить дебаггер, периодически глючит просмотр регистров контроллера.
Теперь представьте себе человека, который только знакомится с микроконтроллерами серии стм32. Reference manual (20мб) на серию stm32f4 это тысяча с лишним страниц описывающих периферию контроллера. Обилие конфигурирующих дефайнов и файлов в проекте, совершенно не понятных студенту, но без которых ничего работать не, расчёт адресов памяти для линкера. И не разобравшись в КАЖДОМ из пунктов досконально, не получится даже поморгать светодиодом.
У вас есть 2 варианта: поставить свободную ide типа eclipse и зарыться в непонятных для новичка вещах, разгребая которые вы потеряете весь энтузиазм.
Или же поставить iar keil, запустить готовый проект коих тысяча и наслаждаться моргающим светодиодом, параллельно разбираясь зачем в проекте подключен тот или иной файл.
ps Сам пишу в Eclipse +gcc на C++ под stm32, но начинал с keil.
-3
Про студентов, возможно вы и правы. Но предполагалось, что все даваться им будет на последнем курсе, когда микроконтроллеры уже пройдены, у них отдельный курс по ним есть. Хотя да, предполагаю, что будет так как вы говорите — но попробуем, рассматриваю студентов, как выразился один мой коллега, в качестве стволовой клетки — можно сделать кого угодно, главное чтобы был интерес

По поводу IDE, тут стоит уточнить, что IDE мы используем только для отладки и очень редко. Для сборки используется обычный make файл, сборка прошивается сразу в плату где проходят смоке тесты. И только в случае, если что-то вдруг не работает, делает тестовый проект в IDE для отладки. Но на моей практике, такое было редко. Кстати мейк есть и в моем проекте, просто я не доделал и бросил — это не входило в мою задачу. Там и линтом, например обертка проверялась, чтобы более менее код чистый был.
С++ мы используем у себя во всех проектах, поэтому если студент пришел к нам скажем на практику, первым делом он должен хотя бы на начальном уровне знать его — дальше дело практики.
Основное требование — простота кода и его поддерживаемость, чтобы, скажем — через 3 года, любой инженер мог открыть архитектуру, посмотреть код и быстро все понять. Чистый Си в этом плане проигрывает С++, раньше мы на Си программировали как на С++ для этого, используя структуры в качестве классов. Но это тоже еще то извращение.
+1
Скажите, а что означает маленькая буква «с» перед именем каждой функции? Это ваш корпоративный стандарт или тлетворное влияние freeRTOS?
-1
Это стандарт кодирования, обзначает class. Наследие использования Си и структур в качестве классов.
+2
Подход с C++ мне понравился — красиво получается. А как вы собираетесь «оборачивать» разного рода стеки (TCP/IP, lwip тот же, GUI, файловые системы)? По протоколам, тоже интересно, как Вы собираетесь сделать? У IAR кстати есть похожая штука, позволят получать неплохие результаты.

А вот что касается мотивации, я не могу не воздержаться от критического комментария. У меня такое ощущение, что работодатели не понимают простого правила — хороший специалист стоит денег. И то, что он не хочет идти к Вам за малые деньги, так он полностью прав. Если у вас нет денег на специалиста, то вариантов у вас собственно два, либо вообще не занимайтесь тем, чем занимаетесь, либо нанимайте студентов. Вот только во втором случае будьте готовы, во-первых, к низкому качеству по-началу, и, во-вторых, к тому, что он уйдет от вас, в другую контору за большие деньги когда наберется профессионализма и будет прав. А писать гуевые обертки, что-бы программировать «мышкой», я думаю это полезно только тем кто пишет эти обертки. Тот, кто будет ей пользоваться рискует стать бестолковой мартышкой без понимания сути того, что происходит внутри. Профессионализм — это результат долгого и упорного труда, за месяц или даже год, хорошего спеца не получить. А как только он им становится — он растет в цене.
Only those users with full accounts are able to leave comments., please.