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 ...
随机推荐
- C++ 智能指针六
/* 智能指针unique_ptr */ #include <iostream> #include <string> #include <memory> #incl ...
- Fedora 21 安装 Budgie Desktop
最新文章:Virson's Blog Budgie Desktop 是一款自由开源桌面,是 Evolve OS 的默认桌面,Evolve OS 是一款 OpenSUSE 的衍生系统.Budgie De ...
- linux下Ftp服务安装
安装vsftp 使用yum命令安装vsftp #yum install vsftpd -y 如果yum安装不成功,可以到 http://pkgs.org/centos-6/centos-x86_64/ ...
- DedeCMS中channelartlist自增参数global.itemindex
在 dede:channelartlist 标签下,使用: {dede:global.itemindex runphp='yes'} {/dede:global.itemindex} dede:cha ...
- 使用 wondershaper 在 Linux 中限制网络带宽使用
wondershaper 实际上是一个 shell 脚本,它使用 tc 来定义流量调整命令,使用 QoS 来处理特定的网络接口.外发流量通过放在不同优先级的队列中,达到限制传出流量速率的目的:而传入流 ...
- yum安装VirtualBox
参考官方文档: https://www.virtualbox.org/wiki/Linux_Downloads 配置yum源: vim /etc/yum.repos.d/virtualbox.repo ...
- kettle spoon中“表输入”到“表输出”的乱码问题
数据库中的数据在不同的数据库中转换来装换去,由于不同库可能使用了不同的字符集,所以可能导致结果数据乱码问题.此次是在一个作业中跑数据,跑完数据前台数据显示出现乱码,检查了作业中的多有中间过程表,包括表 ...
- 10.12Django form表单
2018-10-12 15:24:23 From表单参考连接: https://www.cnblogs.com/yuanchenqi/articles/7614921.html 新增了ModelFor ...
- F - Unix ls
The computer company you work for is introducing a brand new computer line and is developing a new U ...
- JQuery EasyUI Layout 在from布局自适应窗口大小
在JQuery EasyUI中,如果直接在form上布局时当窗口大小调整布局不会改变,将布局应用于body时中间隔着一个form,横竖不好弄. 网上有多个解决方案,一般都是写代码,在窗口大小改变时设置 ...