Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 嵌入式RTOS停止系统_C_Embedded_Rtos_Freertos - Fatal编程技术网

C 嵌入式RTOS停止系统

C 嵌入式RTOS停止系统,c,embedded,rtos,freertos,C,Embedded,Rtos,Freertos,我正在学习大脑皮层M0上的FreeRTOS。(同时,我也在学习大脑皮层…)。我对8位MCU有丰富的经验 我正在阅读关于FreeRTOS的新手教程,了解如何设置基本任务和空闲守护进程 我意识到我并不真正理解FreeRTOS是如何管理内核的底层计时机制的。这引出了一个大问题 当您想关闭设备时,关闭RTOS的理想方法是什么?不要让设备闲置,而是把你的MCU放在最深的地方(不管你想叫它什么) 在任务之间空闲似乎很简单,但关闭MCU并确保其保持关闭状态,RTOS内核不会触发中断或其他事件来唤醒MCU…?这

我正在学习大脑皮层M0上的FreeRTOS。(同时,我也在学习大脑皮层…)。我对8位MCU有丰富的经验

我正在阅读关于FreeRTOS的新手教程,了解如何设置基本任务和空闲守护进程

我意识到我并不真正理解FreeRTOS是如何管理内核的底层计时机制的。这引出了一个大问题

当您想关闭设备时,关闭RTOS的理想方法是什么?不要让设备闲置,而是把你的MCU放在最深的地方(不管你想叫它什么)

在任务之间空闲似乎很简单,但关闭MCU并确保其保持关闭状态,RTOS内核不会触发中断或其他事件来唤醒MCU…?

这是深度睡眠模式/断电模式,对于8位MCU,这在中的第159页ATmega128RFA1的数据表中(使用唤醒源)在此模式下,所有内部定时器均被禁用

在freeRTOS中,这被称为无痒空闲模式,cf

注意:如果eTaskConfirmSleepModeStatus()返回eNoTasksWaitingTimeout 从portSUPPRESS_TICKS_和_SLEEP()中调用时 微控制器可以无限期地保持深度睡眠状态。 eTaskConfirmSleepModeStatus()将仅返回eNoTasksWaitingTimeout 当下列条件为真时:

  • 没有使用软件计时器,因此调度器在将来的任何时候都不会执行计时器回调函数

  • 所有应用程序任务要么处于挂起状态,要么处于无限超时的阻塞状态(超时值为) portMAX_延迟),因此调度程序不会将任务转移出去 在将来的任何固定时间对被阻止状态的更改

  • 为避免争用情况,RTOS调度程序在 调用portSUPPRESS_TICKS_和_SLEEP(),并在 portSUPPRESS_TICKS_和_SLEEP()完成。这确保应用程序 在微控制器退出低功耗时,无法执行任务 state和portSUPPRESS_TICKS_和_SLEEP()正在完成其执行。 此外,端口抑制_TICKS_和_SLEEP()是必要的 函数在勾号源之间创建一个小的临界截面 被停止,微控制器进入睡眠状态。 应从该临界状态调用eTaskConfirmSleepModeStatus() 节

    现在所有GCC、IAR和Keil ARM Cortex-M3和ARM Cortex-M4端口 提供默认的portSUPPRESS_TICKS_和_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的许多定时器/计数器。问题是,有那么深的sleep只有在大多数定时器都被禁用的情况下才有可能实现,而你必须在不破坏覆盖的contiki os的情况下禁用它们……我甚至还没到那里!我只是昨晚躺在床上,想着我不知道如何启动RTOS。这一个很突出。你在新手教程中从未见过这种情况。这是一些评论使用SysTick on Cortex的FreeRTOS在无滴答模式下的ary。我必须消化这一点:这是关于如何在“旧”CMSIS-RTOS API中处理这一问题的评论:它可能没有太大变化……您是否考虑过简单地禁用驱动FreeRTOS滴答的计时器中断?