Pull to refresh

Comments 39

Добрый вечер, подскажите, пожалуйста, а что можно почитать по теме программирования на C?

Добрый вечер, если интересует Си для микроконтроллеров, есть книга "Си для встраиваемых систем" https://robotclass.ru/articles/c_for_embedded_systems/

и "Mastering STM32" , у нее также есть перевод на русский https://www.carminenoviello.com/mastering-stm32/

По самому языку Си есть книги Карнигана и Ритчи - создателей языка

Добрый вечер.

А что ни будь для совсем "чайников" про Си?

Мне как раз в начале "Си для встраиваемых систем" помогла освоиться с синтаксисом и структурами данных языка, рекомендую PDF версию, она есть в сети, могу выслать на email, если правилами не запрещено

Керниган и Ричи — классика, как уже сказали выше. Последнее издание лучше, она не так давно переиздавалась. Там все основы довольно простым языком, книжка не такая уже большая.

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

Слитый на торренты курс КА "Шаг" попрубуйте обязательно. Для первой консольной програмки самое то.

Рис. 20 Больше HAL

А почему бы сразу с HAL не начать? Ведь он проще для понимания, чем CMSIS.
К тому же с HAL можно на пин повесить пользовательскую метку и писать примерно так: HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
Соответственно, если переместите светодиод на другой пин, то достаточно перевесить эту метку и в коде ничего не нужно будет менять.

Добрый вечер, согласен, HAL проще для понимания, чем CMSIS, но обучалок на HAL в интернете много, а я бы хотел дать более полное представление о возможностях программирования под МК

Кроме HAL есть еще LL и ни куда не делся SPL. Поэтому среди этого зоопарка трудно разобраться. CMSIS - работа непосредственно с указателями на регистры - проще разобраться и понять аппаратную часть мк. К тому же CMSIS он по сути один для всех армов, неважно от производителя. Но работать с указателями напрямую - сложней.

HAL на порядок сложнее для понимания, чем CMSIS. Потому что к замороченной аппартной архитектуре IP нужно ещё и понимать индусский код HAL'а.
Единственная вещь, где может теоретически пригодиться HAL - если не хочется вручную прописывать "многоэтапные" транзакции I2C и прочих не самых дружественных к эмбеддеру протоколов.

Спасибо, что не ещё одна статья «как помигать светодиодом из ардуйнины».
И, собственно, вопрос - почему HAL а не LL?

Благодарю, если честно LL просто мимо меня прошел и в проектах его не использую, потому рассказываю о том,что знаю

Самоучке возможно попасть в разработку встраиваемых систем?

Здравствуйте, да, возможно, в моем случае это случилось после того, как на третьем курсе университета вместе с увлекающимся силовой электроникой одногруппником начал осваивать микроконтроллеры

Более чем. Эмбеддед сравнительно спокойное направление, к тому же более веселое (чем тот же вебдев). Программировать тут все равно никто не умеет...

Мне кажется для таких организаций нужны дипломы и тд

Дипломы нужны, но иногда работодатель идет на встречу, и (если уж сильно надо) - диплом получается паралелльно с работой при помощи заочного обучения.
Если речь именно про "попасть в разработку" - то можно и без диплома, удержаться там - могут и попросить

С моим увлечением Go для мк туда точно не попасть, наверное всё-таки нужно cmsis

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

CMSIS - это стандарт ARM'а на заголовочники, специфичные для процессора, формат описания системной периферии, некоторые отдельные библиотеки, и прочие небольшие кусочки, совершенно не обязательные к применению. Лучше понимать, как вообще работают микропроцессорные системы и чем меньше прослоек между программистом и железом - тем проще идёт процесс понимания

По моему опыту, ни на одном собеседовании на позицию программиста микроконтроллеров про профильный диплом не спрашивали. Были вопросы касательно понимания Си и основ схемотехники

Ну как сказать. Если это что-то из госсектора — завод, НИИ и так далее, то там, конечно, без диплома вообще никуда. Даже если денег не платят, диплом, а лучше кандидатскую все равно подавай. А в «частных» скорее будут смотреть на опыт и портфолио. По крайней мере мои знакомые электронщики именно таким опытом делятся. Да и мой опыт в НИИ и нескольких частных компаниях конструктором говорит о том же самом.

