Arm

Mecrisp Forth

Решил заняться чем-то новым, точнее хорошо забытым старым, и освоить форт на микроконтроллерах.

Перед компилируемыми ЯП форт имеет преимущество за счёт своей интерактивности - писать и отлаживать код можно непосредственно на целевом устройстве не занимаясь каждый раз сборкой и прошивкой.

С другой стороны, микроконтроллеры уже достаточно мощные, что бы запускать интерпретируемые языки, такие как Lua или JavaScript, но они отбирают для своей работы ценные ресурсы МК, да и работают сравнительно медленно.

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

Используем flashrom

Для прошивки SPI Flash можно пользоваться специализированными программаторами но при отсутствии таковых можно применить случайно оказавшийся под рукой микрокомпьютер с Linux на борту. Например OrangePi One с Armbian или RaspberryPi.

Компилируем для ARM

Как известно, программный код на языке выского уровня сам в микроконтроллер не полезет, его требуется предварительно скомпилировать в машинный код (мы не берём интерпретируемые языки, но в этом случае в микроконтроллер должен быть уже прошит интерпретатор). Для микроконтроллеров на базе ядра ARM/Cortex можно воспользовать кросскопилятором gcc-arm-none-eabi.

Banana Pi

Banana Pi — семейство одноплатных компьютеров на базе микроконтроллеров с ядром ARM производства Allwinner.

Может работать под управлением различных операционных систем: Android 4.2, Android 4.4, Lubuntu, Raspbian, Debian, Fedora, Arch Linux, Gentoo, openSUSE, Berryboot, FreeBSD, OpenWrt, Slackware, Tiny Core Linux.

Оптимизация задержек

Микроконтроллеры обычно работают напрямую с физическим миром, а не только с астрактным миром цифр. А реальность не терпит поспешностей. Иногда нужно немного подождать. Казалось бы, чего уж проще - написать процедуру задержки. А ведь нет! Написать то легко, а вот каков результат будет в машинных кодах? Три команды или тридцать три?

Вот и мне потребовалось реализовать задержку в сишной программе для ATtiny2313. Микроконтроллер ресурсами не блещет, а потому каждая команда на счету.

Прошивка LPC2xxx по последовательному порту

Микроконтроллеры NXP LPC2xxx имеют встроенный загрузчик, позволяющий прошивать память программ (flash) через последовательный порт (UART). Для входа в режим загрузчика во время аппаратного(?) сброса на определённых ногах микроконтроллера должны присутствовать логические уровни: Ноль на P0.14 для LPC210x Ноль на P2.10 для LPC2368, LPC2478 … LPC21ISP Наиболее оптимальный вариант для прошивки микроконтроллераконтроллера через последовательный порт - воспользоваться консольной программой lpc21isp. Сборка приложения проста и осуществляется одной командой make.

STM32 Primer

Есть в природе вот такая забавная штучка на базе микроконтроллера STM32F103. В своём составе имеет: Микроконтроллер STM32F103RBT6 на базе ядра ARMv7-M (Cortex-M3). В корпусе LQFP64. Трёхкоординатный датчик ускорения. Цветной графический дисплей 128x128 точек. Кнопка, USB-интерфейс, звукоизлучатель, светодиоды, площадки для подключения устройств расширения. Встроенный JTAG отладчик с подключением к ПК через USB. Версия OpenOCD из репозитория поддерживает встроенный отладчик под именем rlink. Если отладка на реальном железе не нужна, можно пойти другим путём и воспользоваться встроенными возможностями контроллера STM32 - загрузчиком через UART1.