- 特点:
-
- 多任务,最高优先级抢占式内核;
- 多个任务可处在同一优先级,同优先级内采取时间片轮转调度;
- 任务数量、优先级数量、内核对象数量(任务、信 量、互斥信 量、事件标志组、消息队列、定时器等)均不受限制;
- 一个任务可同时等待多个事件,即挂载在多个事件的等待队列上;
- 一个任务或中断可以直接给另一个任务发送信 或消息;
-
基于uCOSIII的工程中的分组:
- 应用代码,即用户写的实现功能的代码,如main.c等等;
- MCU生产厂家的库函数代码;
- BSP(Board Support Package),板级支持开发包,为特定板子的外设接口写的代码,bsp.c和bsp.h文件;
- uCOSIII的与处理器无关的内核代码,即uCOSIII_CORE中的代码;
- uCOSIII应用到特定处理器的移植代码,即uCOSIII_PORT中的os_cpu_xx文件;
- 与CPU相关的,如打开关闭中断,与CPU和编译使用的数据类型等,即uCOSIII_CPU中的cpu_xx文件;
- 公共功能函数文件如内存复制,字符串处理等文件,即uCOSIII_LIB中的文件,这确保了uCOSIII的可移植性不受处理器和编译器影响;
- 配置文件,定义了uCOSIII的特征为应用文件所使用,如变量大小,数据结构,任务堆栈大小啊,消息池等;
-
uCOSIII一些文件内容:
-
uC/CPU Port:
- cpu_core.c:CPU相关初始化(时间戳,测量中断时间,CPUName),模拟CLZ(count leading zeros)指令,测量中断关闭时间方法等。
- cpu_core.h:cpu_core.c的函数、变量声明。
- cpu_def.h:CPU模块使用的各种#define(大端小端字节序、堆栈的增长方向、Critical Section处理)
- cpu.h:CPU模块使用的类型定义、具体大端小端字节序、具体堆栈增长方向、具体Critical Section处理方法(CPU_CRITICAL_METHOD_STATUS_LOCAL,进入时需要在所所有的变量后面添加CPU_SR_ALLOC();)。
- cpu_a.asm:汇编方法实现(CPU_IntDis、CPU_IntEn、CPU_SR_Save、CPU_SR_Restore、CPU_WaitForInt、CPU_WaitForInt、CPU_CntLeadZeros、CPU_CntTrailZeros)。
- cpu_c.c:针对特定CPU结构写的C函数(BitBand、中断相关的操作)(在系统中没有用到…)。
- cpu_cfg.h:是否开启设置CPU_Name功能,是否开启CPU的时间戳功能,是否测量中断关闭时间、是否有CLZ指令的汇编实现
-
uC/CPU Port:
-
uC/OS Port:
- os_cpu.h:OS_TASK_SW()、OSIntCtxSw()宏声明、OSStartHighRdy()等方法声明。
- os_cpu_a.asm:PendSV_Handler()、OSStartHighRdy()的汇编实现。
- os_cpu_c.c:移植需要的:系统调用的钩子函数、创建任务时对堆栈格式的初始化,SysTick的初始化和中断处理。
- os_app_hooks.c:用户对OS调用的所有的钩子函数的实现,并且需要在OSInit()调用后设置对应的钩子函数(OSInit()将钩子函数的指针清空)。
- os_cfg.h:配置OS中使用的模块和特性。
- os_cfg_app.h:应用参数配置(例如:message pool大小,中断使用的堆栈大小,Idle任务堆栈大小,处理中断任务堆栈和队列大小,统计任务优先级、频率、堆栈大小,SysTick频率、任务优先级、堆栈大小、Spoke,软件定时器任务优先级、频率、堆栈大小、Spoke)。
- os_var.c:OS全局变量(无内容)。
- os_dbg.c:Debugger用到的常量。
- os_type.h:根据CPU模块使用的数据类型typedef部分OS模块使用的数据类型。
- os_cfg_app.c:根据os_cfg_app.h中的配置,声明变量和数组(Idle任务堆栈,处理中断任务堆栈和队列,中断使用堆栈,message pool,统计任务堆栈,SysTick堆栈和Wheel数组,软件定时器堆栈和Wheel数组)。
- os_prio.c:管理bitmap table相关代码。
- os.h:OS的主要头文件(常量、宏、全局变量、方法原型等)。
- os_core.c:OS的核心函数(例如:OSInit()初始化uC , OSSched()任务级别调度 , OSIntExit() 中断级别调度,pend,post,Pend List,Ready List管理等)。
- os_tick.c:管理任务延时或者内核对象需要timeout的相关代码。
- os_time.c:任务延时代码、System Tick中断处理函数调用的OSTimeTick。
- os_tmr.c:管理软件定时器。
- os_task.c:任务管理相关的代码(OSTaskCreate() OSTaskDel() OSTaskChangePrio()…)。
- os_msg.c:处理OS_MSG_Q相关的代码、初始化OSMsgPool。
- os_q.c:管理message queue相关代码。
- os_sem.c:管理信 量(用于资源管理和同步)相关代码。
- os_mutex.c:互斥信 量相关代码。
- os_mem.c:固定大小内存管理相关。
- os_flag.c:flag相关代码。
- os_int.c:中断Deferred Post相关代码(当OS_CFG_ISR_POST_DEFERRED_EN == 1 (os_cfg.h))。
- os_pend_multi.c:任务等待多个信 量和队列相关代码。
- os_stat.c:统计任务相关的代码
-
采用uCOSIII主函数逻辑:
-
单任务系统:
- 关闭所有中断,防止影响系统启动,通常为调用BSP内的文件;
- 初始化系统:调用OSInit()函数创建2-5个系统任务(见任务管理),成功返回OS_ERR_NONE;
- 用户创建用户任务,调用OSTaskCreate()函数,用户在系统启动前可创建任意数量任务,但最好不要太多;
- 最后调用OSStart();启动系统;
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!
-
单任务系统: