1. 空闲任务

空闲任务是UCOSIII创建的第一个任务

空闲任务是UCOSIII必须创建的

空闲任务优先级总是为OS_CFG_PRIO_MAK-1

空闲任务中不能调用任何可使空闲任务进入等待态的函数

#define OS_CFG_PRIO_MAX 64u /* Defines the maximum number of task priorities (see OS_PRIO data type) */

OS_IdleTaskInit(p_err); /* Initialize the Idle Task */

void  OS_IdleTaskInit (OS_ERR  *p_err)
{
#ifdef OS_SAFETY_CRITICAL
if (p_err == (OS_ERR *)0) {
OS_SAFETY_CRITICAL_EXCEPTION();
return;
}
#endif OSIdleTaskCtr = (OS_IDLE_CTR)0; OSTaskCreate((OS_TCB *)&OSIdleTaskTCB,
(CPU_CHAR *)((void *)"uC/OS-III Idle Task"),
(OS_TASK_PTR)OS_IdleTask,
(void *)0,
(OS_PRIO )(OS_CFG_PRIO_MAX - 1u),
(CPU_STK *)OSCfg_IdleTaskStkBasePtr,
(CPU_STK_SIZE)OSCfg_IdleTaskStkLimit,
(CPU_STK_SIZE)OSCfg_IdleTaskStkSize,
(OS_MSG_QTY )0u,
(OS_TICK )0u,
(void *)0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR | OS_OPT_TASK_NO_TLS),
(OS_ERR *)p_err);
} void OS_IdleTask (void *p_arg)
{
CPU_SR_ALLOC(); p_arg = p_arg; /* Prevent compiler warning for not using 'p_arg' */ while (DEF_ON) {
CPU_CRITICAL_ENTER();
OSIdleTaskCtr++;
#if OS_CFG_STAT_TASK_EN > 0u
OSStatTaskCtr++;
#endif
CPU_CRITICAL_EXIT(); OSIdleTaskHook(); /* Call user definable HOOK */
}
}

2. 时钟节拍任务

用来跟踪任务延时和任务等待超时

是UCOSIII必须创建的一个任务

任务优先级用宏OS_CFG_TICK_TASK_PRIO来定义

OS_PRIO const OSCfg_TickTaskPrio = (OS_PRIO)OS_CFG_TICK_TASK_PRIO;
#define OS_CFG_TICK_TASK_PRIO 1u /* Priority 时钟节拍任务,一般设置一个相对较高的优先级*/ OS_TickTaskInit(p_err); void OS_TickTaskInit (OS_ERR *p_err)
{
#ifdef OS_SAFETY_CRITICAL
if (p_err == (OS_ERR *)0) {
OS_SAFETY_CRITICAL_EXCEPTION();
return;
}
#endif OSTickCtr = (OS_TICK)0u; /* Clear the tick counter */ OSTickTaskTimeMax = (CPU_TS)0u; OS_TickListInit(); /* Initialize the tick list data structures */ if (OSCfg_TickTaskStkBasePtr == (CPU_STK *)0) {
*p_err = OS_ERR_TICK_STK_INVALID;
return;
} if (OSCfg_TickTaskStkSize < OSCfg_StkSizeMin) {
*p_err = OS_ERR_TICK_STK_SIZE_INVALID;
return;
} if (OSCfg_TickTaskPrio >= (OS_CFG_PRIO_MAX - 1u)) { /* Only one task at the 'Idle Task' priority */
*p_err = OS_ERR_TICK_PRIO_INVALID;
return;
} OSTaskCreate((OS_TCB *)&OSTickTaskTCB,
(CPU_CHAR *)((void *)"uC/OS-III Tick Task"),
(OS_TASK_PTR )OS_TickTask,
(void *)0,
(OS_PRIO )OSCfg_TickTaskPrio,
(CPU_STK *)OSCfg_TickTaskStkBasePtr,
(CPU_STK_SIZE)OSCfg_TickTaskStkLimit,
(CPU_STK_SIZE)OSCfg_TickTaskStkSize,
(OS_MSG_QTY )0u,
(OS_TICK )0u,
(void *)0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR | OS_OPT_TASK_NO_TLS),
(OS_ERR *)p_err);
}

3. 统计任务

可用来统计CPU的使用率、各个任务的CPU使用率和各任务的堆栈使用情况

默认情况下统计任务是不会创建的

创建过程:

  1. 将宏OS_CFG_STAT_TASK_EN置1
  2. 在main函数创建的一个任务里调用函数OSStatTaskCPUUsageInit()
  3. 优先级通过宏OS_CFG_STAT_TASK_PRIO来设置。一般设置OS_CFG_PRIO_MAX-2,也就是倒数第二个优先级
OS_PRIO const OSCfg_StatTaskPrio = (OS_PRIO)OS_CFG_STAT_TASK_PRIO;
#define OS_CFG_STAT_TASK_PRIO (OS_CFG_PRIO_MAX-2u) /* Priority 统计任务优先级*/ #if OS_CFG_STAT_TASK_EN > 0u
OSStatTaskCPUUsageInit(&err);
#endif

4. 定时任务

UCOSIII软件定时器功能,定时任务是可选的

创建过程:

  1. 将宏OS_CFG_TMR_EN设置为1
  2. 在OSInit()中将会调用函数OS_TmrInit()
  3. 优先级通过宏OS_CFG_TMR_TASK_PRIO定义。默认将定时器任务优先级设置为2
