你好社区,
我们正在使用
STM32WL V1.2.0 开发基于示例应用程序“LoRaWAN_End_Node_FreeRTOS”的应用程序。
威廉希尔官方网站
板:Nucleo-WL55JC1。示例应用程序有效。
然而,一旦我们在线程中添加函数“osDelay(2000)”,应用程序就会卡在 tasks.c 的第 2581 行:
- configASSERT( ( xtickCount + xTicksToJump ) <= xNextTaskUnblockTime );
复现步骤: LoRaWAN_End_Node_FreeRTOS, lora_app.c, line 439: 添加代码:
- APP_LOG(TS_ON, VLEVEL_M, "before osDelay(2000)rn");
- osDelay(2000);
- APP_LOG(TS_ON, VLEVEL_M, "after osDelay(2000)rn");
我们怀疑 ticks 没有正确更新,因此在从睡眠中醒来后,configASSERT() 被命中,因为系统认为它错过了 xNextTaskUnblockTime。
使用 FreeRTOS 计时器 osTimerNew()、osTimerStart() 时,会发生同样的情况。原始示例应用程序既不使用 osDelay() 也不使用 osTimerNew(),而只使用 osThreadFlagsWait/Set() 函数,因此工作正常。
FreeRTOS 配置:与示例应用程序一样,最值得注意的是 configUSE_TICKLESS_IDLE = 1。
任何想法可能是错的?