Embedded 神奇壁虎;freeRTOS:无滴答模式下的断言

Embedded 神奇壁虎;freeRTOS:无滴答模式下的断言,embedded,microcontroller,freertos,Embedded,Microcontroller,Freertos,我使用的是EFM32WG360单片机。我正在使用Gecko5.0.0SDK和FreeRTOS9.0.0以及无滴答模式(演示2)。这意味着我正在使用RTC来实现无滴答 我没有修改演示的低功耗管理RTC.c,除了 将RTC时钟修改为LFRCO 定时器频率为4Khz(而不是4096Hz) 无测试计时器 我看到的是,RTC比较在以下代码中设置为某个较大的值(第304行): ulReloadValueForOneTick的值为4,而ulCountAfterSleep的值为13 其他变量: xMod

我使用的是EFM32WG360单片机。我正在使用Gecko5.0.0SDK和FreeRTOS9.0.0以及无滴答模式(演示2)。这意味着我正在使用RTC来实现无滴答

我没有修改演示的低功耗管理RTC.c,除了

  • 将RTC时钟修改为LFRCO
  • 定时器频率为4Khz(而不是4096Hz)
  • 无测试计时器

我看到的是,RTC比较在以下代码中设置为某个较大的值(第304行):

ulReloadValueForOneTick的值为4,而ulCountAfterSleep的值为13

其他变量:

  • xModifiableIdleTime是4
  • ulReloadValue(修改前)为3
接下来发生的是,在下一个vPortSuppressTicksAndSleep函数条目中,ULCountBeforeSeep(第225行)获取一些较大的值,然后vTaskStepTick中的断言失败

你知道怎么会这样吗?RTC不能及时中断或提前中断吗


我将非常感谢您的帮助

您是否理解(4-13)在结果未签名时会导致“一些较大的值”?是的,当然。这就是为什么我写下了它们的值…你知道(4-13)会在结果未签名时产生“一些大值”吗?是的,当然。这就是为什么我写下了他们的价值观。。。
//#define lpINCLUDE_TEST_TIMER  1
if( ulTickFlag != pdFALSE )
{
    /* The tick interrupt has already executed, although because this
    function is called with the scheduler suspended the actual tick
    processing will not occur until after this function has exited.
    Reset the reload value with whatever remains of this tick period. */
    ulReloadValue = ulReloadValueForOneTick - ulCountAfterSleep;
    RTC_CompareSet( 0, ulReloadValue );