我在FreeRTOS的M0上学习。(同时,我也在学习皮质.)我对8位MCU有丰富的经验。
我正在学习有关FreeRTOS的新手教程,并且了解设置基本任务和空闲守护进程。
我意识到我并不真正理解FreeRTOS正在做什么来管理内核的底层计时机制。这就引出了一个大问题。
当你想关闭你的设备时,关闭实时操作系统的理想方法是什么?不要把设备闲置,而是把你的MCU放到最深邃的地方(不管你怎么称呼它)。
在任务之间空闲似乎很琐碎,但是关闭MCU并确保它保持不动,而RTOS内核不会触发中断或其他什么东西来唤醒MCU备份.?
发布于 2018-01-19 19:12:18
这是深度睡眠模式/断电模式,对于8位单片机来说,这是在ATmega128RFA1的数据表中,在Datasheet.pdf中的第159页ff中(有唤醒源),在这种模式下,所有内部计时器都被禁用。
在freeRTOS中,这被称为无痒空闲模式( cf https://www.freertos.org/low-power-tickless-rtos.html )
注意:如果eTaskConfirmSleepModeStatus()在从portSUPPRESS_TICKS_AND_SLEEP()内部调用它时返回eNoTasksWaitingTimeout,那么微控制器可以无限期地处于深度睡眠状态。只有在下列条件为真时,eTaskConfirmSleepModeStatus()才会返回eNoTasksWaitingTimeout:
为了避免竞争条件,RTOS调度程序在调用portSUPPRESS_TICKS_AND_SLEEP()之前被挂起,并在portSUPPRESS_TICKS_AND_SLEEP()完成时继续运行。这确保应用程序任务不能在退出其低功耗状态的微控制器和完成其执行的portSUPPRESS_TICKS_AND_SLEEP()之间执行。此外,portSUPPRESS_TICKS_AND_SLEEP()函数必须在被停止的滴答源和进入睡眠状态的微控制器之间创建一个小的临界部分。应该从这个关键部分调用eTaskConfirmSleepModeStatus()。
所有GCC、IAR和Keil ARM Cortex-M3和ARM Cortex-M4端口现在都提供了默认的portSUPPRESS_TICKS_AND_SLEEP()实现。有关使用ARM Cortex-M实现的重要信息可在ARM Cortex-M MCU的低功耗特性页面上提供。
因此,在freeRTOS中,调用无痒空闲模式相当于深度睡眠或停电。可能你得手动关闭皮层的内部定时器..。
在Contiki操作系统下,ATmega128RFA1单片机在电源上出现了一些问题。
https://stackoverflow.com/questions/48345800
复制相似问题