uCOS-II一些入门资料(内核架构解析等)
第30讲UCOSII入门

30.1 UCOSII 简介
30.1.1 30.1.2 30.1.3 30.1.4 30.1.5 30.1.6 UCOSII背景知识 UCOSII体系结构 UCOSII基本概念 UCOSII的初始化和启动 UCOSII常用任务管理函数 UCOSII时间管理
广州星翼电子
官方淘宝店:
广州星翼电子 官方淘宝店: 技术支持论坛:
《原子教你玩STM32》系列视频
30.1.2 UCOSII体系结构
用户应用程序
UCOSII
UCOSII与处理器无关的代码 ucos_ii.h ucos_ii.c os_tmr.c os_time.c os_task.c os_sem.c os_q.c os_mutex.c os_mem.c os_mbox.c os_flag.c os_core.c
广州星翼电子
官方淘宝店:
技术支持论坛:
《原子教你玩STM32》系列视频
广州星翼电子
官方淘宝店:
技术支持论坛:
《原子教你玩STM32》系列视频
任务控制块OS_TCB
用来记录任务堆栈指针,任务当前状态以及任务优先级等任务 属性。UCOSII的任何任务都是通过任务控制块(TCB)的东西 来控制的,一旦任务创建了,任务控制块OS_TCB就会被赋值。 每个任务管理块有3个最重要的参数:1,任务函数指针;2, 任务堆栈指针;3,任务优先级;任务控制块就是任务在系统 里面的身份证(UCOSII通过优先级识别任务),任务控制块我 们就不再详细介绍了,详细介绍请参考任哲老师的《嵌入式实 时操作系统UCOSII原理及应用》一书第二章。
UCOSII与应用程序 相关代码 os_cfg.h includes.h
UCOSII与处理器相关的代码(移植时需要修改) os_cpu.h os_cpu_a.asm os_cpu_c.c
uCOS-II ppt 入门基础

硬件初始化
• 系统启动处理(在调用uC/OS-II操作系统初始化函数 OSInit()前,需要对CPU进行必要的初始化,例如设置异 常处理栈空间。要使uC/OS-II能够正常运行,时钟任务是 必不可少的。另外,启动代码需要存储在哪个内存空间, 在运行时需要在哪个内存中运行,这些都需要程序员手动 设置。)
典型的main函数
• • • • • • • • • • • • • • void main (void) { /*-----硬件初始化,等用户代码初始化-----*/ ... OSInit(); /* 初始化uC/OS-II */ …/*-------安装中断向量---------*/ /*通过调用OSTaskCreate ( ) 或OSTaskCreateExt ( )创建至少一个任务;*/ OSTaskCreate(TaskStart , (void*)0, &TaskStartStk[TASK_STK_SIZE - 1], 2 ); … /*通过调用OSSemCreate() 创建信号量等任务通信方式;*/ CalcSem = OSSemCreate(0); … OSStart(); /* 开始多任务调度!OSStart()永远不会返回 */ }
时钟
PC机上移植和运行uC/OS-II要注意其与PC机中其他操 作系统的关系(主要是与DOS操作系统之间的关系),不 能因为安装了uC/OS-II而使其他操作系统不能正常使用。 • 在PC机中,DOS系统时间的周期为 54.93ms(18.20648HZ)。 • DOS操作系统的系统时钟是由PC机上配置的硬件定时 DOS PC 器产生的。在硬件定时器的每个定时周期结束时,硬件定 时器便向CPU申请一次中断,在中断服务程序中处理DOS 所需要的系统时钟,同时处理DOS系统有关时间的一些管 理事务。在80X86系统的中断向量表中,产生DOS系统时 钟硬件定时器所占用的中断向量为0x08. • 在这我们把uC/OS-II的系统时钟频率设置为200HZ,这 显然比DOS的时钟频率高得多。因此,借用产生的DOS系 统时钟的定时器信号来产生uC/OS-II系统时钟。200除于11 等于18.18约等于18.2.后把uC/OS-II的时钟中断向量安装到 0x08上,而把0x08中原来的DOS的时钟中断向量转存到中 •
嵌入式操作系统uCOS2复习指南

