您的位置 首页 方案

uC/OS-II的体系架构

1. uC/OS-II文件结构与处理器无关的代码:OS_CORE.C, OS_FLAG.C, OS_MBOX.C, OS_MEM.C, OS_MUTEX.C, OS_Q.C, OS_SEM.C, O

1. uC/OS-II文件结构

与处理器无关的代码:OS_CORE.C, OS_FLAG.C, OS_MBOX.C, OS_MEM.C, OS_MUTEX.C, OS_Q.C, OS_SEM.C, OS_TASK.C, OS_TIME.C, UCOS_II.C, UCOS_II.H。

配置文件(与应用程序有关):OS_CFG.H, INCLUDES.H

与处理器有关的代码(移植):OS_CPU.H, OS_CPU_A.ASM, OS_CPU_C.C

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彻底归于它自己。使命有自己的仓库和CPU寄存器,而且被赋予必定的优先级。使命或许处于睡觉、安排妥当、运转、等候或中止服务状况之一。

(1) uC/OS-II调度算法

uC/OS-II选用根据优先级的调度算法,总是挑选当时处于安排妥当状况的优先级最高的使命进行调度。uC/OS-II是可抢占性的强实时性OS,在完结中止后答应进行新的使命调度。

uC/OS-II有两种调度方法:使命级使命调度、中止级使命调度。

(2) 应用程序中函数的调用联系

#include “includes.h”

#define TASK_STK_SIZE 512 // 界说仓库长度(1024字节)

OS_STK TaskStk[TASK_STK_SIZE]; // 界说一个数组来作为使命仓库

void main()

{

……

OSInit(); // 初始化uC/OS-IIi

……

OSTaskCreate(MyTask1,……); // 创立用户使命1

OSTaskCreate(MyTask2,……); // 创立用户使命2

……

OSStart(); // 发动使命

……

}

void MyTask(void *pdata)

{

for (;;)

{

能够被中止的使命代码;

OS_ENTER_CRITICAL(); //进入临阶段(关中止)

不能够被中止的使命代码;

OS_EXIT_CRITICAL(); //退出临阶段 (开中止)

能够被中止的使命代码;

}

}

空使命块链表(一切使命操控块还没有分配给使命),是在应用程序调用函数OSInit()对体系进行初始化时树立的。

使命树立时,首要会调用OSTaskStkInit(),也会调用函数OS_TCBInit()初始化使命操控块OS_TCB,函数OSTaskCreate()或OSTaskCreateExt()调用使命操控块初始化函数OS_TCBInit()。

OS_TCBInit()然后调用OSTCBCreatHook()。OSTCBCreatHook()是用户自界说的函数。

当用户程序调用函数OSTaskCreate()创立一个使命时,这个函数会调用体系函数OSTCBInit()来为使命操控块进行初始化。这个函数首要为被创立使命从空使命操控块链表获取一个使命操控块,然后使用使命的特点对使命操控块各个成员进行赋值,最终再把这个使命操控块链入到使命操控块链表的头部。

uC/OS-II有两种调度器:

使命级调度器(由OSSched()完成)、中止级调度器(由OSIntExt()完成)

(3) 使命级使命调度

指在非中止回来时进行使命调度,一般产生在当时使命因时间延迟或等候某事情而堵塞或被挂起,或有更高优先级的使命处于安排妥当状况。

使命的根本信息:

· CPU的PC寄存器:使命当时履行的方位;

· CPU的通用寄存器:使命当时履行触及的暂时数据;

· CPU的状况寄存器:存储当时CPU的状况。

使命级使命切换:从一个使命直接切换至另一个使命,不触及CPU状况的切换,OS_TASK_SW()既保存当时使命上下文,又康复新使命上下文。

进程:OS_Sched() -> OS_SchedNew() -> OS_TASK_SW()

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/300182.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部