uC/OS-III文件结构

来源:互联网 发布:板式家具设计软件 编辑:程序博客网 时间:2024/06/16 06:39

1、配置文件
cpu_cfg.h:定义CPU相关指令(计算前导0)存在与否、CPU_NAME、时间戳、关中断时间测量等CPU相关配置

lib_cfg.h:库的相关配置

os_cfg.h:系统相关代码的配置,这部分是拓展性的,比如可以配置是否裁剪定时器等内核对象的宏

os_cfg_app.h:系统相关代码配置,这部分是必须设置的,比如节拍频率的配置

2、应用程序
app.c任务相关代码的编写

app.h:任务相关声明、堆栈大小定义、优先级的设置

3、uC/OS-III与CPU无关代码
os_cfg_app.c:系统任务配置

os_type.h:内核对象数据类型定义、及相关代码

os_dbg.c:和调试相关的数据类型的定义、及相关代码

os_flag.c:时间标志组相关函数

os_int.c:中断延迟相关函数

os_mem.c:内存分区相关函数

os_msg.c:消息相关函数

os_mutex.c:二值信号量相关函数

os_pend_multi.c:等待多个内核相关函数

os_prio.c:优先级相关函数

os_q.c:队列相关函数

os_sem.c:多值信号楼相关函数

os_stat.c:统计信息相关函数

os_task.c:任务相关函数

os_tick.c:时钟节拍相关函数

os_time.c:时间管理相关函数

os_tmr.c:定时器相关函数

os_var.c:变量定义相关函数

os.h:相关数据类型结构定义

os_core.c:整个uC/OS-III相对比较底层的函数,供其他对象内核调用,另外部分是uC-III核心的函数

4、库
lib_ascii.c
lib_ascii.h

lib_def.h

lib_math.c
lib_math.h

lib_mem_a.asm

lib_mem.c
lib_mem.h

lib_str.c
lib_str.h

5、uC/OS-III与移植相关的代码
os_cpu_a.asm:CPU相关的汇编函数定义及声明,比如关中断,前导零指令的调用

os_cpu_c.c:CPU相关c语言函数的定义及声明,c语言计算前导零个数等。

os_cpu.h:CPU相关配置及以上两个文件函数的声明

6、uC/OS-III与CPU相关的代码
cpu_def.h:CPU相关配置,比如关中断方式,堆栈增长方向,字长等等

cpu_c.c:uC/OS-III封装好的CPU相关c语言代码,比如中断优先级的配置

cpu_a.asm:uC/OS-III封装好的相关汇编代码,比如关中断

cpu_core.c:CPU初始化函数、CPU名字、时间戳计算CPU核心函数

cpu_core.h:CPU核心配置,编译设置,cpu_core.c相关函数声明等

7、其他CPU相关文件
。。。

①配置文件,通过定义这些文件里宏的值可以轻易地裁剪 uC/OS-III 的功能。
②用户应用文件,定义和声明应用任务。
③内核服务文件,其代码与 CPU 无关,可以不做任何修改移植到任何 CPU。本书主要讲解
这部分内容。
④底层函数库,比如字符串的常规操作,常用的数学计算,等等。
⑤CPU 移植文件,用户如果想要移植 uC/OS-III 到不同平台上,需要修改这部分代码。
⑥CPU 配置文件,主要是 CPU 的一些工作模式和服务函数。
⑦其他 CPU 相关文件。

软件定时器
软件定时器的功能跟硬件定时器一样,主要用于定时,但其精度达不到硬件定时器的标准,可以用于定时一些精度要求不是特别严格的事件。理论上,uC/OS-III 可以创建无数个软件定时器,这是硬件定时器无法媲美的。

多值信号量
多值信号量主要用于管理资源和标志事件的发生。 管理资源的一个常用仿例就是停车场,把总停车位看做信号量,每次申请一个停车位信号量就减 1,如果停车位为 0,就申请不到,但可以等待其它汽车释放停车位。标志事件的发生类似于裸机里常用的事件标志变量,就是标志某事是否发生,然后通知任务。

互斥信号量
互斥信号量的作用是保护共享资源,避免共享资源正在被重写时被其它任务读取,这样读取到的数据就有错误。互斥信号量的作用跟多值信号量的作用有些重叠,多值信号量的执行时间少于互斥信号量,但多个任务访问共享资源时,容易出现优先级反转的问题,这会降低系统的可预知性,而互斥信号量可以防止优先级反转,所以建议在互斥信号量可以解决需要时,就优先使用互斥信号量。

消息队列
消息队列是由多个消息串联而成的一个机制, 需要消息的任务就从消息队列的出口端获取,如果消息队列里没有消息了,可以选择等待或者不等待消息的到来。消息可以比信号量携带更丰富的信息,可以是任意长度的消息内容。

事件标志组
事件标志组用于标志若干个事件否发生的组合。 这个功能可以轻易地实现键盘的按键组合。

任务信号量
任务信号量的作用与多值信号量的一样,但多值信号量是所有任务都可以申请使用,而任务信号量却只能给一个特定任务使用,也就是说任务信号量是一个任务本身的属性,但其他任务都可以给这个任务发送任务信号量。

任务消息队列
任务消息队列的作用与(普通)消息队列的一样,但(普通)消息队列是所有任务都可以申请它的消息,而任务任务消息队列的消息却只能给一个特定任务使用,也就是说任务消息队列是一个任务本身的属性,但其他任务都可以给这个任务发送任务息。

内存管理(分区)
内存管理(分区)主要是为了尽量减少内存在不断分配和释放过程造成的内存碎片,避免过多的浪费内存。内存分区就是一次性开辟一大块连续内存,然后将内存分区平均分成若干个内存块,需要使用内存时就申请一个内存块,用完了再释放回内存分区,这样就实现内存块的循环使用。