6 uCOS-II操作系统
6 uCOS-II操作系统

6
任务(task)
一个任务通常是一个无限的循环:
void mytask(void *pdata) {
do init while (1) {
do something; waiting; do something;
}
}
2019年7月4日1时36分
嵌入式系统概论
7
任务(task)
μC/OS-Ⅱ可以管理多达64个任务。
OSRdyTbl[prio>>3] |=OSMapTbl[prio & 0x07];
假设优先级为12——1100b
OSRdyGrp
|=0x02;
OSRdyTbl[1] |=0x10;
2019年7月4日1时36分
嵌入式系统概论
29
使任务脱离就绪态
将任务就绪表OSRdyTbl[prio>>3]相应元素 的相应位清零,而且当OSRdyTbl[prio>>3] 中的所有位都为零时,即全组任务中没有 一个进入就绪态时,OSRdyGrp的相应位才 为零。
2019年7月4日1时36分
嵌入式系统概论
8
中断处理
用户中断服务子程序框架:
1、保存全部CPU寄存器; 2、调用OSIntEnter或OSIntNesting直接加1; 3、执行用户代码做中断服务; 4、调用OSIntExit(); 5、恢复所有CPU寄存器; 6、执行中断返回指令;
2019年7月4日1时36分
全世界有数百种产品在 应用: 医疗器械 移动电话 路由器 工业控制 GPS 导航系统 智能仪器 更多
2019年7月4日1时36分
嵌入式系统概论
5
临界段(Critical Sections)
嵌入式实时操作系统uCOS-II(中文版)

嵌入式实时操作系统uCOS-II(中文版)第一章:范例在这一章里将提供三个范例来说明如何使用µC/OS-II。
笔者之所以在本书一开始就写这一章是为了让读者尽快开始使用µC/OS-II。
在开始讲述这些例子之前,笔者想先说明一些在这本书里的约定。
这些例子曾经用Borland C/C++ 编译器(V3.1)编译过,用选择项产生Intel/AMD80186处理器(大模式下编译)的代码。
这些代码实际上是在Intel Pentium II PC (300MHz)上运行和测试过,Intel Pentium II PC可以看成是特别快的80186。
笔者选择PC做为目标系统是由于以下几个原因:首先也是最为重要的,以PC做为目标系统比起以其他嵌入式环境,如评估板,仿真器等,更容易进行代码的测试,不用不断地烧写EPROM,不断地向EPROM仿真器中下载程序等等。
用户只需要简单地编译、链接和执行。
其次,使用Borland C/C++产生的80186的目标代码(实模式,在大模式下编译)与所有Intel、AMD、Cyrix公司的80x86 CPU兼容。
1.00 安装µC/OS-II本书附带一张软盘包括了所有我们讨论的源代码。
是假定读者在80x86,Pentium,或者Pentium-II处理器上运行DOS或Windows95。
至少需要5Mb硬盘空间来安装uC/OS-II。
请按照以下步骤安装:1.进入到DOS(或在Windows 95下打开DOS窗口)并且指定C:为默认驱动器。
2.将磁盘插入到A:驱动器。
3.键入 A:INSTALL 【drive】注意『drive』是读者想要将µC/OS-II安装的目标磁盘的盘符。
INSTALL.BAT 是一个DOS的批处理文件,位于磁盘的根目录下。
它会自动在读者指定的目标驱动器中建立\SOFTWARE目录并且将uCOS-II.EXE文件从A:驱动器复制到\SOFTWARE并且运行。
16.嵌入式操作系统uCOS-II

