以下基础知识转载自正点原子PDF资料。

前面例子 中创建的任务大部份时间都处于阻塞态。这种状态下所有的任务都不可运行,
所以也不能被调度器选中。
但处理器总是需要代码来执行——所以至少要有一个任务处于运行态。为了保证这
一点,当调用 vTaskStartScheduler()时,调度器会自动创建一个空闲任务。空闲任务是
一个非常短小的循环——和最早的示例任务十分相似,总是可以运行。
空闲任务拥有最低优先级(优先级 0)以保证其不会妨碍具有更高优先级的应用任务
进入运行态——当然,没有任何限制说是不能把应用任务创建在与空闲任务相同的优先
级上;如果需要的话,你一样可以和空闲任务一起共享优先级。

运行在最低优先级可以保证一旦有更高优先级的任务进入就绪态,空闲任务就会立即切出运行态。 
空闲任务钩子函数
通过空闲任务钩子函数(或称回调, hook, or call-back),可以直接在空闲任务中添
加应用程序相关的功能。空闲任务钩子函数会被空闲任务每循环一次就自动调用一次。
通常空闲任务钩子函数被用于:
 执行低优先级,后台或需要不停处理的功能代码。
 测试出系统处理裕量(空闲任务只会在所有其它任务都不运行时才有机会执行,所
以测量出空闲任务占用的处理时间就可以清楚的知道系统有多少富余的处理时
间)。
 将处理器配置到低功耗模式——提供一种自动省电方法,使得在没有任何应用功能
需要处理的时候,系统自动进入省电模式。

空闲任务钩子函数的实现限制
空闲任务钩子函数必须遵从以下规则
1. 绝不能阻塞或挂起。空闲任务只会在其它任务都不运行时才会被执行(除非有应用任
务共享空闲任务优先级)。以任何方式阻塞空闲任务都可能导致没有任务能够进入
运行态!
2. 如果应用程序用到了 vTaskDelete() API 函数,则空闲钩子函数必须能够尽快返回。
因为在任务被删除后,空闲任务负责回收内核资源。如果空闲任务一直运行在钩
子函数中,则无法进行回收工作。

调用了带阻塞性质的 vTaskDelay() API 函数,会产生大量的空闲时间——在
这期间空闲任务会得到执行,因为两个应用任务均处于阻塞态。本例通过空闲钩子函数
来使用这些空间时间。具体源代码参见程序清单 18。

创建任务可以有静态和动态之分,但是静态创建需要开启一个宏,并且需要自己提供堆栈,一般用数组实现,这种方式一般不使用,我们通常使用动态创建的方式:

FreeRtos——空闲任务与空闲任务钩子函数的更多相关文章

  1. freertos的钩子函数

    在main中添加: /** * @brief FreeRTOS 内存分配失败钩子函数 */ void vApplicationMallocFailedHook(void) { taskDISABLE_ ...

  2. HOOK钩子 - 钩子函数说明

    翻译参考自MaybeHelios的blog: http://blog.csdn.net/maybehelios/ 通过SetWindowsHookEx方法安装钩子,该函数指定处理拦截消息的钩子函数(回 ...

  3. UCOSIII钩子函数

    OSIdleTaskHook 空闲任务调用这个函数,可以用来让CPU进入低功耗模式 void OSIdleTaskHook (void) { #if OS_CFG_APP_HOOKS_EN > ...

  4. ucosIII学习笔记——钩子函数

    一开始听见钩子函数感觉很莫名其妙,更不知道它有何作用,这是第一篇博客,也是学习ucosIII操作系统的一个开始吧. 在系统中有开发者自己创建的任务也有系统内部任务 ,UCOSIII中有五个系统任务,分 ...

  5. Vue2.X的路由管理记录之 钩子函数(切割流水线)

    $route可以在子组件任何地方调用,代表当前路由对象,这个属性是只读的,里面的属性是 immutable(不可变) 的,不过你可以 watch(监测变化) 它. 导航和钩子函数: 导航:路由正在发生 ...

  6. 【Mocha.js 101】钩子函数

    前情提要 在上一篇文章<[Mocha.js 101]同步.异步与 Promise>中,我们学会了如何对同步方法.异步回调方法以及 Promise 进行测试. 在本篇文章中,我们将了解到 M ...

  7. wordpress钩子和钩子函数

    ccc,看了很多博客,无法理解,还是自己来写吧. wordpress 在wordpress中有很多钩子,还有很多钩子函数,在什么地方用什么钩子,用什么钩子函数, 需要明白两个问题: 1:什么是钩子,钩 ...

  8. 使用PreTranslateMessage替代钩子函数处理键盘消息

    2002年左右,我所在公司在开发基于H.323的VoIP电话系统(用了以色列一家公司的库,具体名字忘记了). 去电信科技研究院测试系统,同事发现处理键盘消息总有一些莫名其妙的问题,比如延迟或异常. 我 ...

  9. 10.PHP内核探索:Apache运行与钩子函数

    Apache是目前世界上使用最为广泛的一种Web Server,它以跨平台.高效和稳定而闻名.按照去年官方统计的数据,Apache服务器的装机量占该市场60%以上的份额.尤其是在 X(Unix/Lin ...

随机推荐

  1. Windows之权限的继承性 累加性 优先性 交叉性及四项基本原则

    Windows NT以后的文件,及文件夹共享设置有以下特性:继承性.累加性.优先性.交叉性.     继承性是说下级的目录在没有经过重新设置之前,是拥有上一级目录权限设置的.这里还有一种情况要说明一下 ...

  2. 第三章 线程安全的DateFormat工具类

    1.使用threadLocal包装DateFormat(太复杂,不推荐) 2.使用org.apache.commons.lang3.time.DateFormatUtils下的方法(推荐) DateF ...

  3. Linux 查看当前时间和修改系统时间

    一.查看和修改Linux的时区 1. 查看当前时区 命令: date -R 2. 修改设置Linux服务器时区 方法 A 命令 : tzselect 方法 B 仅限于RedHat Linux 和 Ce ...

  4. text-overflow样式属性值ellipsis的用法

            一.div标签中使用text-overflow样式属性值ellipsis的方法: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1. ...

  5. 屏幕实时显示键盘鼠标操作软件keycastow,适合做视频教程

    屏幕实时显示键盘鼠标操作软件keycastow,适合做视频教程 学习了:https://www.52pojie.cn/thread-535154-1-1.html 进行键盘按键的屏幕实时显示:

  6. HYSBZ 1012 最大数maxnumber

    思路:在单调队列不更新列首.由于查询区间大小不确定,所以不能保证下次是否还用到它 #include <cstdio> #include <cstring> #include & ...

  7. Android studio DrawerLayout

    网上开源项目地址:https://github.com/ikimuhendis/LDrawer 效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQW ...

  8. sublime text3 3176激活码

    sublime text3 3176激活码   改host文件 #sublime 127.0.0.1 license.sublimehq.com 127.0.0.1 45.55.255.55 127. ...

  9. javaSE知识点汇总

    Java基础知识精华部分   写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言 ...

  10. Wait--使用sys.dm_io_virtual_file_stats来查看IO延迟

    /*============================================================================ File: VirtualFileStat ...