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 ...
随机推荐
- 【转】JS获取浏览器可视区域的尺寸
from: http://www.xiaoboy.com/detail/1341545044.html 所谓可视区域是指能看得见的区域,即在浏览器中能看到页面的区域(高度与宽度).刚刚使用 docum ...
- Http 调用netty 服务,服务调用客户端,伪同步响应.ProtoBuf 解决粘包,半包问题.
实际情况是: 公司需要开发一个接口给新产品使用,需求如下 1.有一款硬件设备,客户用usb接上电脑就可以,但是此设备功能比较单一,所以开发一个服务器程序,辅助此设备业务功能 2.解决方案,使用Sock ...
- 使用Java提供的MXBean来监控jvm创建了哪些线程
MBean是一种JavaBean,MBean往往代表的是JMX中的一种可以被管理的资源.MBean会通过接口定义,给出这些资源的一些特定操作: 属性的读和写操作 可以被执行的操作 关于自己的描述信息 ...
- python3之文件操作
一 打开文件 根目录在d盘的文件名为‘学习资料.txt’的文件 a)绝对路径(最开始的,根目录文件)例: e:\学习资料.txt 相对路径 直接用文件名字 b)操作方式 只读 只 ...
- 查看,设置,设备的 竖屏-横屏模式 screen.orientation
<body> <div id="doc"></div> <div id="model"></div> ...
- Docker容器集群管理之Swarm
Docker容器集群管理主流方案 Swarm Docker公司自研发的集群管理系统. Kubernetes Google开源的一个容器集群管理系统,用于自动化部署.扩展和管理容器应用.也称为K8S ...
- 泡泡一分钟:A Multi-Position Joint Particle Filtering Method for Vehicle Localization in Urban Area
A Multi-Position Joint Particle Filtering Method for Vehicle Localization in Urban Area 城市车辆定位的多位置联合 ...
- select cast(round(12.5,2) as numeric(5,2))
http://www.jb51.net/article/74284.htm 解释: round()函数,是四舍五入用,第一个参数是我们要被操作的数据,第二个参数是设置小数四舍五入的精度. )--32. ...
- 在Ubuntu环境下安装eclipse
Eclipse运行需要Java环境,java环境的安装见https://www.cnblogs.com/Sabre/p/10349320.html,本文不再赘述. 1.下载eclipse eclips ...
- python中OrderedDict的使用
很多人认为python中的字典是无序的,因为它是按照hash来存储的,但是python中有个模块collections(英文,收集.集合),里面自带了一个子类 OrderedDict,实现了对字典对象 ...