Давайте загрузим программу без ОС на x86 — это вам может понадобиться, например, при написании ОС. Для загрузки будем использовать grub и Multiboot. Multiboot — открытый стандарт, который описывает как bootloader может загрузить ОС на x86.
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
Во встраиваемых системах часто для экономии памяти приходится использовать битовые операции, например для реализации флага какого-либо события. Далее рассмотрен удобный способ работы с битами на макросах.
Получение следующего элемента связанного списка из структуры, на которую указывает связанный список
Иногда бывает ситуация когда мы имеем адрес элемента структуры и есть необходимость получить адрес структуры, в которой находится данный элемент. Такая ситуация имеет место например, когда мы получаем в очереди из связанных списков адрес следующего элемента связанного списка, который в свою очередь является еще и элементом структуры, адрес которой нам необходимо узнать.