10.0-uC/OS-III任务管理
1.实时应用中一般将工作拆分为多个任务,每个任务都需要是可靠的。任务(也叫做线程)是简单的程序。单CPU中,在任何时刻只能是一个任务被执行。
2.uC/OS-III支持多任务且对任务数量没有限制, 任务数仅取决于处理器内存的大小(RAM)。多任务调度是任务间占用CPU的过程。
3.任务用于监控输入、更新输出、计算、循环控制、显示、读按钮和键盘、 与其它系统交流等。
4.任务看起来像 C函数。有 2种类型的任务:运行一次(列表 5-1)和无限循环( 列表5-2)。 在大多数嵌入式系统中, 任务通常是无限循环的。任务不能像C函数那样,它是不能return的。
5.只运行一次的任务结束时必须通过调用OSTaskDel()删除自己。这样可以使系统中的任务数减少。在任务体中,任务可以调用uC/OS-III提供的大部分函数帮助完成其所需要完成的功能。
6.在 uC/OS-III中,不管是 C语言函数还是调用汇编语言函数。该函数都用可能被多个任务同时调用。一个可重入的函数不含有静态变量以及全局变量除非被保护( uC/OS-III提供了这种保护机构)。
7.在嵌入式系统中通常使用无限循环的任务,因为应用中有很多需要重复的工作(例如,读取输入值、更新显示、控制操作等)。这是不同于 C函数的一个方面( C函数可以用 while(1)或 for(;;)实现相同的功能)。
8.任务可以延时一段时间(调用 OSTimeDly() 或 者OSTimeDlyHSM())。例如,应用中需要每 100ms扫描键盘一次。在这种情况下, 延时100ms然后检测键盘上是否有键被按下, 然后执行相应的操作。
同样的,任务等待的事件可以是以太网控制器发送的包。在这种情况下,任务会调用OS???Pend()函数(以这种形式定义的函数)。一旦包接收完成,任务根据包内容进行下一步操作。
值得注意的是,任务在等待事件时,它不会占用CPU。
9.uC/OS-III 需要通过调用函数 OSTaskCreate()创建任务。OSTaskCreate()函数的原型如下所示。
10.
(1).调用 OSTaskCreate()时,参数为:堆栈的基地址( p_stk_base),堆栈的增长限制,堆栈大小等。
(2).若 OSTaskCreate() 中的第 12 个参数设置 为OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, uC/OS-III将会初始化堆栈内容为全0。
(3).uC/OS-III将复制CPU寄存器内容并有序地存入任务堆栈的顶部。这使得上下文切换易于实现。
(4).堆栈指针SP存于任务的TCB中。
(5). TCB中其它的字段会被赋值:任务优先级、任务名、任务状态、内部消息队列、内部信号量等。
11.任务可以调用uC/OS-III提供的函数。特别的, 一个任务可以创建其它任务(调用 OSTaskCreate())、停止或者恢复其它任务(调用OSTaskSuspned()和OSTaskResume())、 提交信号量到其它任务、 发送消息到其它任务、 提供共享资源等。 换句话说, 任务不是只被限制于“ 等待事件”。
(1).任务最重要的部分是它的代码。 正如前面提到的, 任务的代码看起来像是个C函数,除了它实现无限循环的方式。另外,任务不允许有返回值。
(2).每个任务都需要被设定一个优先级。 uC/OS-III的工作是决定哪个任务应该占用 CPU。一般的, uC/OS-III选择就绪队列中优先级最高的任务运行。在uC/OS-III中,数值越小优先级越高。
(3).每个任务对CPU寄存器都会有自己设置。 如果一个任务被运行,那么它就会占用了实际的CPU。
(4).因为uC/OS-III是一个抢占式内核, 每个任务都需要有自己的堆栈空间。 堆栈驻留于RAM并经常用于保存变量、 函数、 嵌套的ISR地址等。
堆栈空间可以被分配为静态的 ( 在编译时分配)或者是动态的 ( 运行时分配)。定义静态的堆栈如下所示,定义是在任务之外的。
.注意“ ??? ” 是堆栈的大小,依赖于任务的需求。通过C编译器提供的堆管理功能( malloc())堆栈空间可以被动态分配。如下所示。 但是, 必须关注存储碎片。 多次创建和删除任务后, 内存可能有很多存储碎片而不足以再分配给任务了。在嵌入式系统中动态地分配堆栈是被允许的,但是,一旦堆栈被动态分配,它就不能被回收。换句话说, 对于有些不需要被删除的任务, 动态分配它们的堆栈是一种很好的解决方法。
(5). 任务也可以访问全局变量。 然而, 因为uC/OS-III是抢占式内核,所有必须注意多个任务同时访问全局变量的情况。幸运的是,uC/OS-III提供了一些功能管理这些共享资源如 ( 信号量、 mutex等)。
(6).任务也可以访问一个或多个IO设备(或者外设)。
10.0-uC/OS-III任务管理的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- uC/OS - III 移植 IAR平台
关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...
- vmware workstation 10.0.1 install mac os mavericks
由于项目当中有ios app开发,第一感觉就是mac开发环境会比较适合开发与调试(虽然linux.windows都有相应的oc开发环境). 由于我是用windows7搞.net开发的,所以其他系统接触 ...
- VMware15安装MAC(MAC OS 10.13)(OS X 10.14)原版可升级最新可解锁macOS Unlocker3.0(OS X 10.13)
目录树 1.1.2安装环境: 1.1.3所需资源: 1.1.4 Unlocker 3.0解锁 1.1.5 配置环境 1.1.6开始安装 1.1.7开启虚拟机进入MAC安装界面 1.1.8 macO ...
- 第一篇 HTML5打包APP之VMware15安装MAC(MAC OS 10.13)(OS X 10.14)原版可升级最新可解锁macOS Unlocker3.0(OS X 10.13)
1.1.2安装环境: 1.1.3所需资源: 1.1.4 Unlocker 3.0解锁 1.1.5 配置环境 1.1.6开始安装 1.1.7开启虚拟机进入MAC安装界面 1.1.8 macOS 10.1 ...
- uC/OS II原理分析及源码阅读(一)
uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...
- 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II
SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...
- iOS 10.0 更新点(开发者视角)
html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; padding: 0 ...
- uc/os任务创建
问题描述: uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...
- uC/OS 的任务调度解析 (转)
uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...
随机推荐
- ORA-00257:archiver error问题处理方法
原文链接:http://www.7747.net/database/201109/104615.html ORA-00257: archiver error. Connect internal onl ...
- TI开发环境下载资源
CCSV7.0 版本下载 http://processors.wiki.ti.com/index.php/Download_CCS IAR7.10 版本下载 https://www.iar.com/ ...
- springboot+shiro+redis(单机redis版)整合教程-续(添加动态角色权限控制)
相关教程: 1. springboot+shiro整合教程 2. springboot+shiro+redis(单机redis版)整合教程 3. springboot+shiro+redis(集群re ...
- [JS] Topic - Object.create vs new
故事背景 Ref: 你不知道的javascript之Object.create 和new区别 var Base = function () {} (1) var o1 = new Base(); (2 ...
- websql的使用/phonegap操作数据库 sqlite
对websql的常用操作进行了一个封装,项目是基于phonegap的,不过phonegap默认已经集成了数据库操作的插件,所以无需再配置什么,直接用就可以了: /** *数据库操作辅助类,定义对象.数 ...
- Fastjson 爆出远程代码执行高危漏洞,更新版本已修复
fastjson近日曝出代码执行漏洞,恶意用户可利用此漏洞进行远程代码执行,入侵服务器,漏洞评级为“高危”. 基本介绍fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器 ...
- [原]Jenkins(七)---jenkins项目编译测试发布由maven构建的web项目
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/533 ...
- [转]复制、移动和删除:cp, rm, mv
转自:http://www.cnblogs.com/benio/archive/2010/07/27/1785929.html 要复制文件,请使用cp(copy)命令.不过,cp命令的用途很多.除了单 ...
- (转)使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解
使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解 本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据.2)创建json数组和解析json数组 1. 创 ...
- js---手机端滑动进度条
最近做项目,有一个滑动音乐播放进度条的效果,但是使用input的 range 来做会出现一些问题,想了想还是用JS来写.直接上代码: <!doctype html> <html la ...