Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Привет Хабровчанин,
В данной статье я хочу порассуждать на тему, как развиваться программисту микроконтроллеров. Данная статья — это небольшое чтиво для тех, кто как и я когда-то, не знал, куда дальше развиваться в своей профессии. Возможно, ты сможешь тут подчерпнуть что-нибудь интересное.
На данный момент я работаю программистом уже 3 года, и до недавнего времени, я не видел, что делать дальше. Однако, тогда я повстречал человека с 20+ лет стажем программирования встраиваемых систем, и общаясь с ним, я выделил некоторые аспекты, в которых можно развиваться. Здесь я и хочу поделиться ими, а также свои личным опытом. Я ни в коем случае не хочу никого учить, я просто поделюсь своими наработками, а ты уже сам решай, полезны эти советы или нет.
Каждый месяц появляется очередная статья для начинающих, с мигающим светодиодом. В свою очередь, статей для программистов среднего уровня просто нету. Здесь же я хочу показать, что правильно программирование микроконтроллеров задача нетривиальная. Этому нельзя научится за пару лет. В 2020 году она мало чем отличается от задачи программирования обычных систем, так как МК становятся все мощнее и мощнее. Разумеется, я говорю о проектах в миллион строк и более.
Похоже что вступление несколько затянулось, поэтому перехожу к делу. В данной статье будет рассмотрен только аспект программирования, схемотехнику я не затрагиваю. Я постарался распределить пункты по приоритету, однако разница между первым и последним невелика, все пункты важны.
1. Изучай язык С++.
Это банальный совет, однако, я посчитал нужным это выделить. Дело в том, что почти все, кого я знаю, продолжают и сейчас программировать на чистом Си. Почему это плохо? По разным данным, проект, в котором более 100000 строк (что не является большим количеством), становится практически не поддерживаемым на Си. В 2020 году, компиляторы для МК вышли на такой уровень компиляции исходного кода, что выхлоп с Си и С++ не будет отличаться. А вот читаемость кода будет совершенно иная. Классы, ООП, виртуальные функции, умные указатели и т.п. — все это сильные помощники программисту. К сожалению, выделить и посоветовать какую-то одну книгу не представляется возможным, так как их слишком много.
2. Изучай паттерны проектирования.
Не секрет, что написать хорошую программу на С++ та еще задача. Слишком уж обширен этот язык, слишком многими инструментами он изобилует. Что такое паттерн проектирования? Это некое руководство по решению часто повторяющихся задач. Тут я могу порекомендовать классику, а именно труд банды четырех «Паттерны объектно-ориентированного проектирования Гамма Эрих, Хелм Ричард». Сложно найти обычного программиста на С++ который это не читал, чем мы хуже?
3. Открой для себя дивный мир STL
Думаю, что эта библиотека не нуждается в представлении. Для тех кто все же не знает что это — это стандартная библиотека шаблонов. Она позволяет делать код короче и понятнее за счёт обобщенного программирования. Этот инструмент уже встроен в С++. Однако по непонятным причинам, очень сложно найти проект под МК, где она используется. Хотя современные компиляторы (тот же IAR) её поддерживают.
4. Прицепи к своим проектам Unit tests.
Тут мне особо написать нечего. О том что это такое, и для чего — написано бесчисленное количество трудов. Эффект от Юнит тестов и разработки через тестирования значительный. Данные тесты позволяют отловить много багов еще до того, как фиксы отдается в ОТ. К тому же, есть замечательная книга по этому вопросу: «Jeff Langr — Modern C++ Programming with Test-Driven Development (2013)».
5. Изучи Ядро
Не смотря на то, что мы программируем разные микроконтроллеры, у большинства это ядра серии CortexM. У ядер есть много различных фишек, такие как битовые маски или отладочные таймера. Все это может пригодится. Также полезно знать, как например, сохраняются РОНы при прерывании. Тут я могу порекомендовать «Ядро Cortex-M3 компании ARM. Полное руководство Джозеф Ю».
6. Изучи Ассемблер
Это может показаться смешным, но я считаю, что знать ассемблер для отладки приложений просто необходимо. К тому же писать на нем довольно весело. С помощью Ассемблера, можно чётко понимать, что у тебя происходит в данной конкретной точке остановки. Тут также подойдет книга из предыдущего пункта.
7. Пару слов об IDE
Последнее время я перешёл на связку VS+VGDB. Эта связка имеет кучу плюсов, и вместе они перевешивают единственный плюс IAR, размер бинарника. В gcc можно поставить флаги расширенных предупреждений, а также флаг того, чтобы предупреждение считалось ошибкой (в IAR это тоже есть, кстати). При таком подходе, твоя IDE сама помогает тебе кодить чисто. Об этом есть хорошая статья на хабре. Кстати, я встречал такие компании, которые для тестового задания (при собеседовании) обязуют писать код с этими флагами.
Вот пожалуй и все. Надеюсь, если вы прошли по ссылке, то нашли то, что искали. Пожалуйста, поделитесь в комментариях, какие ещё пути развития могут быть у Embedded программистов.
P.S. В данной статье есть такие вещи, о которых не говорится, например программирование сложной периферии через регистры или RTOS. Подразумевается, что читатель уже владеет этими навыками, или по крайней мере, знает об их существовании.
В данной статье я хочу порассуждать на тему, как развиваться программисту микроконтроллеров. Данная статья — это небольшое чтиво для тех, кто как и я когда-то, не знал, куда дальше развиваться в своей профессии. Возможно, ты сможешь тут подчерпнуть что-нибудь интересное.
На данный момент я работаю программистом уже 3 года, и до недавнего времени, я не видел, что делать дальше. Однако, тогда я повстречал человека с 20+ лет стажем программирования встраиваемых систем, и общаясь с ним, я выделил некоторые аспекты, в которых можно развиваться. Здесь я и хочу поделиться ими, а также свои личным опытом. Я ни в коем случае не хочу никого учить, я просто поделюсь своими наработками, а ты уже сам решай, полезны эти советы или нет.
Каждый месяц появляется очередная статья для начинающих, с мигающим светодиодом. В свою очередь, статей для программистов среднего уровня просто нету. Здесь же я хочу показать, что правильно программирование микроконтроллеров задача нетривиальная. Этому нельзя научится за пару лет. В 2020 году она мало чем отличается от задачи программирования обычных систем, так как МК становятся все мощнее и мощнее. Разумеется, я говорю о проектах в миллион строк и более.
Похоже что вступление несколько затянулось, поэтому перехожу к делу. В данной статье будет рассмотрен только аспект программирования, схемотехнику я не затрагиваю. Я постарался распределить пункты по приоритету, однако разница между первым и последним невелика, все пункты важны.
1. Изучай язык С++.
Это банальный совет, однако, я посчитал нужным это выделить. Дело в том, что почти все, кого я знаю, продолжают и сейчас программировать на чистом Си. Почему это плохо? По разным данным, проект, в котором более 100000 строк (что не является большим количеством), становится практически не поддерживаемым на Си. В 2020 году, компиляторы для МК вышли на такой уровень компиляции исходного кода, что выхлоп с Си и С++ не будет отличаться. А вот читаемость кода будет совершенно иная. Классы, ООП, виртуальные функции, умные указатели и т.п. — все это сильные помощники программисту. К сожалению, выделить и посоветовать какую-то одну книгу не представляется возможным, так как их слишком много.
2. Изучай паттерны проектирования.
Не секрет, что написать хорошую программу на С++ та еще задача. Слишком уж обширен этот язык, слишком многими инструментами он изобилует. Что такое паттерн проектирования? Это некое руководство по решению часто повторяющихся задач. Тут я могу порекомендовать классику, а именно труд банды четырех «Паттерны объектно-ориентированного проектирования Гамма Эрих, Хелм Ричард». Сложно найти обычного программиста на С++ который это не читал, чем мы хуже?
3. Открой для себя дивный мир STL
Думаю, что эта библиотека не нуждается в представлении. Для тех кто все же не знает что это — это стандартная библиотека шаблонов. Она позволяет делать код короче и понятнее за счёт обобщенного программирования. Этот инструмент уже встроен в С++. Однако по непонятным причинам, очень сложно найти проект под МК, где она используется. Хотя современные компиляторы (тот же IAR) её поддерживают.
4. Прицепи к своим проектам Unit tests.
Тут мне особо написать нечего. О том что это такое, и для чего — написано бесчисленное количество трудов. Эффект от Юнит тестов и разработки через тестирования значительный. Данные тесты позволяют отловить много багов еще до того, как фиксы отдается в ОТ. К тому же, есть замечательная книга по этому вопросу: «Jeff Langr — Modern C++ Programming with Test-Driven Development (2013)».
5. Изучи Ядро
Не смотря на то, что мы программируем разные микроконтроллеры, у большинства это ядра серии CortexM. У ядер есть много различных фишек, такие как битовые маски или отладочные таймера. Все это может пригодится. Также полезно знать, как например, сохраняются РОНы при прерывании. Тут я могу порекомендовать «Ядро Cortex-M3 компании ARM. Полное руководство Джозеф Ю».
6. Изучи Ассемблер
Это может показаться смешным, но я считаю, что знать ассемблер для отладки приложений просто необходимо. К тому же писать на нем довольно весело. С помощью Ассемблера, можно чётко понимать, что у тебя происходит в данной конкретной точке остановки. Тут также подойдет книга из предыдущего пункта.
7. Пару слов об IDE
Последнее время я перешёл на связку VS+VGDB. Эта связка имеет кучу плюсов, и вместе они перевешивают единственный плюс IAR, размер бинарника. В gcc можно поставить флаги расширенных предупреждений, а также флаг того, чтобы предупреждение считалось ошибкой (в IAR это тоже есть, кстати). При таком подходе, твоя IDE сама помогает тебе кодить чисто. Об этом есть хорошая статья на хабре. Кстати, я встречал такие компании, которые для тестового задания (при собеседовании) обязуют писать код с этими флагами.
Вот пожалуй и все. Надеюсь, если вы прошли по ссылке, то нашли то, что искали. Пожалуйста, поделитесь в комментариях, какие ещё пути развития могут быть у Embedded программистов.
P.S. В данной статье есть такие вещи, о которых не говорится, например программирование сложной периферии через регистры или RTOS. Подразумевается, что читатель уже владеет этими навыками, или по крайней мере, знает об их существовании.