FreeRTOS-SysTick和Tickless睡眠

时间:2018-07-14 11:31:08

标签: freertos

我的OS实现在EFM32GG-Mcu上使用FreeRTOS V9.0.0。 我使用CortexM-Systick计时器进行滴答中断(默认为FreeRTOS)。

我现在确实更改为configUSE_TICKLESS_IDLE == 1,并且正在测试vPortSuppressTicksAndSleep()的默认实现(弱)

此例程重新配置xExpectedIdleTime的操纵杆计时器,而不是选定的滴答速度并进入睡眠状态。

1。)声明

如果xExpectedIdleTime(WFI)之后使用皮质M操纵杆进行唤醒中断(由内部HFRCO(替代ext HFXO)提供时钟),则最大睡眠状态将为睡眠模式1(emSleep1),这只会停止CPU,但不会停止HF时钟。

  

此声明是否正确?如果不正确的话。

     

此例程是否实际上已进入睡眠模式1?还是实际上发生了什么?

此外,我使用电源管理逻辑(软件单元)来跟踪正在进行的活动并处理最大睡眠状态。

示例:

如果rtos线程,rtos计时器等处于活动状态,我打算使用RTOS无滴答模式告诉我有多少滴答(xExpectedIdleTime)我可以进入能量模式1(仅停止cpu)。

如果逻辑发现每个线程都处于挂起状态,它将检查正在进行的硬件处理并为我提供新的当前最大睡眠状态(如果没有HF外设处于活动状态,则其为em2,如果没有LF外设处于活动状态,则为em3,如果没有ULF外设处于活动状态,其em4(完全停止)。

如果不使用Cortex-M systick计时器,而使用我自己的滴答计时器(ULF的RtcLE),而不是使用FreeRTOS在内部设置所有内容并自行滴答,这对我来说会容易得多。 FreeRTOS的API可以调用rtos并说“ Tick Interrupt Happend,做你的魔术”。

2。)问题

是否可以将FreeRTOS配置为设置tick_handling并等待用户(我)在发生滴答声时告诉它?

0 个答案:

没有答案