嵌套中断管理
嵌套层数可达255层
主要API
void OSInit(void); //系统初始化 // //启动操作系统
void OSStart(void);
任务管理
INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio); task:指向任务代码的指针; pdata:指向向任务传递参数的数据结构; ptos: 堆栈指针 prio: 优先级 INT8U OSTaskSuspend(INT8U prio); prio:指定要获取挂起的任务优先级 INT8U OSTaskResume(INT8U prio); prio指定要唤醒任务的优先级.
C/OS-II的主要特点
可移植性和可确定性
绝大部分代码用ANSI C编写 与处理器硬件相关的代码用汇编语言编写 移植条件 移植目标处理器要有硬件堆栈指针 CPU内容寄存器入栈,出栈指令 C编译器支持内嵌汇编或C可扩展,可连接汇编 模块 关中断,开中断可在C语言中实现
C/OS-II的主要特点(续1)
OS_ENTER_CRITICAL() OS_EXIT_CRITICAL() //关中断 //开中断
#define OS_ENTER_CRITICAL() { cpu_sr = INTS_OFF(); } #define OS_EXIT_CRITICAL() { if(cpu_sr == 0) INTS_ON(); }
开关中断的汇编语言程序段
INTS_OFF mrs r0, cpsr ; current CSR mov r1, r0 ; make a copy for masking orr r1, r1, #0xC0 ; mask off int bits msr CPSR_cxsf, r1 ; disable ints (IRQ and FIQ) and r0, r0, #0x80 ; return FIQ bit from original CSR mov pc,lr ; return INTS_ON mrs r0, cpsr ; current CSR bic r0, r0, #0xC0 ; mask on ints msr CPSR_cxsf, r0 ; enable ints (IRQ and FIQ) mov pc,lr ; return
ucOSII实时操作系统共41页

