@NEupy

Что нужно знать для программирования железа?

Недавно заинтересовала эта отрасль, и я хотел бы спросить: Входит ли припаивание микроконтроллеров, схем в эту специальность или там нужно в основном знание C/++ & Assembler?
  • Вопрос задан
  • 4911 просмотров
Пригласить эксперта
Ответы на вопрос 4
@lamerok
Вообще, если вы хотите быть именно программистом, то знание как паять и деталей схемотехники не нужны. Обычно в более менее приличных конторах разделяют схемотехника и программиста. Но в небольших конторах, это может совмещаться, однако это сильно влияет на качество.
Поэтому если вы хотите быть специалистом высокого класса, то лучше разделить две эти вещи, схемотехника и программирование.

В целом программирования для микроконтроллеров можно как и любую другую разработку разделить на уровни.
Для простоты скажем это Уровень железа (Hardware Abstact Level (HAL)) и уровень приложения (Application или Business Level)

Для того, чтобы заниматься уровнем железа необходимо:
  1. В первую очередь знать как работает микроконтроллер, и всякая периферия от простых портов, UART, ADC, SPI и до USB, Ethernet и Bluetooth. Для этого необходимо почитать соответствующую литературу, можно статьи, коих много в интернете.
    И после этого ознакомления, самое главное, необходимо изучить оригинальные спецификации на все это, потому что только там есть правда.
  2. Необходимо знать язык программирования, для начала Си, но лучше сразу начать с С++ :). Ассемблер вам понадобиться в настоящих приложениях очень редко, только если, вы скажем, захотите написать свою RTOS . Т.е. особо без надобности изучать ассемблер не надо, но как работает ПО прошитое в микроконтроллер и сам микроконтроллер вы знать должны (Стек, как происходит вызов функций, как выполняется прерывание, как создаются динамические объекты, что такое куча и т.д.)



Для того, чтобы заниматься уровнем приложения:
  1. строго говоря можно про аппаратуру знать постольку поскольку, например, если у вас уже написал HAL для UART, то вам не надо знать, какие там регистры используются для установки четности или скорости, вы просто будете вызывать соответствующие функции HAL

  2. однако тут необходимо знать дополнительно много всего, включая С++ и, например, паттерны проектирования, Операционные системы реального времени, парадигмы программирования ( к примеру, ООП, метапрограммирование) и т.д.



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

Обычно все таки людей разделяют на схемотехника и программиста, который делает все от HAL до бизнес логики.

В идеале, должны быть 3 человека, схемотехник, программист низкого уровня (HAL, стеки, драйвера), программист бизнес логики
Ответ написан
Комментировать
Moskus
@Moskus
Если отвечать формально, то, конечно, нет - для программирования уметь паять не нужно. Но так обычно случается, что хороший специалист по низкоуровневому программированию в процессе учёбы осваивает некоторые смежные навыки. Тем более, именно паять - не так уж и сложно. Наличие таких смежных навыков существенно повышает уровень подготовки и ускоряет процесс разработки, особенно, если работать в маленькой компании, где ценятся широкие, а не узкие специалисты.
Ответ написан
Комментировать
@vanyamba-electronics
Это зависит от проекта. Там ещё и осциллограф нужен.
Ответ написан
Комментировать
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
Вполне возможно что и входит, смотря что делать :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы