Size: a a a

2021 August 02

VB

Vlad Baida in Embedded Group
Всем привет. У меня тут происходит какая-то непонятная для меня магия, мб кто-то сталкивался с подобным.
Есть программный стек для работы по зигби - ZBOSS. Использую его на nrf52840 DK.
У стека есть функция
zb_bdb_reset_via_local_action(0);

, которая должна послать сигнал по зигби о том, что девайс уходит из сети И сгенерировать сигнал
ZB_ZDO_SIGNAL_LEAVE

внутри самого стека. Этот сигнал внутри стека попадает в пользовательскую функцию
zboss_signal_handler

, которая служит для реагирования программы на всякие внутренние события в стеке. (Функция чёт типа коллбека, то есть она пишется пользователем стека, но её название должно быть именно таким, ибо она вызвается с уже скомпилированного кода стека).

Проблема в том, что если я просто вешаю вызов
zb_bdb_reset_via_local_action(0);

при нажатии на кнопку, то девайс из сети выходит (я вижу это со стороны координатора), но сигнал
ZB_ZDO_SIGNAL_LEAVE

не генерируется и обработать это событие я не могу.
По началу я думал просто выходить и
источник

VB

Vlad Baida in Embedded Group
Класс, ограничение по длине сообщения что ли...
А я столько писал)
источник

VB

Vlad Baida in Embedded Group
...По началу я думал просто выходить из сети и по задержке таймера делать софт ресет ядра (кортекс), чтоб просто переподключаться заново, и это работало.
Но, о чудо, оказалось, что в таком случае сигнал
ZB_ZDO_SIGNAL_LEAVE
попадает в обработчик сигналов перед ресетом.

Сейчас у меня всё работает так, как на скриншоте. zigbee_reset вызывается при нажатии на кнопку, а reset_func вызывается таймером. При таком раскладе сигнал
ZB_ZDO_SIGNAL_LEAVE
приходит и я уже внутри обработчика инициализирую переподключение к сети.

Ещё обратил внимание, что без наличия __DSB() в reset_func(), сигнал приходит не постоянно, а через раз 🤪🤪🤪

Я просто не понимаю почему так происходит)
источник

VB

Vlad Baida in Embedded Group
То есть наличие инициализации таймера после вызова функции zb_bdb_reset_via_local_action влияет на то, попадёт ли сигнал в обработчик (или вызовется ли обработчик вообще, тут хз)
источник

VB

Vlad Baida in Embedded Group
Как так-то?
источник

LZ

Leonid Zaliubovskii in Embedded Group
Поздравляю, ты открыл для себя барьеры синхронизации. Похоже пришло время прочитать в документации Арма зачем они нужны и что такое реордеринг инструкций, как мне думается
источник

VB

Vlad Baida in Embedded Group
благодарю
источник

M

Maxim in Embedded Group
Версия сдк какая?
источник

И

Игорь in Embedded Group
Сгенерил проект в Кубе для эклипса. Не подключает автоматом библиотеку для uart. Сам прописал в patchs and symbols, но все равно не помогает
источник

VB

Vlad Baida in Embedded Group
4.1.0
источник

VB

Vlad Baida in Embedded Group
nRF5_SDK_for_Thread_and_Zigbee_v4.1.0_32ce5f8
источник

M

Maxim in Embedded Group
Он глючный, там стопицот тыщ багов, которые в дальнейшем будут активно препятствовать созданию прошивок под что-либо сложнее лампочки
источник

VB

Vlad Baida in Embedded Group
ну мой костыль с таймером пока не подводит 😂
источник

VB

Vlad Baida in Embedded Group
В принципе от девайса ничего сложнее передачи инфы про вес не требуется
источник

VB

Vlad Baida in Embedded Group
чисто тензодатчик + зигби
источник

LM

Lenar Mahmutov in Embedded Group
О прикольно . А я nvic system reset вызывал сразу после Лива
источник

VB

Vlad Baida in Embedded Group
вот я в гитхабе нашёл код, где автор ресетает. Начал так же делать и сразу заметил, что перед ресетом таки сигнал в хендлер прилетает)
источник

LM

Lenar Mahmutov in Embedded Group
Уппсс
источник

VB

Vlad Baida in Embedded Group
о
источник

VB

Vlad Baida in Embedded Group
а это твой код)
источник