复习:第一章:实时操作系统、操作系统基本功能、任务、多任务、任务状态及相互关系、任务切换、可重入和不可重入;可剥夺和不可剥夺内核;同步与通信:同步、互斥、临界区、事件、信号量、互斥信号量、消息邮箱、消息队列;中断、时钟、内存管理。
第二章:任务管理:任务控制块TCB数据结构及各数据项意义任务控制块实体任务控制块空闲链表、就绪链表优先级指针表任务堆栈任务就绪表及就绪组及相关代码图2.16:任务状态转换图,要弄清楚任务各状态及转换条件程序2.6,2.7,2.8和2.9,获取就绪任务中的最高优先级,能给出OsRdyGrp和OsRdyTbl后,依据程序,算出最高优先级;并且说明处理时间是恒定的程序2.10、2.11、2.14、2.15、2.17、2.27、2.28、2.29、2.30、2.34分析第三章中断和时间管理中断处理流程,图3.1时钟中断服务,程序3.2,OSTIMETICK(程序2.27)任务延迟函数OSTIMEDLY作用及代码分析(程序3.4)第4章ECB数据结构事件等待组、等待表作用,与就绪组合就绪表有何联系和不同事件控制块空闲链表及ECB初始化函数(程序4.3)事件等待函数(程序4.5)将等待事件就绪(程序4.8)信号管理:OSSEMCREAT、OSSEMDEL、OSSEMPEND、OSSEMPOST4.3.9:信号量应用举例互斥信号管理:OSMutexCreat、OSMutexDEL、OSMutexPEND、OSMUtexPOST优先级反转解决优先级反转采用何种策略4.4.8:互斥信号量应用举例第5章5.1 消息邮箱:OSMBOXCREAT、DEL、PEND、POST5.1.8 例子5.2消息队列:Os_QInit,OsQCreat;POST;PEND消息队列数据结构:图5.8到5.115.2.8 例子第6章内存管理内存控制块数据结构MCB链表Os_MemInit();OsMemCreat();OsMemGet();OsMemPut()设内存区有6个块构成,依次画出4个图:内存块创建后、分配一个块后、再分配两个块后、释放第一次分配的块后的结构图。
uCOS-II一些入门资料_内核架构解析等

嵌入式系统——基础知识操作系统OS控制和管理计算机软硬件资源,合理组织计算机工作流程,方便用户使用计算机的系统软件。
可将OS看成是应用程序与硬件间的接口或虚拟机。
OS功能:进程管理、存储管理、文件管理、设备管理、网络和通信管理等。
嵌入式操作系统EOS运行在嵌入式硬件平台上,对整个系统及其所操作的部件装置等资源进行统一协调、指挥和控制的系统软件。
EOS特点:微型化、可裁剪性、实时性、高可靠性、易移植性重点关注:高实时性、硬件相关依赖性、软件固化、应用专用性、网络功能。
实时操作系统TROS能使计算机及时响应外部事件请求,并能及时控制所有实时设备与实时任务协调运行,且能在规定时间内完成事件处理的OS。
RTOS基本要求:1、逻辑功能正确:RTOS的计算必须产生正确的结果;2、时间正确:RTOS的计算必须在预定的周期内完成。
RTOS应满足条件:1、多任务系统;2、任务的切换时间应与系统中的任务书无关;3、中断延时的时间可预知并尽可能短。
无论在什么情况下,OS完成任务所需的时间应该是在程序设计时就可预知的。
嵌入式实时操作系统ERTOS用于嵌入式系统,对系统资源和多个任务进行管理,且具有高可靠性、良好可裁剪性等优良性能的,为应用程序提供运行平台和实时服务的微型系统软件。
ERTOS最重要的三项服务:1、多任务管理2、内存管理3、外围资源管理嵌入式微处理器(特点)1、对实时多任务OS有很强的支持能力;2、具有功能很强的存储区域保护功能;3、处理器结构可扩展;4、低功耗;微处理器主要发展方向:小体积、高性能、低功耗微处理器分类:MCU、MPU、DSP、SOC嵌入式系统发展方向1、嵌入式开发是一项系统工程,嵌入式系统厂商不仅要提供嵌入式软硬件系统本身,还需要提供强大的硬件开发工具与软件支持包;2、网络化、信息化的要求随着因特网技术的成熟、宽带的提高而日益提高,使得以往单一功能的设备功能不再单一,结构更加复杂;3、网络互连成为必然趋势(IEEE1394、USB、CAN、Bluetooth等网络接口);4、精简系统内核、算法、降低功耗和软硬件成本;5、提供友好的多媒体人机界面。
uCOS-II内核详解

