首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

uCOS II 内核结构

uCOS II 内核结构

内核中主要包含以下的文件:

  1.uCOS-II Source->source:(与处理器类型无关的代码)

OS_CORE.C
系统初始化,开启多任务环境等的代码

OS_CPU_C.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
包含内核的其它C语言源文件


2.uCOS II配置文件(与应用程序有关)
INCLUDES .H
系统的全局头文件,在所有的源码中包含

OS_CFG .H
UCOS系统的全局配置

3.移植uCOS II (与处理器有关的代码)
OS_CPU .h
包含与处理器相关的常量、宏及结构体定义

OS_CPU_C.C
多任务栈初始化等与处理器有关的代码

OS_CPU_A.asm
汇编语言编写的启动任务、任务切换等四个重要函数

一.临界段
处理器处理临界代码都必须先关中断,再处理临界代码,然后再开中断。关中断时间对实时系统的实时响应很重要。所以是实时系统的一个很重要的指标。uCOS使用两个宏(在OS_CPU.h中定义。注:没个CPU都有自己的OS_CPU.h)。这两个宏分别为OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()关闭中断和打开中断。

例:
  • void function(void)
  • {
  •     OS_ENTER_CRITICAL(); //关闭中断
  •     /*uCOS II 临界代码段*/
  •     OS_EXIT_CRITICAL(); //打开中断
  • }

注意:在ODTimeDel()之类的函数调用的时候不能关闭中断,不然应用程序会死机。实现OS_ENTER_CRITICAL()以及OS_EXIT_CROTICAL()的方式有多种。可以参见《嵌入式实时操作系统》(邵贝贝译 第二版)74页内容。方法常见的有三种。
二:任务:

1.任务概述
    通常任务是一个无限循环。函数没有返回值。任务完成以后可以自我删除。(注意:删除不是任务代码删除了,只是这个任务不会再执行了;即使调用了OSTaskDel()这个任务也不会有返回值)。
    uCOS II 可以管理的任务可以达到64个,但是建议不要使用前四个优先级的任务和后四个优先级的任务。
    任务的创建可以使用OSTaskCreat()和OSTaskCreatExt()创建。这两个函数的说明请  点击这里  查看。

2.任务状态
    对于每一个任务来说,任务状态只有一下5个。(处于5个中的某一个)
    a.睡眠态:驻留在ROM或者RAM中,系统还没有管理,只有通过OSTaskCreat()或OSCreatExt()创建之后才能使得系统管理任务。
    b.就绪态:任务一旦建立就进入了就绪态,等待运行。
    c.运行态:当前任务正在执行。
    d.等待态:可以调用OSTimeDel()或者OSTimeDlyHMSM()使得任务进入等待状态。一直等待函数中定义的延时时间到了,这两个函数会强制执行任务转换,让下一个优先级更高的任务进入就绪态的任务运行。
    e.中断服务态:当前正在执行的任务被中断,进入中断服务态,响应中断是改任务被挂起。中断服务子程序占有了CPU的使用权。

当所有的任务都在等待时间的发生。或者等待延时的结束。uCOS II执行被称为空闲的内部任务(即OSTaskIde了())。
继承事业,薪火相传
返回列表