Когда я только начинал программировать микроконтроллеры, у меня было миллион вопросов. Какой микроконтроллер выбрать? Какую среду разработки установить? С чего вообще начать? Я читал форумы, смотрел видео, пробовал — и набивал шишки. Сейчас, оглядываясь назад, я понимаю: многие вопросы, которые я задавал, были совсем не теми, что следовало бы задавать. Я спрашивал «Какой язык лучше?», а надо было спрашивать «Как понять, что делает программа?». Я спрашивал «Какую плату купить?», а надо было — «Как научиться читать документацию?»...
ElectroManBY: железо с мозгами
FreeRTOS: когда одного микроконтроллера мало для одной задачи. Или как я перестал писать огромные циклы и начал делегировать задачи
Когда я только начинал программировать микроконтроллеры, я думал, что программа — это просто одна большая последовательность инструкций. Включился, выполнил, выключился. Что там ещё может быть? Однажды я писал программу для системы управления небольшим станком. Нужно было одновременно крутить двигатель, читать кнопки, обновлять дисплей и слушать команды с компьютера. Я всё это запихнул в один большой суперцикл. Работало. Но когда я добавил плавный разгон двигателя, дисплей начал моргать. Когда я добавил обработку команд с компьютера, кнопки стали «пропускать» нажатия...
Ошибки, сбои и тестирование. Или почему нельзя доверять датчикам
Когда я только начинал программировать микроконтроллеры, я свято верил в то, что показывают датчики. Пришёл сигнал — значит, так и есть. Температура скакнула — значит, реально нагрелось. Давление упало — значит, упало. Однажды я писал программу для системы полива в теплице. Датчик влажности показывал, что земля сухая. Я включал полив. Через час — опять сухая. Я увеличивал время полива. Ещё через час — опять сухая. Я уже начал подозревать, что вода просто испаряется мгновенно. Пока не проверил датчик мультиметром...
Компилятор и архитектура: что происходит до того, как код попадёт в микроконтроллер
Когда я написал свою первую программу для микроконтроллера, я думал, что всё просто. Написал код, нажал кнопку «Скомпилировать», загрузил — и готово. Что там внутри происходит — какая разница? Главное, что работает. Однажды я оптимизировал код. Убрал лишние переменные, сократил циклы. Программа перестала работать. Я ничего не менял в логике, только «улучшал» код. А он перестал работать. Я сидел и смотрел на экран, не понимая, что произошло. Оказалось, что компилятор «оптимизировал» мою программу так, что она стала выполняться не так, как я ожидал...
Стандартная библиотека: друг или враг? Или почему printf() — это не всегда хорошо
Когда я только начинал программировать микроконтроллеры, я пришёл из мира ПК. Там я привык к роскоши: printf() для вывода на экран, sprintf() для форматирования строк, malloc() для выделения памяти. Я думал, что на микроконтроллере всё будет так же. Просто беру и использую. Первая же программа меня отрезвила. Я написал простую прошивку, которая выводила данные через UART. Использовал printf() — красиво, с форматированием. Скомпилировал, загрузил. И увидел, что прошивка занимает почти всю память микроконтроллера...

