Необходимые знания для embedded developer'a?

Доброго времени суток. Перейду сразу к сути: интерсует исчерпывающий список направлений для обучения программированию микроконтроллеров (прямо попредметно, включая то какие языки программирования следует освоить). Начать хочу с самых ранних азов.
Интересуют так же такие вещи как: стоит ли учится писать сценарии программ для Arduino, сможет ли это помочь абстрагироваться в выбранной сфере разработки и получить те самые азы?
Нужно ли учиться паять и разбираться в микросхемах, теристорах, тестерах и прочем железе что бы работать embedded программистом?
Нужны ли знания программирования под линукс? Читая вакансии не один раз встречал требования знания работы с линукс.

Зачем это все: хочу обучится программированию для автомобилей. По диплому выпущусь на специальность связанную с автомобилями, до этого самостоятельно изучал джаваскрипт, был интересен вэб, но к 20 годам захотелось пойти в более серьезную среду, чем заниматься сайтошлепством где то на галере.
  • Вопрос задан
  • 32701 просмотр
Решения вопроса 1
@OYTIS
Embedded Software Developer
Оффтоп: денег в вебдеве как правило больше, особенно в РФ (но глобально - тоже). Если это не смущает, читайте дальше =)

С++, Linux, Verilog - это все хорошо, но я бы занимался этим после того, как поработаете какое-то время, и поймете, куда хотите расти.

Абсолютный must, имхо:
  • Язык C. Это рабочая лошадка firmware, без него никуда, зато остальные языки - совершенно опциональны.
  • Какой-нибудь простой ассемблер (сегодня я бы сказал, армовский). Не обязательно быть мастером, но очень помогает понять, как работает процессор в принципе.
  • Скучная школьная теория: архитектура ЭВМ, устройство операционных систем, конечные автоматы - все это для эмбеддера куда более актуально, чем для веб-девелопера
  • Электроника. Необязательно уметь спроектировать шестислойную плату с учетом EMC, но читать схемы - это важно. А также способность потыкать плату тестером или осциллографом (в большинстве случаев ошибка все равно в софте, но успокаивает).
  • Стандартная периферия и интерфейсы: UART, I2C, SPI, DAC/ADC. Это до какой-то степени можно выучить и на ардуине, но лучше освоиться с настоящим железом
  • Умение читать документацию на железо. Должно прийти при освоении предыдущих пунктов, если не ограничиваться копипастом из туториалов.


Если освоите до какой-то степени (главное - не увлекаться) этот набор, то можете работать в firmware. А дальше уже можете развиваться куда душа лежит, и где будут карьерные возможности - Linux, C++, электроника, DSP, whatnot.
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
@LampTester
Начать хочу с самых ранних азов.


Правильно. Если хотите стать профессионалом, начинать надо с базовой теории. "Нет царских путей в геометрию".

Интересуют так же такие вещи как: стоит ли учится писать сценарии программ для Arduino, сможет ли это помочь абстрагироваться в выбранной сфере разработки и получить те самые азы?


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

Нужно ли учиться паять и разбираться в микросхемах, теристорах, тестерах и прочем железе что бы работать embedded программистом?


Да, обязательно. Хороший embedded-программист сам должен быть способен разрабатывать железо. Более того, в не слишком сложных проектах (или в очень критичных по оптимальности решения) разработчик железа и программист - один и тот же человек.

Вообще, embedded-программист - в большей степени электронщик (где-то на 80%, или даже больше), чем программист.

Нужны ли знания программирования под линукс? Читая вакансии не один раз встречал требования знания работы с линукс.


Опционально, будет плюсом.

Что касается процесса обучения, то он примерно идентичен процессу обучения инженера-электронщика.

1. Полный курс общей физики. Обязательно. Без него никуда, это база всего. После него отпадают 98% элементарных вопросов и появляется стройная картина мира. Математика - без фанатизма, но в достаточном объеме, чтобы понимать курс физики.
2. Базовый курс конкретно электроники. Здесь можно посмотреть в сторону классики - Горовиц и Хилл первое, что приходит на ум.
3. Программирование. Без фанатизма. Ночами штудировать численные методы и заучивать классичесские алгоритмы не надо (хотя представлять, как работает, например, метод Рунге-Кутта будет полезно), но выработать навыки алгоритмизации требуется обязательно. На эту тему полно туториалов, гораздо больше, чем по электронике.
4. Обработка сигнала тоже нужна. В написании программ для контроллеров всякие цифровые фильтры встречаются очень часто (особенно при обработке сигнала с датчиков), надо бы представлять, как работают методы ЦОС.
5. Специальные вопросы. Архитектура контроллеров, стандартные интерфейсы и т.п. Это уже по необходимости.

Кроме этого - английский в достаточном объеме, чтобы понимать техническую литературу и общаться на среднем уровне. Простой тест - свободное чтение документации и ресурсов типа hackaday.

Но самое главное - желание. Только оно может обеспечить достаточный объем практики.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Программирование
software engineer
В крупном ембеддед очень часто встречается С++

Но ембеддед это не обязательно микроконтроллеры - множество устройств идет с вполне полноценными архитектурами и ОС на базе Линукс - умные телевизоры, коптеры, автопилоты и др.

Если вы хотите делать мелкие штуки - то Ардуино может помочь вам освоится, но нужно научиться разбираться со спецификацией.
Научиться паять можно на минимальном уровне, но если вы будете работать в компании, скорее всего будете работать с инженерными экземплярами, где все будет уже распаяно и нужно будет только уметь работать с портами.
Ответ написан
Комментировать
Punk_Joker
@Punk_Joker
Software Engineer в ВО Овен
1. Си, С++
2. Лучше сразу начинать с stm32 (Архитектура популярная, а конкретно эти МК - банально больше материала, и новичку проще разобраться)
3. Навыки работы с мультиметром, осцилографом, логическим анализатором
4. Устройство и распределение памяти (очень нужная вещь при отладке)
5. Базовые понятие в области схемотехники (со схемами часто приходиться разбираться)
Ответ написан
@vanyamba-electronics
Сам начал с Arduino. То есть C/C++.
Затем решил соединить 2 микроконтроллера. Они стали зависать. Пришлось освоить ассемблер AVR8.
Затем наступил черёд Verilog и VHDL.
Затем я стал писать свой интерпретатор Forth для AVR8, но понял, что задача слишком сложна для ассемблера, надо попробовать на C++ написать. Оказалось, что всё ещё сложнее, чем я мог себе представить.
Пришлось вспоминать теоретическую часть - компиляторы, интерпретаторы и т.д.
Ответ написан
Комментировать
@poweruser
Кодим, шарпим...
Если авто - про CAN не забываем. Можно с "малиной" поиграться (к ней тоже немало "шилдов" есть). Да и знать, за что держать паяльник. :)
Ответ написан
Комментировать
@z3akycb
Имбедид - это не только микроконтроллеры, уже довольно давно все делается на х86 - понятно почему - для них есть готовые операционки реального времени, и пиши там код хоть та С, хоть на Делфи, хоть на ассемблере.
А все эти микроконтроллеры в силу своей недоразвитости по ресурсам - отомрут скоро, уподобясь австралийским сумчатым волкам.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы