【问题标题】:Embedded RTOS Stop System嵌入式 RTOS 停止系统
【发布时间】:2018-06-28 23:19:48
【问题描述】:

我正在 Cortex M0 上学习 FreeRTOS。 (同时,我也在学习 Cortex……)。我在 8 位 MCU 方面拥有丰富的经验。

我正在阅读有关 FreeRTOS 的新手教程,并且了解设置基本任务和空闲守护程序。

我意识到我并不真正了解 FreeRTOS 正在做什么来管理内核的底层计时机制。这就引出了一个大问题……

当您想关闭设备时,关闭 RTOS 的理想方法是什么?不要让设备闲置,而是将你的 MCU 置于最深的 OFF 状态(无论你想怎么称呼它)。

在任务之间闲置似乎微不足道,但是关闭 MCU 并确保它保持关闭状态,并且 RTOS 内核不会触发中断或其他东西来唤醒 MCU...?

【问题讨论】:

  • 您是否考虑过简单地禁用驱动 FreeRTOS 滴答声的定时器中断?

标签: c embedded rtos freertos


【解决方案1】:

这是深度睡眠模式/断电模式,对于 8 位 MCU,这在 ATmega128RFA1 的数据表中,位于 http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-8266-MCU_Wireless-ATmega128RFA1_Datasheet.pdf 的第 159 页 ff 中(带有唤醒源)此模式所有内部定时器都被禁用

在 freeRTOS 中,这被命名为 Tickless Idle Mode,参见 https://www.freertos.org/low-power-tickless-rtos.html

注意:如果 eTaskConfirmSleepModeStatus() 返回 eNoTasksWaitingTimeout 当从 portSUPPRESS_TICKS_AND_SLEEP() 中调用它时, 微控制器可以无限期地保持在深度睡眠状态。 eTaskConfirmSleepModeStatus() 只会返回 eNoTasksWaitingTimeout 当满足以下条件时:

  1. 没有使用软件定时器,因此调度程序在未来的任何时间都不会执行定时器回调函数。

  2. 所有应用程序任务要么处于暂停状态,要么处于无限超时的阻塞状态(超时值为 portMAX_DELAY),因此调度程序不会因为将任务转移出去 未来任何固定时间的 Blocked 状态。

为避免竞争条件,RTOS 调度程序在之前暂停 portSUPPRESS_TICKS_AND_SLEEP() 被调用,并在 portSUPPRESS_TICKS_AND_SLEEP() 完成。这确保了应用 任务无法在退出其低功耗的微控制器之间执行 state 和 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 OS 中关闭 ATmega128RFA1 MCU 时遇到一些问题 ...

【讨论】:

  • 是的,我正在 Cortex M0 上解决这个问题。有一个 SysTick 中断,我认为它是 FreeRTOS 的时钟。这取决于您的端口。您会喜欢在 Cortex 上为供应商移植的 FreeRTOS 提供一个抽象层,因此您不仅需要弄清楚 FreeRTOS,您还可以学习抽象!没有关于 CMSIS-RTOS 的文档,如何优雅地关闭服务......从 8 位开始的痛苦的东西。这似乎是一件微不足道的事情,但它确实触及了 RTOS 的核心......
  • 这在 Contiki 中类似。 contiki 使用了许多 MCU 的定时器/计数器。问题是只有在这些计时器中的大多数都被禁用并且您必须禁用它们而不会使上层的 contiki os 崩溃时才能进行深度睡眠...
  • 我还没到呢!昨晚我只是躺在床上,想着我不知道的关于让 RTOS 运行的事情。这个突出了。在新手教程中你永远不会看到这种情况。
  • 这是 FreeRTOS 关于在 Cortex 上使用 SysTick 的无滴答模式的一些评论。我必须消化这个:freertos.org/low-power-ARM-cortex-rtos.html
  • 这是关于如何在“旧”中处理的评论——CMSIS-RTOS API:keil.com/pack/doc/CMSIS/RTOS/html/lowPower.html 它可能没有太大变化......
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 2015-12-27
  • 2010-09-08
  • 2017-01-07
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 2020-10-05
相关资源
最近更新 更多