Разработка программы

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

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

Например, мой первый проект -- прототип 8-битного синтезатора первоначально включал в себя 2 микроконтроллера, один из которых принимал управляющие MIDI-команды по интерфейсу USART и передавал их в модуль LCD-дисплея, а также в модуль синтеза, то есть во второй микроконтроллер. Но я тут же столкнулся с тем, что пока данные передаются по интерфейсу TWI, микроконтроллер не может принимать входящие данные по USART, и соответственно микроконтроллеров в схеме стало три:

  1. USART-FIFO буфер, программу для которого я успешно написал на ассемблере.
  2. Голосовой модуль, программу для которого я не менее успешно написал на Си.
  3. MIDI-процессор, разбирающий MIDI-команды и управляющий голосовыми модулями, которых может быть несколько. Эту программу я также написал на Си.

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

В терминах Arduino это можно переформулировать следующим образом. Если проектируется ещё один Arduino, то это Си, а если шилд, то ассемблер был бы весьма желателен.

Автор: Андрей Шаройко <vanyamboe@gmail.com>