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 ...
随机推荐
- 极速打包【shell版】
同步发表至 http://avenwu.github.io/2014/12/16/fast_apk_release/ 前言 前阵子无意间看到美团的技术文章,一口气读了几篇java.android相关的 ...
- swoole webSocket服务
socket.php <?php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = ); //监听WebSocket连接打开事件 (刚打开的时候会给客户端发送 ...
- python 迭代器模式
迭代器模式 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 迭代器模式属于行 ...
- 使用mui.js实现下拉刷新
闲聊: 最近因公司项目需求,小颖需要写一些html5页面,方便公司IOS和Android给APP中嵌套使用,其中需要实现拉下刷新功能,其实就是调用了一下mui.js就可以啦嘻嘻,下面跟着小颖一起来看看 ...
- ubuntu安装图形界面
命令行模式的Ubuntu16.04安装图形界面 apt-get update sudo apt-get install xinit sudo apt-get install gdm sudo apt- ...
- Intelij的idea和pycharm的使用
idea是一个很复杂但是要页很好使用的工具,其集成了很多功能,也觉定了其很多的快捷键,要在使用得过程中总结其好处. 1.psvm:public static void main(){ } 2 ...
- 6.29一个_rcv 面试题
#coding:utf-8 #2018-6-29 16:30:34 #类调用属性,属性没有,用__getatrr__魔法方法! #目的打印出 think different itcast class ...
- MSDN2001 快捷方式丢失的处理方法
1. C:\Windows\hh.exe,右键 - 发送快捷方式到桌面 2. 给快捷方式改名为:MSDN2001 3. 右键快捷方式 - 属性- 快捷方式选项卡中的目标填写: C:\Windows\ ...
- jquery-1.11.2.min.js
/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ !function(a,b){& ...
- Adobe Photoshop CS6简单的破解
由于网站的页面布局和素材准备等等需要用到Photoshop,所以下载了个 Photoshop CS6,写这份破解文档的大佬感觉写的很复杂,看了让人头疼,乱搞中突然发现一个方法可以很快的进行破解操作,我 ...