Давайте загрузим программу без ОС на x86 — это вам может понадобиться, например, при написании ОС. Для загрузки будем использовать grub и Multiboot. Multiboot — открытый стандарт, который описывает как bootloader может загрузить ОС на x86.
3 способа перенаправить std::cout (iostream, streambuf, cout, IAR, __write)
Часто, работая с микроконтроллерами на С++, приходится изменять вывод std::cout. Например направить его в USART, на дисплей или просто в буфер. В данной статье будет описано 3 способа изменения вывода — два универсальных и один для IAR.
makefile для ARM cortex-m3 на простом примере, часть 2
На примере makefile для STM32L покажем как писать makefile для ARM cortex-m3.
makefile для ARM cortex-m3 на простом примере, часть 1
На примере makefile для STM32L, покажем как писать makefile для ARM cortex-m3.
Modbus RTU Server (Slave)
Довольно часто программисту встраиваемых систем приходится работать с протоколом Modbus RTU или Modbus через Ethernet. Это клиент-серверный протокол. На встраиваемом устройстве может работать как клиент (шлет запросы), так и сервер (отвечает на запросы).
Далее приведено описание моей реализации modbus сервера (slave) для микроконтроллеров (в принципе ее можно использовать и на ПК).
assert_param stm32
При отладке программы очень удобно для вывода сообщений об той или иной ситуации, иметь универсальную функцию, которая позволяла бы выводить сообщение об ошибке, номер строки и файл в котором эта ошибка возникла. Для этого, в библиотеке периферии от ST, используется assert_param.
CRC16 для Modbus RTU — табличный метод
В Modbus RTU для проверки целостности сообщения применяется алгоритм контрольной суммы CRC16 (циклический избыточный код) с полиномом 0xA001. Далее приведен табличный метод расчета CRC16 на C.
volatile и зависания
Ключевое слово volatile – это спецификатор, применяемый при объявлении переменной. Он сообщает компилятору, что значение переменной может изменяться в любой момент – без какого-либо действия со стороны кода, который компилятор обнаруживает поблизости.
Битовые операции C
Во встраиваемых системах часто для экономии памяти приходится использовать битовые операции, например для реализации флага какого-либо события. Далее рассмотрен удобный способ работы с битами на макросах.
Область видимости и внешние переменные
Полезно помнить о классах памяти переменных — auto, register, static, extern — и их области видимости.