OS_PRIO const OSCfg_TmrTaskPrio = (OS_PRIO)OS_CFG_TMR_TASK_PRIO;
#define OS_CFG_TMR_TASK_PRIO 2u /* Priority of 'Timer Task' 定时任务优先级*/ #if OS_CFG_TMR_EN > 0u /* Initialize the Timer Manager module */
OS_TmrInit(p_err);
if (*p_err != OS_ERR_NONE) {
return;
}
#endif

5. 中断服务管理任务

当ISR(中断服务函数)调用UCOSIII提供的“post”函数时,要发送的数据和发送的目的地都会存入一个特别的缓冲队列中,当所有嵌套的ISR都执行完成以后UCOSIII会做任务切换,运行中断服务管理任务,该任务会把缓存队列中存放的信息重发给相应的任务

这样做的好处就是可以减少中断关闭的时间

创建过程:

  1. 将宏OS_CFG_ISR_POST_DEFERRED_EN置1
  2. 中断服务管理任务的优先级永远为0,不可更改

UCOSIII系统内部任务的更多相关文章

  1. 系统内部集成测试(System Integration Testing) SIT 用户验收测试(User Acceptance Testing)

    系统内部集成测试(System Integration Testing) SIT 用户验收测试(User Acceptance Testing) UAT SIT在前,UAT在后,UAT测完才可以上线

  2. Github 的系统内部都在用什么开源软件?

    有时候处理规模问题最好的办法就是让事情变得简单并尽你可能去避免出现这种情况.这是 GitHub 所采用的方法,林纳斯·托瓦兹(Linus Torvalds)在十年前开发了Git源代码控制工具,GitH ...

  3. Page9:结构分解以及系统内部稳定和BIBO稳定概念及其性质[Linear System Theory]

    内容包含系统能控性结构分解.系统能观测性结构分解以及系统结构规范分解原理,线性系统的内部稳定.BIBO稳定概念及其性质

  4. 【转】android使用File Explorer无法访问系统内部文件--不错

    原文网址:http://blog.csdn.net/yangqicong11/article/details/8747042 设备:Samsung GT-P3110 系统:Android 4.1.1 ...

  5. Android开发心得-使用File ExPlorer无法访问系统内部文件

    问题:本机在获得ROOT权限后,使用Eclipse自带的File Explorer访问/data/data下各APP的存储文件,均无法打开.更换另外一个设备后,情况正常.Sumsung的有些机型在获得 ...

  6. flink ---- 系统内部消息传递的exactly once语义

    At Most once,At Least once和Exactly once 在分布式系统中,组成系统的各个计算机是独立的.这些计算机有可能fail. 一个sender发送一条message到rec ...

  7. 深入理解Flink ---- 系统内部消息传递的exactly once语义

    At Most once,At Least once和Exactly once 在分布式系统中,组成系统的各个计算机是独立的.这些计算机有可能fail. 一个sender发送一条message到rec ...

  8. 在DOS命令中输入ipconfig /all,出现“该命令不是系统内部命令......”

    第一种情况:1.先去C:\Windows\System32下查找有没有 ipconfig.exe的执行文件,有的话说明系统文件没有丢失,否则要去网上下载一个 ipconfig.exe文件,并放到C:\ ...

  9. 【二代示波器教程】第14章 uCOS-III操作系统版本二代示波器实现

    第14章      uCOS-III操作系统版本二代示波器实现 本章教程为大家讲解uCOS-III操作系统版本的二代示波器实现.主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任 ...

随机推荐

  1. 解决用官方容器启动redmine无法插入中文字符的问题

    jiangzhaowei@kitking:/kitking/redmineIot$ sudo docker-compose up -d Creating network "redmineio ...

  2. F12修改html进行本地js操作页面元素

    F12修改html进行本地js操作页面元素

  3. sqlite3 读写锁

    转载:https://blog.csdn.net/u012218838/article/details/79362929(sqlite3 使用读写锁SRWLOCK例子) 转载:https://my.o ...

  4. Java基础 throw 抛出异常后,用try...catch捕获

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  5. Spark程序进行单元测试-使用scala

    Spark 中进行一些单元测试技巧:最近刚写了一点Spark上的单元测试,大概整理了一些 rdd测试 spark程序一般从集群中读取数据然后通过rdd进行转换,这其中涉及到集群,每次修改bug,上传到 ...

  6. MSYS2 编译环境配置

    博客转载自:https://medium.com/@fzubair/carnd-term2-gcc-setup-on-windows-287e1fd36845 2018/6/2 — mingw32/c ...

  7. 使用adb命令控制anroid手机

     adb工具即Android Debug Bridge(安卓调试桥) tools.它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互.在某些特殊的情况下进入不了系统或者需要自动化测试的时候, ...

  8. Tomcat一些说明

    嗯,昨天将有关JDK的知识稍微整理了一下,现在稍微整理一下有关Tomcat的! 1:Tomcat是什么? Tomcat是当今世界上使用最为广泛的.开源免费的Servlet/JSP容器,其主要功能是用于 ...

  9. 【神经网络与深度学习】【计算机视觉】SPPNet-引入空间金字塔池化改进RCNN

    转自: https://zhuanlan.zhihu.com/p/24774302?refer=xiaoleimlnote 继续总结一下RCNN系列.上篇RCNN- 将CNN引入目标检测的开山之作 介 ...

  10. spring的面试

    IOC IOC(Inversion Of Controll,控制反转)是一种设计思想,将原本在程序中手动创建对象的控制权,交由给Spring框架来管理.IOC容器是Spring用来实现IOC的载体,I ...