面向二十一世纪的嵌入式系统设计技术第五讲:ucOS/II 实时操作系统RTOS(一):ucOS/II2002 年 1 月任课教员:徐欣主讲教员:习勇国防科大电子科学与工程学院嵌入式系统开放研究小组博士博士1What is uC/OS? u: Micro C:controluC/OS : 适合于小的、控制器的操作系统小巧公开源代码,详细的注解可剥夺实时内核可移植性强多任务确定性2002/112美国人The Story of uC/OSJean Labrosse 1992 年编写的商业软件的昂贵应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等1998 年uC/OS-II ,目前的版本uCOS-II2002/11uC/OS-II V2.513嵌入式操作系统—uC/OS概要内核结构- 任务以及调度机制任务间通信uC/OS 的移植在PC 机上运行uC/OS2002/114—uC/OS任务task嵌入式操作系统典型的一个无限循环。
void mytask(void *pdata)for (;;) {do something;waiting;do something;支持64 个任务,每个任务一个特定的优先级。
优先级越高,数字越小系统占用了两个任务,空闲任务和统计任务。
2002/115嵌入式操作系统—uC/OS任务的数据结构—任务控制块任务控制块OS_tcb ,包括任务堆栈指针,状态,优先级,任务表位置,任务链表指针等。
所有的任务控制块分为两条链表,空闲链表和使用链表。
新任务TCB(1) TCB0 TCB1next pre(2)(3)OSTCBFreeList图4.3TCB的双向链表结构TCBn空2002/116任务控制块结构嵌入式操作系统—uC/OSStruct os_tcb {OS_STK*OSTCBStkPtr;struct os_tcb*OSTCBNext;struct os_tcb*OSTCBprev;OS_EVENT *OSTCBEventPtr;void *OSTCBMsg;INT16U OSTCBDly;INT8U OSTCBStat;INT8U OSTCBPrio;INT8U OSTCBX, OSTCBY, OSTCBBitX, OSTCBBitY; } OS_TCB2002/117任务的状态OSTCBStat运行,就绪,等待,挂起OSTCBStat低四位挂起队列邮箱信号量可以有多个准备就绪的任务,但一个时刻只有一个任务可以运行,OSHighRdy2002/118任务的调度--OSScheduC/OS 是占先式实时多任务内核,优先级最高的任务一旦准备就绪,则拥有所有权开始投入运行。
第7章 实时操作系统uCOS-Ⅱ

OSTCBPrev
OSTCBPrev
OSTCBPrev
OSTCBPrev
OSTCBPrev
图7-1 空任务列表
14
本节提要
C/OS-Ⅱ简介 2 C/OS-Ⅱ内核结构 3 4 5 6 7 C/OS-Ⅱ任务管理
1
C/OS-Ⅱ任务通信与同步 C/OS-Ⅱ中断与时间管理
C/OS-Ⅱ应用程序举例
4
C/OS的性能特点(二)
占先式(Preemptive) 多任务 C/OS-II可以管理64个任务,然而,目前这一版本保留8个给系 统。应用程序最多可以有56个任务 可确定性 全部 C/OS-II的函数调用与服务的执行时间具有可确定性 任务栈 每个任务有自己单独的栈, C/OS-II允许每个任务有不同的栈 空间,以便压低应用程序对RAM的需求。 系统服务 C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、 块大小固定的内存的申请与释放、时间相关函数等。 中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务 被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执 行,中断嵌套层数可达255层。 稳定性与可靠性
19
2.任务创建与删除
创建任务函数利用函数的调用参数为任务分配和初始化相 关的数据结构。首先初始化一个任务控制块,并通过任务控制 块把任务代码和任务堆栈关联起来形成一个完整的任务。 (1)任务创建 µC/OS-Ⅱ通过OSTaskCreate() 或 OSTaskCreateExt()来 建立任务。函数OSTaskCreate()的声明为:
11
Alternate Structure
void YourTask (void *pdata)
UCOSII操作系统课程设计

UCOSII操作系统课程设计一、课程目标知识目标:1. 理解UCOSII操作系统的基本原理和核心概念,包括任务管理、时间管理、通信与同步机制;2. 掌握UCOSII的移植方法和配置过程,学会在不同硬件平台上搭建UCOSII 操作系统环境;3. 学会使用UCOSII提供的API进行多任务编程,了解实时操作系统的任务调度和资源管理策略。
技能目标:1. 能够运用C语言在UCOSII环境下编写多任务应用程序,实现任务间的同步与通信;2. 能够分析并解决实际嵌入式系统开发中与操作系统相关的问题,提高系统稳定性和可靠性;3. 掌握UCOSII调试技巧,能够运用调试工具对操作系统运行状态进行跟踪和分析。
情感态度价值观目标:1. 培养学生对操作系统知识的好奇心和探索精神,激发学习兴趣和热情;2. 培养学生具备良好的团队合作精神和沟通能力,提高解决实际问题的能力;3. 增强学生的创新意识,鼓励他们在实际项目中积极尝试和应用所学知识。
课程性质:本课程为高年级专业课,以实际应用为导向,注重理论与实践相结合。
学生特点:学生已具备一定的C语言编程基础和嵌入式系统知识,具有较强的学习能力和实践能力。
教学要求:教师需采用项目驱动教学法,引导学生通过实际案例掌握UCOSII 操作系统的应用与开发。
在教学过程中,关注学生的个体差异,提供个性化指导,确保课程目标的实现。
同时,注重培养学生的自主学习能力和创新能力,为将来的职业发展打下坚实基础。
二、教学内容1. UCOSII操作系统概述:介绍实时操作系统的基本概念、特点及应用场景,引出UCOSII的背景、架构和优势。
教材章节:第一章 实时操作系统概述2. UCOSII内核原理:讲解UCOSII的核心组件,包括任务管理、时间管理、通信与同步机制等。
教材章节:第二章 UCOSII内核原理3. UCOSII移植与配置:介绍在不同硬件平台上移植和配置UCOSII的方法,以实际案例为例进行讲解。
uCOS-II操作系统简介及实验解读
uC/OS-II操作系统
uC/OS-II操作系统简介 及开发过程
uC/OS-II操作系统
内 容
• • • • • • • •
一、 uCOS-II操作系统简介 二、 uCOS-II操作系统内核结构
三、 uCOS-II操作系统任务管理
四、 uCOS-II操作系统内存管理 五、 uCOS-II操作系统时间管理 六、 uCOS-II操作系统任务间的通讯 七、 uCOS-II操作系统移植 八、 uCOS-II操作系统实验
}任务(task)
•
μC/OS-Ⅱ可以管理多达64个任务。
优先级为0-63 优先级号越低,任务的优先级越高。 每个任务的优先级不能相同。
•
保留优先级:
高优先级:0、1、2、3 低优先级:OS_LOWEST_PRIO-3、 OS_LOWEST_PRI0-2,OS_LOWEST_PRI0-1以及 OS_LOWEST_PRI0
•
用户可以有多达56个应用任务。
uC/OS-II操作系统
删除任务
2.3 任务状态
等待 或挂 起 收 到 消 息
挂 起 时 间 到 任务调度
等 待 消 息
挂 起
中断
创建任务
休眠
删除任务
就绪
任务被抢占
删除任务
运行
中断结束
中断 服务
uC/OS-II操作系统
任务状态
• • • • • •
休眠态 - OSTaskCreate()或OSTaskCreateExt() 就绪态 等待态,就绪态,运行态 - OSTaskDel() - 休眠态 就绪态 - OSStart() - 运行态 运行态 - OSTimeDly()或OSTimeDlyHMSM() , OSSemPend(),OSMboxPend(),或OSQPend() 等待态 等待态 - OSTimeTick() -就绪态 空闲任务 - OSTaskIdle()
ucos-II操作系统概述及任务管理
演讲人:伍莹莹
背景
目前,嵌入式系统在家电、 移动电话、 PDA等 各种领域的应用日益广泛,程序设计也越来越复杂, 这就需要采用一个通用的嵌入式操作系统来对其 进行管理和控制。移植了操作系统的嵌入式系统 开发,可大大减轻程序员的负担,操作系统提供了多 任务的管理功能,只需专注于每个任务的管理。对 于不同的应用,可以按照相同的步骤完成系统设计。 如果更换硬件平台,则只需要对操作系统进行少量 的移植工作, 与硬件无关的应用代码完全无需修改。
任务划分原则
以CPU为核心,将与各种输入输出设备相关的功能划分为独立的 任务。 发现关键功能,用一个独立的任务或者ISR完成。 紧迫任务,用一个优先级较高的任务完成。 将耗时较多的数据处理功能划分出来,使用低优先级的任务。 将有相同事件触发的若干功能合并为一个任务。 将运行周期相同的若干功能合并为一个任务。 将关系密切的若干功能组合为同一个任务,达到功能聚合的效果。
uC/OS-II移植(与处理器相关的代码) OS_CPU.HOS_CPU_A.ASMOS_CPU_C.C
软件 硬件
CPU
时钟
μC/OS-II移植
移植, 就是使一个实时内核能在某个微处理器或微控制器上运行。
要使 μ C/OS- II 能够正常运行,处理器必须满足以下几 个条件 (1)处理器的 C编译器能产生可重入代码; (2)在程序中可以打开或者关闭中断; (3) 处理器支持中断, 并且能产生定时中断 (通常在 l0~l000Hz之间); (4)处理器支持能够容纳一定量数据的硬件堆栈; (5)处理器有将堆栈指针和其他CPU寄存器存储和读出
μC/OS-II任务管理
uCOS-II嵌入式实时操作系统原理与移植
1,决定是否进行上下文切换 2,保存当前执行进程的上下文
包括程序计数器PC、通用寄存器、 与任务有关的数组、表格、链等。
uC/OS-II采用可
剥夺实时内核,
含义是最高优先
0
级任务一旦就绪,
总能得到CPU使
1
用权。
系统保留4个
2
最高优先级
3
4
5
执行该任务
6
7
……
uC/OS-II 的中断(ISR)
任务2—TCB--就绪—任务堆栈
任务3--TCB--等待—任务堆栈
任务4--TCB --睡眠—任务堆栈
uC/OS-II的任务之间通信
任务之间共享的信息成为事件,同一时刻只能有一个任务使 用共享信息,因此为每个事件构建一个事件控制块ECB来保 证任务之间安全共享信息。事件控制块总数由OS_CFG.H中的 OS_MAX_EVENTS定义。事件包括信号量、邮箱、消息队列。
内存组配置文件 储存器映射MMU初始化与操作 Nand flash控制器初始化与操作
与CPU相关的配置选项 开机画面BMP文件 开机画面BMP文件 开机画面BMP文件 初始化mini2440目标板 定义任务优先级、堆栈大小及函数原型声明 初始化操作系统定时器0 开机画面BMP文件
关于信号量和等待的API功能函数
//任务循环
{
OSPrintf("\nEnter Main Task\n");
OSTimeDly(OS_TICKS_PER_SEC); //将任务延迟一段时间,进入等待态
}
}
uC/OS-II的任务都运行在无限循环中。
欢迎访问机电技术博客:/spurtltl@126/
ucos-II操作系统
ucos-II操作系统19.1 操作系统介绍UC/OS-II 中最多可以⽀持64 个任务,分别对应优先级0~63,其中0 为最⾼优先级。
63为最低级,系统保留了4个最⾼优先级的任务和4个最低优先级的任务,所有⽤户可以使⽤的任务数有56个.19.1.1 操作系统简介什么是操作系统操作系统是管理和控制计算机硬件与软件资源的计算机程序,是直接运⾏在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的⽀持下才能运⾏。
介于APP和硬件之间。
19.1.1 常见的操作系统常见的操作系统:IOS(苹果)、安卓()、Windows、Linux、塞班、UCOS、FreeRTOS、RT-T(国产)、Vxworks、eCos等等。
实时操作系统(RTOS)UCOS(学习免费,商⽤需要注册)、FreeRTOS、RT-T(国产)、Vxworks、eCos会给每个任务⼀个基础的时间长度,根据任务的需求适当调整任务时长。
任务与任务直接切换都有相应的规则。
分时操作系统Windows----2000以前、Linux----2.6以前给每⼀个任务分配⼀个固定的时长,如果这个任务在固定的时长内已经空闲,分时操作系统还是会给该任务规定好的时长。
半实时操作系统Windows----7/8/10、Linux----2.6以后19.1 UCOS操作系统介绍19.1.1 操作系统的调度原则UCOS操作系统调度原则是:以任务优先级为调度原则。
任务优先级编号越⼩的,任务优先级越⾼。
注意点:每个任务只有⼀个优先级,不同任务优先级编号不能⼀致。
19.1.1 操作系统的程序结构没有操作系统时整个裸机项⽬⼯程中有且仅有⼀个死循环,这个死循环存在main函数中。
其它地⽅可以有死循环但是必须要有退出条件。
有操作系统时整个操作系统项⽬⼯程中可以有多个死循环,每个任务中有⼀个死循环,main函数中⽆死循环。
注意点:操作系统在main中必须完成两点:①设定好操作系统⼼跳节拍;②创建⼀个任务(该任务必须创建成功)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用户可以有多达56个应用任务。 用户可以有多达 个应用任务。 个应用任务
uC/OS-II操作系统 uC/OS-II操作系统
中断处理
用户中断服务子程序框架 用户中断服务子程序框架:
1、保存全部 、保存全部CPU寄存器 寄存器; 寄存器 2、调用 直接加1; 、调用OSIntEnter或OSIntNesting直接加 ; 或 直接加 3、执行用户代码做中断服务 、执行用户代码做中断服务; 4、调用 、调用OSIntExit(); ; 5、恢复所有 寄存器; 、恢复所有CPU寄存器; 寄存器 6、执行中断返回指令; 、执行中断返回指令;
任务( 任务(task) )
C/S-Ⅱ可以管理多达64个任务。 Ⅱ可以管理多达 个任务 个任务。
优先级为0-63 优先级为 优先级号越低,任务的优先级越高。 优先级号越低,任务的优先级越高。 每个任务的优先级不能相同。 每个任务的优先级不能相同。
保留优先级: 保留优先级
高优先级: 、 、 、 高优先级:0、1、2、3 低优先级: 低优先级:OS_LOWEST_PRIO-3、 、 OS_LOWEST_PRI0-2,OS_LOWEST_PRI0-1以及 , 以及 OS_LOWEST_PRI0
*OSTCBStkPtr; /*当前任务栈顶的指针*/ 当前任务栈顶的指针* 当前任务栈顶的指针 *OSTCBNext; /*任务控制块的双重链接指针 任务控制块的双重链接指针 任务控制块的双重链接指针*/ *OSTCBPrev; /*任务控制块的双重链接指针 任务控制块的双重链接指针 任务控制块的双重链接指针*/ *OSTCBEventPtr; /*事件控制块的指针*/ 事件控制块的指针* 事件控制块的指针 *OSTCBMsg; /*消息的指针 消息的指针*/ 消息的指针 OSTCBDly; /*任务延时 任务延时*/ 任务延时 OSTCBStat; /*任务的状态字*/ 任务的状态字* 任务的状态字 OSTCBPrio; /*任务优先级*/ 任务优先级* 任务优先级 OSTCBX; /*用于加速进入就绪态的过程 用于加速进入就绪态的过程*/ 用于加速进入就绪态的过程 OSTCBY; /*用于加速进入就绪态的过程 用于加速进入就绪态的过程*/ 用于加速进入就绪态的过程 OSTCBBitX; /*用于加速进入就绪态的过程 用于加速进入就绪态的过程*/ 用于加速进入就绪态的过程 OSTCBBitY; /*用于加速进入就绪态的过程 用于加速进入就绪态的过程
目的:为了实现资源共享。 目的:为了实现资源共享。 实现方法:进入临界段时关中断, 实现方法:进入临界段时关中断,退出临界段时 开中断。这使得C/OS-Ⅱ能够在临界段代码时避 开中断。这使得 Ⅱ 免被其它任务或中断服务所中断。 免被其它任务或中断服务所中断。 C/OS-Ⅱ定义两个宏 来开关中断。 Ⅱ定义两个宏(macros)来开关中断。分别 来开关中断 是:
现的。然而,启动μC/OS- 之前, 现的。然而,启动μC/OS-Ⅱ之前,用户至 μC/OS 少要建立一个应用任务。 少要建立一个应用任务。
OSInit(); /* 初始化uC/OS-II*/ …… 调用OSTaskCreate()或OSTaskCreateExt(); …… OSStart(); /*开始多任务调度!永不返回 */
任务( 任务(task) )
一个任务通常是一个无限的循环: 一个任务通常是一个无限的循环
void mytask(void *pdata) { do init while (1) { do something; waiting; do something;
}
}
uC/OS-II操作系统 uC/OS-II操作系统
进入临界段: 进入临界段:OS_ENTER_CRITICAL() 退出临界段:OS_EXIT_CRITICAL()。 退出临界段: 。
这两个宏的定义取决于所用的微处理器, 这两个宏的定义取决于所用的微处理器,每种微 处理器都有自己的OS_CPU.H文件。 文件。 处理器都有自己的 文件
uC/OS-II操作系统 uC/OS-II操作系统
uC/OS-II操作系统 uC/OS-II操作系统
6.1 uC/OS-II简介 简介
1、uC/OS-II是一个简单、高效的嵌 是一个简单、 、 是一个简单
入式实时操作系统内核 2、支持 x86、ARM、PowerPC、 、 、 、 、 MIPS 等众多体系结构 3、可从 、可从网站上获得 网站上获得 全部源码及其在各种体系结构平台 上的移植范例。 上的移植范例。
uC/OS-II操作系统 uC/OS-II操作系统
C/OS-Ⅱ初始化 Ⅱ
在调用C/OS-Ⅱ的任何其它服务之前,C/OS-Ⅱ Ⅱ的任何其它服务之前, 在调用 Ⅱ 要求用户首先调用系统初始化函数OSInit()。 要求用户首先调用系统初始化函数 。 OSInit()建立空闲任务 建立空闲任务idle task,这个任务总是处 建立空闲任务 , 于就绪态的。空闲任务OSTaskIdle()的优先级 ()的优先级 于就绪态的。空闲任务 () 总是设成最低, 总是设成最低,即OS_LOWEST_PRIO。 。 C/OS-Ⅱ还初始化了4个空数据结构缓冲区。 Ⅱ还初始化了 个空数据结构缓冲区 个空数据结构缓冲区。
uC/OS-II操作系统 uC/OS-II操作系统
OSIntEnter()
void OSIntEnter (void) { OS_ENTER_CRITICAL(); OSIntNesting++; OS_EXIT_CRITICAL(); }
uC/OS-II操作系统 uC/OS-II操作系统
OSIntExit
一旦任务建立了,任务控制块OS_TCBs将被 一旦任务建立了,任务控制块OS_TCBs将被 OS_TCBs
赋值。 赋值。
所有的任务控制块分为两条链表,空闲链表 所有的任务控制块分为两条链表,
和使用链表。 和使用链表。
uC/OS-II操作系统 uC/OS-II操作系统
任务控制块结构的主要成员
OS_STK struct os_tcb struct os_tcb OS_EVENT void INT16U INT8U INT8U INT8U INT8U INT8U INT8U */
uC/OS-II操作系统 uC/OS-II操作系统
OSStart
if (OSRunning == FALSE) { y = OSUnMapTbl[OSRdyGrp]; x = OSUnMapTbl[OSRdyTbl[y]]; OSPrioHighRdy = (INT8U)((y << 3) + x); OSPrioCur = OSPrioHighRdy; OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; OSTCBCur = OSTCBHighRdy; OSStartHighRdy(); }
uC/OS-II操作系统 uC/OS-II操作系统
uC/OS-II的特点 的特点
1、uC/OS-II内核具有可抢占的实时 、 内核具有可抢占的实时
多任务调度功能 2、提供了许多系统服务,如信号量、 、提供了许多系统服务,如信号量、 消息队列、邮箱、内存管理、 消息队列、邮箱、内存管理、时间 函数等 3、这些功能可以根据不同的需求进 、 行裁减。 行裁减。
uC/OS-II操作系统 uC/OS-II操作系统
OSTickISR
void OSTickISR(void) { 保存处理器寄存器的值; 保存处理器寄存器的值; 调用OSIntEnter()或是将 或是将OSIntNesting加1; 调用 或是将 加 调用OSTimeTick(); 调用 调用OSIntExit(); 调用 恢复处理器寄存器的值; 恢复处理器寄存器的值 执行中断返回指令; 执行中断返回指令 }
uC/OS-II操作系统 uC/OS-II操作系统
第6章uC/OS-II操作 章 操作 系统
uC/OS-II操作系统 uC/OS-II操作系统
内 容
6.1 uCOS-II操作系统简介 操作系统简介 6.2 uCOS-II操作系统内核结构 操作系统内核结构 6.3 uCOS-II操作系统任务管理 操作系统任务管理 6.4 uCOS-II操作系统内存管理 操作系统内存管理 6.5 uCOS-II操作系统时间管理 操作系统时间管理 6.6 uCOS-II操作系统任务间的通讯 操作系统任务间的通讯 6.7 uCOS-II操作系统移植 操作系统移植
uC/OS-II操作系统 uC/OS-II操作系统
时钟节拍
C/OS需要用户提供周期性信号源,用于实现时 需要用户提供周期性信号源, 需要用户提供周期性信号源 间延时和确认超时。节拍率应在说10到 间延时和确认超时。节拍率应在说 到100Hz。 。 时钟节拍率越高,系统的额外负荷就越重。 时钟节拍率越高,系统的额外负荷就越重。 时钟节拍的实际频率取决于用户应用程序的精度。 时钟节拍的实际频率取决于用户应用程序的精度。 时钟节拍源可以是专门的硬件定时器, 时钟节拍源可以是专门的硬件定时器,也可以是 来自50/60Hz交流电源的信号。 交流电源的信号。 来自 交流电源的信号 用户必须在多任务系统启动以后再开启时钟节拍 也就是在调用OSStart()之后。 之后。 器,也就是在调用 之后