|
Object Recognition and ZBUS-Based ADC Data Publishing in Zephyr RTOS
Настоящая работа является развитием решения, представленного в статье “Object Recognition and ADC using TIMER/PPI in Zephyr RTOS”.
Весь функционал, реализованный в предыдущей публикации, полностью сохранен.
Для более глубокого понимания контекста читателю рекомендуется ознакомиться с базовой статьей.
Данные, генерируемые датчиками или АЦП в одних потоках, часто требуется передавать в другие потоки приложения.
Эффективным инструментом для межпоточного взаимодействия в Zephyr RTOS является подсистема zbus,
которая реализует классический паттерн «публикация/подписка» (publish/subscribe).
В данной работе описан процесс публикации данных АЦП в канале zbus с последующим их получением потоками-подписчиками A и B.
Программный модуль разработан в составе клиента CoAP.
Результаты его работы представлены на рисунке 1.
На рисунке 2 приведен исходный код публикации данных АЦП.
Программа считывает аналоговое напряжение с двух каналов (channel_0 и channel_1),
после чего вычисляет для каждого из них минимальное (MIN), максимальное (MAX) и среднее (AVG) значения.
Полученные параметры записываются в структуру publish_data_adc.
Отправка структуры в канал zbus_name реализуется вызовом функции zbus_chan_pub().
В случае успешного завершения операции макросы LOG_INF() выводят значения АЦП в терминал VS Code».
Исходный код получения данных АЦП из канала zbus показан на рисунке 3.
Канал zbus определяется в строках 97–104 листинга, а его подписчиками служат элементы adc_sub_a и adc_sub_b (строки 106 и 107).
В строках 154–157 определяются два потока (А и В), использующие функции subscriber_a_thread и subscriber_b_thread, реализации которых приведены в строках 109–130 и 132–152 соответственно.
Объекты подписчиков необходимы внутри этих функций для управления поведением потоков.
Поскольку алгоритм работы функций идентичен, подробно рассмотрим логику функции subscriber_a_thread.
Алгоритм работы потока A:
1. Результат работы программы
Рисунок 1
2. Публикация данных АЦП в канал ZBUS
Рисунок 2
3. Получение данных АЦП потоками-подписчиками ZBUS
Рисунок 3
Проект скомпилирован с помощью nRF Connect SDK v3.2.4 и загружен на плату nRF7002-DK в операционной системе macOS Tahoe 26.3.
Проект можно загрузить coap_client_adc_zbus.zip .
Консультации через e-mail: veresov@jdesign.ru или телефон: +7 921-215-45-70.
|