Смотря куда. Я в НИИ когда работал, случайно стал разработчиком системы управления лазером :) У меня хоть и почти профильное образование было, но с МК на Си и прочей электроникой я не работал до этого.

да легко, если "самоучение" дается легко. Вот только зачастую помимо программирования требуется иметь знания в цифровой обработке сигналов, цифровой и аналоговой схемотехнике хотя бы на уровне чтения схемы. Да и знать как держать паяльник не помешает.
мой путь в микропрограммисты начался с практики на том же предприятии где подрабатывал студентом. программировать умел немного на паскале и делфи, Си учил на месте. как и контроллеры. за 7 лет от новичка до ведущего инженера-программиста с учетом отсутствия профильного образования (диплом инженера средств РЭБ) вполне нормально я считаю.

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

Настоятельно рекомендую всем, желающим разобраться с микроконтроллером, научится пользоваться периферией МК "ручками" через регистры.

HAL, CMSIS, LL скрывают от вас всю "кухню", что не способствует пониманию логики работы МК.

Да, это труднее, НО на много полезнее в плане развития.

++

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

Полностью согласен.

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

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

Вот! Я буквально только что столкнулся с этим на работе. Молодые падаваны с удовольствием используют все эти cubemx-ы, cmsis и т.д. Проблема в том, что у них не возникает понимания как это всё устроено, они это воспринимают как ещё один фреймворк. Но с железом это немного не так работает. Вернее работает, если задача тупо поморгать светодиодом. Но потом возникают более сложные задачи, когда нужно считать такты, прикидывать, а влезаем ли мы вообще по быстродействию. И тут начинают появляться реализации с 500 000 прерываний в секунду и удивление, что эта фигня теряет байты даже на медленном uart-е на скорости 9600. "А чо такова, у нас же 108 мегагерц, мы всё успеем". Успеем, если сядем и прикинем как и что будет работать, а не в cubemx-е пины раскидаем.

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

p.s. Из реального, ещё с 8-битных контроллеров. Пацаны написали очередную реализацию миллисекундного таймера. У них там в прерывании инкрементировался счётчик uint32_t. Где-то в основном цикле это как-то использовалось. Ну и конечно это глючило в процессе и парни долго и героически пытались разобраться, только потом пришли за советом.

В другом проекте от души написали систему классов, виртуальные функции, все дела, красивое такое хипстерство по стандартам C++42. Жаль только в 8 килобайт RAM оно не влезло )

Я когда-то писал в айтмель студио для меги8. Работа с регистрами и тд. Сейчас pi pico блэк пилл в Ардуино иде . Иногда так хочется превратить любимое хобби в профессию

Для настройки тактирования и периферии будем использовать ST CubeMX. Писать код будем в Keil

Обоженьки, проприетарные закрытые программы с вендор-локом и разработчики любители Windows. В России в 2023 году. Эмдеддинг который мы заслужили...

Ну почему хотя бы не PlatformIO?

Не PlatformIO, потому что там платная отладка

В следующей статье добавлю рассмотрение вопроса по открытым IDE

since June 2019

Ну так то уже четвертый год как everything is FREE and OPEN-SOURCE.

Даже в неайтишном мире все гораздо быстрее меняется.

Если уж генерить код в CubeMX, то логично продолжить написание кода в CubeIDE.

Потому что platformio такая же проприетарщина.
Вообще ARM Cortex M хороши, что под них есть GCC и OpenOCD, а больше, зачастую, и не нужно

Кстати, мы сейчас очень грустим от того, какое Кейл неудобное говно. Это помимо того, что его нельзя получить легально. Думаем на что пересесть, может даже QtCreator приспособить, вроде есть мурзилки как это делается.

VS Code + Cortex-Debug. Может не самое лучшее, но точно работающее решение.
Ну и SEGGER RTT спасет эмбеддерщика

Sign up to leave a comment.

Articles