UC/OS-II内核详解一.内核概述:多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。
内核提供的基本服务是任务切换。
之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。
内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。
但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来是相当厉害的。
内核本身对CPU的占用时间一般在2到5个百分点之间。
UC/OS-II有一个精巧的内核调度算法,实时内核精小,执行效率高,算法巧妙,代码空间很少。
UC/OS-II的内核还可以被裁剪,Hmax中RTOS的就是一个被高度裁剪过的UC/OS-II。
二.任务控制块 OS_TCB:uC/OS-II的TCB数据结构简单,内容容易理解,保存最基本的任务信息,同时还支持裁减来减小内存消耗,TCB是事先根据用户配置,静态分配内存的结构数组,通过优先级序号进行添加,查找,删除等功能。
减少动态内存分配和释放。
因为依靠优先级进行TCB分配,每个任务必须有自己的优先级,不能和其他任务具有相同的优先级。
typedef struct os_tcb{OS_STK *OSTCBStkPtr;#if OS_TASK_CREATE_EXT_ENvoid *OSTCBExtPtr;OS_STK *OSTCBStkBottom;INT32U OSTCBStkSize;INT16U OSTCBOpt;INT16U OSTCBId;#endifstruct os_tcb *OSTCBNext;struct os_tcb *OSTCBPrev;#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_ENOS_EVENT *OSTCBEventPtr;#endif#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_ENvoid *OSTCBMsg;#endifINT16U OSTCBDly;INT8U OSTCBStat;INT8U OSTCBPrio;INT8U OSTCBX;INT8U OSTCBY;INT8U OSTCBBitX;INT8U OSTCBBitY;#if OS_TASK_DEL_ENBOOLEAN OSTCBDelReq;#endif} OS_TCB;.OSTCBStkPtr是指向当前任务栈顶的指针。
UCOS-II编程要点讲解

OSTaskQuery( ) INT8U OSTaskQuery ( INT8U prio, OS_TCB *pdata);
3
UCOSII 编程要点 参数:prio 为指定要获取 TCB 内容的任务优先级,也可以指定参数 OS_PRIO_SELF,获取调用 任务的信息。pdata 指向一个 OS_TCB 类型的数据结构,容纳返回的任务 TCB 的一个拷贝 OSTimeGet():系统时间;
UCOSII 编程要点
OSStatInit():系统统计初始化;
OSStatInit ( )
void OSStatInit (void);
OSTaskStatHook():任务统计外界接入函数;
OSTaskSuspend(OS_PR1O_SELF):
OSTaskStkChk():任务堆栈检查;
OSTaskStkChk( ) INT8U OSTaskStkChk ( INT8U prio, OS_STK_DATA *pdata); 参数:prio 为指定要获取堆栈信息的任务优先级,也可以指定参数 OS_PRIO_SELF,获取调用 任务本身的信息。pdata 指向一个类型为 OS_STK_DATA 的数据结构。 OSSched():任务调度;
一、任务状态
UCOSII 编程要点
二、系统函数
OSIint():系统初始化函数,并建立空闲任务; OSTastCreat(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio):任
务建立,进入就绪态准备运行; 参数:task 是指向任务代码的指针。Pdata 指向一个数据结构,该结构用来在建立任务时向 任务传递参数。ptos 为指向任务堆栈栈顶的指针。prio 为任务的优先级 OSTaskCreatExt(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio, INT16U id, OS_STK *pbos, INT32U stk_size, void *pext, INT16U opt): 任务建立,进入就绪态准备运行; OSTaskChangePrio():改变任务的优先级; INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio); 参数:oldprio 是任务原先的优先级。newprio 是任务的新优先级。 OSTaskDel():任务睡眠; OSTaskDel() INT8U OSTaskDel (INT8U prio); 参数:prio 为指定要删除任务的优先级,也可以用参数 OS_PRIO_SELF 代替 OSStart():启动任务; OSTimeDly():任务延迟,进入等待状态; OSTimeDly( ) void OSTimeDly ( INT16U ticks); 参数:ticks 为要延时的时钟节拍数 OSTimeDlyHMSM():任务延迟,进入等待状态; OSTimeDlyHMSM( ) void OSTimeDlyHMSM( INT8U hours,INT8U minutes,INT8U seconds,INT8U milli);
uCOS-II操作系统简介及实验
•
这两个宏的定义取决于所用的微处理器, 这两个宏的定义取决于所用的微处理器,每种微 处理器都有自己的OS_CPU.H文件。 文件。 处理器都有自己的 文件
uC/OS-II操作系统 uC/OS-II操作系统
uC/OS-II操作系统 uC/OS-II操作系统
1.2 uC/OS-II特点 特点
• 1、uC/OS-II内核具有很强的可移植性。 内核具有很强的可移植性。 、 内核具有很强的可移植性 • 2、具有可抢占的实时多任务调度功能。 、具有可抢占的实时多任务调度功能。 • 3、提供了许多系统服务,如信号量、消 、提供了许多系统服务,如信号量、 •
任务状态
• • • • • •
休眠态 - OSTaskCreate()或OSTaskCreateExt() 或 就绪态 等待态,就绪态 就绪态,运行态 等待态 就绪态 运行态 - OSTaskDel() - 休眠态 就绪态 - OSStart() - 运行态 运行态 - OSTimeDly()或OSTimeDlyHMSM() , 或 OSSemPend(),OSMboxPend(),或OSQPend() , , 等待态 等待态 - OSTimeTick() -就绪态 就绪态 空闲任务 - OSTaskIdle()
uC/OS-II操作系统 uC/OS-II操作系统
任务调度
• μC/OS-Ⅱ总是运行进入就绪态任务中优 μC/OS先级最高的那一个。 先级最高的那一个。确定哪个任务优先 级最高, 级最高,下面该哪个任务运行了的工作 是由调度器(Scheduler)完成的。 是由调度器(Scheduler)完成的。
UCOS—II常用资料整理
UC/OS—II的常用资料整理作者:~风中的叶~ QQ:654705188一、变量类型1.OS_STK:typedef unsigned int堆栈的类型定义1.1OS_STK_DATA:堆栈数据的类型定义2.OS_CPU_SR:typedef unsigned int保存CPU状态的变量类型3. OS_EVENT:消息事件的类型定义,包括信号量、互斥型信号量、消息邮箱、消息队列typedef struct {INT8U OSEventType;INT8U OSEventGrp;INT16U OSEventCnt;void *OSEventPtr;INT8U OSEventTbl[OS_EVENT_TBL_SIZE];} OS_EVENT;3.1 OS_SEM_DATA:消息信号量数据的类型定义3.2 OS_MUTEX_DATA:消息互斥型信号量数据的类型定义3.3 OS_MBOX_DATA:消息邮箱数据的类型定义4.OS_FLAG_GRP:标志组的类型定义typedef struct {INT8U OSFlagType;V oid *OSFlagWaitList;OS_FLAGS OSFlagFlags;} OS_FLAG_GRP;4.1OS_FLAGS:typedef INT16U事件标志(位)类型定义4.2 OS_FLAG_NODE:事件标志节点类型定义5. OS_Q:消息队列的类型定义typedef struct os_q {struct os_q *OSQPtr;void **OSQStart;void **OSQEnd;void **OSQIn;void **OSQOut;INT16U OSQSize;INT16U OSQEntries;} OS_Q;5.1 OS_Q_DATA:消息队列数据的类型定义6. OS_MEM:内存管理的类型定义typedef struct {void *OSMemAddr;void *OSMemFreeList;INT32U OSMemBlkSize;INT32U OSMemNBlks;INT32U OSMemNFree;} OS_MEM;6.1 OS_MEM_DATA:内存管理数据的类型定义7.OS_TCB:任务控制块的类型定义二、常用变量1.OSCtxSwCtr:OS_EXT INT32U任务切换次数的记录变量2.OSCPUUsage:OS_EXT INT8S CPU的使用率3. OSIdleCtr:OS_EXT INT32空闲任务计数器4. OSIdleCtrRun:空闲任务的计数器每秒的计数值5.OSIntNesting:OS_EXT INT8S中断嵌套的层数(0~255)6.OSLockNesting:OS_EXT INT8S调用OSSchedLock嵌套层数7. OSPrioCur:OS_EXT INT8S正在运行的任务的优先级8. OSTaskCtr:OS_EXT INT8S已经建立了的任务数全局变量:三、常用函数一、OS_CORE.C(1)void OSInit (void) //系统初始化(2)void OSIntEnter (void) //发生了一次中断(中断嵌套的逐层进入)(3)void OSIntExit (void) //退出了一次中断(中断嵌套的逐层退出)(4)void OSSchedLock (void) // 给调度器上锁(5)void OSSchedUnlock (void) // 给调度器解锁,成对使用(6)void OSStart (void) // 启动多任务过程,在启动之前必须调用OSInit(),并已建立一个任务。
uCOS-II内核架构解析
目录嵌入式RTOS (3)1。
嵌入式系统基本模型32.RTOS设计原则 (4)3。
GPOS与RTOS 44。
嵌入式开发模式45。
(不)可重入46.互斥条件 (5)7。
临界状态5uC/OS—II基本介绍 (6)1.uC/OS-II文件结构 (6)2.uC/OS—II组成部分 (6)3。
uC/OS-II任务状态7uC/OS—II系统核心 (7)1。
uC/OS-II任务调度7(1)uC/OS—II调度算法 (7)(2)任务就绪表 (7)(3)任务级任务调度8(4)中断级任务调度8(5)调度器上锁与解锁9(6)中断管理函数10(7)中断相关问题 (10)2。
uC/OS—II系统启动11(1)初始化函数OSInit() (11)(2)启动函数OSStart() (12)(3)统计任务OSTaskStat 123.uC/OS-II系统时钟 (12)4。
uC/OS-II事件管理13(1)事件控制块13(2)ECB管理机制 (13)(3)ECB管理函数 (13)uC/OS—II任务管理 (14)1.C可执行代码结构 (14)2。
任务结构143。
任务栈154.任务控制块 (15)(1)TCB描述 (15)(2)TCB主要成员 (15)(3)TCB全局变量155.任务状态切换 (16)6。
任务管理函数16uC/OS-II通信与同步 (16)1.消息邮箱Mbox (16)2。
消息队列msgQ 17(1)msgQ基本内容 (17)(2)msgQ全局变量 (18)(3)msgQ管理函数 (18)(4)msgQ几个问题 (19)3.信号量Sem (19)4。
互斥锁Mutex 20(1)Mutex基本原理 (20)(2)提升/恢复优先级 (20)(3)Mutex管理函数 (20)5。
事件组标志Flag 21(1)Flag基本原理21(2)Flag数据结构21(3)Flag管理函数 (22)6.Task就绪状态判断??? (23)uC/OS—II内存管理 (24)1。
uCOS-II 入门理解
uCOS-II 初级程序员指南(一)uC/OS-II 简介uC/OS-II是一种基于优先级的可抢先的硬实时内核。
自从92年发布以来,在世界各地都获得了广泛的应用,它是一种专门为嵌入式设备设计的内核,目前已经被移植到40多种不同结构的CPU 上,运行在从8位到64位的各种系统之上。
尤其值得一提的是,该系统自从2.51版本之后,就通过了美国FAA认证,可以运行在诸如航天器等对安全要求极为苛刻的系统之上。
鉴于uC/OS-II可以免费获得代码,对于嵌入式RTOS而言,选择uC/OS无疑是最经济的选择。
(二)uC/OS-II应用程序基本结构应用uC/OS-II,自然要为它开发应用程序,下面论述基于uC/OS-II的应用程序的基本结构以及注意事项。
每一个uC/OS-II应用至少要有一个任务。
而每一个任务必须被写成无限循环的形式。
以下是推荐的结构:void task ( void* pdata ){INT8U err;InitTimer(); // 可选For( ;; ){// 你的应用程序代码…….……..OSTimeDly(1); // 可选}}以上就是基本结构,至于为什么要写成无限循环的形式呢?那是因为系统会为每一个任务保留一个堆栈空间,由系统在任务切换的时候换恢复上下文,并执行一条reti 指令返回。
如果允许任务执行到最后一个花括号(那一般都意味着一条ret指令)的话,很可能会破坏系统堆栈空间从而使应用程序的执行不确定。
换句话说,就是“跑飞”了。
所以,每一个任务必须被写成无限循环的形式。
程序员一定要相信,自己的任务是会放弃CPU使用权的,而不管是系统强制(通过ISR)还是主动放弃(通过调用OS API)。
现在来谈论上面程序中的InitTimer()函数,这个函数应该由系统提供,程序员有义务在优先级最高的任务内调用它而且不能在for循环内调用。
注意,这个函数是和所使用的CPU相关的,每种系统都有自己的Timer初始化程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式系统——基础知识操作系统OS控制和管理计算机软硬件资源,合理组织计算机工作流程,方便用户使用计算机的系统软件。
可将OS看成是应用程序与硬件间的接口或虚拟机。
OS功能:进程管理、存储管理、文件管理、设备管理、网络和通信管理等。
嵌入式操作系统EOS运行在嵌入式硬件平台上,对整个系统及其所操作的部件装置等资源进行统一协调、指挥和控制的系统软件。
EOS特点:微型化、可裁剪性、实时性、高可靠性、易移植性重点关注:高实时性、硬件相关依赖性、软件固化、应用专用性、网络功能。
实时操作系统TROS能使计算机及时响应外部事件请求,并能及时控制所有实时设备与实时任务协调运行,且能在规定时间内完成事件处理的OS。
RTOS基本要求:1、逻辑功能正确:RTOS的计算必须产生正确的结果;2、时间正确:RTOS的计算必须在预定的周期内完成。
RTOS应满足条件:1、多任务系统;2、任务的切换时间应与系统中的任务书无关;3、中断延时的时间可预知并尽可能短。
无论在什么情况下,OS完成任务所需的时间应该是在程序设计时就可预知的。
嵌入式实时操作系统ERTOS用于嵌入式系统,对系统资源和多个任务进行管理,且具有高可靠性、良好可裁剪性等优良性能的,为应用程序提供运行平台和实时服务的微型系统软件。
ERTOS最重要的三项服务:1、多任务管理2、内存管理3、外围资源管理嵌入式微处理器(特点)1、对实时多任务OS有很强的支持能力;2、具有功能很强的存储区域保护功能;3、处理器结构可扩展;4、低功耗;微处理器主要发展方向:小体积、高性能、低功耗微处理器分类:MCU、MPU、DSP、SOC嵌入式系统发展方向1、嵌入式开发是一项系统工程,嵌入式系统厂商不仅要提供嵌入式软硬件系统本身,还需要提供强大的硬件开发工具与软件支持包;2、网络化、信息化的要求随着因特网技术的成熟、宽带的提高而日益提高,使得以往单一功能的设备功能不再单一,结构更加复杂;3、网络互连成为必然趋势(IEEE1394、USB、CAN、Bluetooth等网络接口);4、精简系统内核、算法、降低功耗和软硬件成本;5、提供友好的多媒体人机界面。
嵌入式系统特点机软硬件于一体,可独立工作的计算机系统。
1、专用性强;2、可裁剪性;3、实时性与可靠性;4、功耗低;5、系统内核小;6、系统精简;7、实时多任务OS; 8、专门开发工具与环境;嵌入式系统的核心往往是一个只有几KB到几十KB的微内核。
通常把嵌入式系统概念的重心放在“系统”上,指能够运行OS的软硬件总体。
嵌入式系统构成,硬件:微处理器、外围接口和存储器;中间层:BSP/HAL;软件:RTOS及其上运行的应用软件。
嵌入式系统框架可分为4部分:处理器、存储器、I/O、软件。
嵌入式CPU将通用CPU中许多由板卡完成的任务集成到芯片内部。
多数嵌入式设备的应用软件和OS紧密结合。
嵌入式软件体系结构1、无OS情形(1)循环轮转方式:把系统功能分成若干不同的任务,然后把它们包含在一个无限的循环语句中,按照顺序逐一执行,之后再循环。
缺点:过于简单,无法处理异步事件,缺乏并发处理能力。
(2)前后台系统:在循环轮转的基础上,增加了中断处理功能;foreground(前台程序:事件处理级程序):中断服务程序ISR,处理异步事件;background(后台程序:任务级程序):系统管理调度程序,无限循环,负责嵌入式系统软硬件资源的分配、管理及任务调度。
2、有OS情形(1)提高了系统可靠性;(2)提高了系统开发效率,降低了开发成本,缩短了开发周期;(3)有利于系统的扩展和移植;对不同的嵌入式操作系统,所包含的组件可能各不相同。
一般来说,所有的OS都会有一个内核Kernel,内核指OS中的一个组件,包含了OS的主要功能,即OS的各种特性及其相互间的依赖关系。
(任务管理、存储管理、文件管理、设备管理、网络管理)嵌入式操作系统分类1、按“系统类型”分类:商用系统、专业系统、开源系统;2、按“响应时间”分类:RTOS、非RTOS;3、按“软件结构”分类:单体结构、分层结构、微内核结构;差别体现在两方面:(1)内核的设计,即内核中包含了哪些功能组件;(2)系统中集成了哪些其他的系统软件。
(1)单体结构(eg:linux):在单体结构的OS中,中间件和设备驱动程序通常集成在系统内核中,整个系统通常只有一个可执行文件,包含了所有的功能组件。
整个OS由一组功能模块构成,这些功能模块间可以相互调用。
优点:性能较好,系统各模块间可以相互调用,通信开销小;缺点:OS体积庞大,高度集成,在系统裁剪、修改和调试等方面较为困难。
(2)分层结构:在分层结构中,一个OS被划分为若干个层次,各层间的调用关系是单向的。
分层结构的OS也只有一个大的可执行文件,包含设备驱动程序和中间件。
要求在每个层次上都要提供一组API接口函数。
(3)微内核结构(eg:VxWorks):在内核中,把OS的大部分功能都剥离出去,只保留最核心的功能单元。
内核非常小,大部分的系统功能都位于内核之外。
在微内核OS中,新的功能组件可以被动态地添加进来,具有易于扩充、调试方便和易于移植等特点。
核内组件与核外组件间的通信是消息传递,而不是直接的函数调用。
嵌入式操作系统重要概念1、先占式内核:当前最高优先级任务一旦就绪,就立即获得CPU控制权,且控制权可知;2、调度策略分析:(强实时、弱实时)3、任务优先级分配:(静态优先级、动态优先级)4、时间的可确定性:强RTOS的函数调用与服务的执行时间具有可确定性。
系统服务的执行时间不依赖于应用程序任务的多少。
系统完成某个确定任务的时间可预测。
5、任务切换时间:(取决于CPU有多少Reg要入栈)6、中断响应时间:在先占式内核中,中断响应时间 = 关中断最长时间 + 保护CPU内部寄存器时间 + 进入中段服务函数的执行时间 + 开始执行ISR第一条指令的时间;7、优先级反转:(解决方法:优先级继承、优先权极限)8、任务执行时间的抖动9、任务划分:(原则:I/O原则、优先级原则、大量原则、功能耦合、偶然耦合、频率组合)uC/OS-II内核架构解析(1)---嵌入式RTOS1. 嵌入式系统基本模型2. RTOS设计原则采用各种算法和策略,始终保持系统行为的可预测性。
即在任何情况下,在系统运行的任何时刻,OS的资源配置策略都能为争夺资源(包括CPU、内存、网络带宽等)的多个实时任务合理地分配资源,使每个实时任务的实时性要求都能得到满足。
3. GPOS与RTOS∙GPOS:注重每次执行的平均响应时间,而不是某次特定执行的响应时间。
∙RTOS:除满足应用功能需求外,还要满足实时性要求,始终保证系统行为的可预测性(predictability)。
与GPOS不同,RTOS注重的不是系统的平均表现,而是要满足每个实时任务在最坏情况下的实时性要求。
也就是说,RTOS注重的是个体表现,更准确地说是个体最坏情况表现。
RTOS与GPOS的差别主要表现在:a) 任务调度策略不同;b) 内存管理方式不同;c) 中断处理方式不同;d) 系统管理方式不同;4. 嵌入式开发模式∙单片机系统的前后台程序:不使用OS,将应用程序设计成死循环,系统轮流处理各事件,对时间响应要求高的异步事件采用中断进行处理。
∙基于任务(进程)的软件设计方法:使用OS,由OS管理硬件资源,任务只是在需要资源时申请即可,至于when/which,完全由OS决定。
5.(不)可重入(1) 可重入函数:指函数代码在运行过程中可以被中断,中断返回后仍能够恢复到原来的状态,并能准确无误执行的函数。
可重入函数可以被一个以上的任务调用,而不必担心数据被破坏。
可重入函数或者只使用局部变量,即变量保存在CPU寄存器或堆栈中;或者使用全局变量,则要对全局变量予以保护。
(2) 不可重入函数:函数在运行过程中不可以被中断。
6. 互斥条件实现任务间通信最简便的办法是使用共享数据,但要保证任务在处理共享数据时的排它性。
使共享资源满足互斥条件,最一般的方法有:(1) 关中断使用某种实时内核,一般情况下关中断的时间最长不超过内核本身的关中断时间,这样就不会影响系统中断延迟。
(2) 使用测试并置位指令Test&Set操作可能是微处理器一条不会被中断的指令,否则应该在程序中关中断做TAS操作再开中断。
(3) 禁止做任务切换此时任务切换虽然是禁止的,但仍允许中断。
如果这时中断来了,ISR 会在这一临界区内立即执行。
(4) 利用信号量;7. 临界状态临界状态指当前程序处于不可中断状态。
一般情况下,在调用不可重入函数前或在修改全局变量数据时,都需要先进入临界状态。
进入临界状态的主要操作是关闭所有可以屏蔽的中断;而退出临界状态的主要操作是恢复到上次进入临界状态时前中断管理的状态。
在uC/OS-II中,宏OS_ENTER_CRITICAL()描述进入临界状态所完成的操作,宏OS_EXIT_CRITICAL()描述退出临界状态的操作。
uC/OS-II提供了3种进入和退出临界状态的办法,可以根据CPU类型由宏OS_CRITICAL_MOTHOD指定具体的临界状态处理办法。
uC/OS-II内核架构解析(2)---uC/OS-II基本介绍1. uC/OS-II文件结构2. uC/OS-II组成部分uC/OS-II大致可以分成系统核心(包含任务调度)、任务管理、时间管理、多任务同步与通信、内存管理、CPU移植等部分。
(1) 核心部分(OSCore.c) :uC/OS-II处理核心,包括初始化、启动、中断管理、时钟中断、任务调度及事件处理等用于系统基本维持的函数。
(2) 任务管理(OSTask.c) :包含与任务操作密切相关的函数,包括任务建立、删除、挂起及恢复等,uC/OS II以任务为基本单位进行调度。
(3) 时钟部分(OSTime.c) :uC/OS-II中最小时钟单位是timetick(时钟节拍),其中包含时间延迟、时钟设置及时钟恢复等与时钟相关的函数。
(4) 多任务同步与通信(OSMbox.c, OSQ.c, OSSem.c, OSMutex.c, OSFlag.c):包含事件管理函数,涉及Mbox、msgQ、Sem、Mutex、Flag等。
(5) 内存管理部分(OSMem.c):主要用于构建私有的内存分区管理机制,其中包含创建memPart、申请/释放memPart、获取分区信息等函数。
(6) CPU接口部分:uC/OS-II针对特定CPU的移植部分,由于牵涉到SP等系统指针,通常用汇编语言编写,包括任务切换、中断处理等内容。
3. uC/OS-II任务状态在uC/OS-II中,一个任务就是一个线程,该任务可以认为CPU完全属于它自己。