UCOSii源文件概要

        UCOSii的源代码主要包含以下几部分,ucosII_core里是ucosII源代码,无需更改,ucosII_port里是与CPU相关的代码,移植时若没有前人的例程代码需要自行进行编写,主要就是上下文切换等函数,若编译环境支持内嵌汇编语言,可以不要.asm文件,将代码写到.c文件里。ucosII_config里的includes.h包含了一些头文件,os_cfg.h用于系统裁剪(dbg.c/dbg.h、LIB文件夹在移植时未放进去,可以不用)。

与应用程序相关的文件:
1.INCLUDES.H
(1)简介:这是μC/OS-Ⅱ的主头文件,它的内部又包含了多个.h文件,在每个.C文件中都应该包含这个文件。
(2)源码:

#include    <stdio.h>
#include    <string.h>
#include    <ctype.h>
#include    <stdlib.h>
#include    <conio.h>
#include    <dos.h>
#include    <setjmp.h>      

#include    "\software\ucos-ii\ix86l\bc31\os_cpu.h"//与应用程序相关
#include    "os_cfg.h"                             //与应用程序相关
#include    "\software\ucos-ii\source\ucos_ii.h"   //与应用程序相关
#include    "\software\blocks\pc\bc31\pc.h"        //与应用程序相关


2.OS_CFG.H
(1)简介:它是配置文件,μC/OS-Ⅱ就是通过编译时的条件编译来实现软件系统的裁剪的,即把用户可剪裁的代码放#if#endif预编译指令之间,编译时根据#if预编译指令后面的常数的值来确定。例如:

#if OS_ARG_CHK_EN > 0
    if (prio > OS_LOWEST_PRIO) {            
        return (OS_PRIO_INVALID);
    }
#endif 


如果工程需要这个代码段,则需要在配置文件OS_CFG.H中把常数OS_ARG_CHK_EN设置为1;否则为0。所以,配置文件OS_CFG.H就是为用户设置上述的这些常数值的文件(用户可对OS_CFG.H中的这些预置值进行修改)。开发者根据实际工程需求,通过对OS_CFG.H中这些常数值的设置和修改,实现μC/OS-Ⅱ的可裁剪性,达到配置整个工程的目的。如下所示,根据需要配置,并不只有这些参数。

#define OS_MAX_EVENTS                             2 /* 应用中最多事件控制块的数目... */
/* ... 必须大于 0 */
#define OS_MAX_FLAGS                                5 /* 应用中最多事件标志组的数目... */
/* ... 必须大于 0 */
#define OS_MAX_MEM_PART                         5 /* 最多内存块的数目... */
/* ... 必须大于 0 */
#define OS_MAX_QS                                        2 /* 应用中最多对列控制块的数目... */
/* ... 必须大于 0 */
#define OS_MAX_TASKS                                 11 /* 应用中最多任务数目... */
/* ... 必须大于等于2 */
#define OS_LOWEST_PRIO                             12 /* 定义任务的最低优先级... */
/* ... 不得大于 63 ! */
#define OS_TASK_IDLE_STK_SIZE                 512 /* 统计任务堆栈容量( # 按照OS_STK的宽度数目) */
#define OS_TASK_STAT_EN                             1 /* 允许 (1) 或者禁止 (0) 统计任务 */
#define OS_TASK_STAT_STK_SIZE                 512 /* 空闲任务堆栈容量 (#按照OS_STK的宽度数目) */
#define OS_ARG_CHK_EN                               1 /* 允许 (1) 或者禁止 (0) 变量检查 */
#define OS_CPU_HOOKS_EN                          1 /* 在处理器移植文件中允许使用 uC/OS-II 的接口函数 */

/* -------------------事件标志管理 ------------------- */
#define OS_FLAG_EN                                 1 /* 允许 (1) 或者禁止 (0) 产生事件标志相关代码 */
#define OS_FLAG_WAIT_CLR_EN             1 /* 允许生成 Wait on Clear 事件标志代码 */
#define OS_FLAG_ACCEPT_EN                1 /* 允许生成 OSFlagAccept() */
#define OS_FLAG_DEL_EN                       1 /* 允许生成 OSFlagDel() */
#define OS_FLAG_QUERY_EN                 1 /* 允许生成 OSFlagQuery() */

/* -------------------消息邮箱管理 -------- ---------- */
#define OS_MBOX_EN         1 /* 允许 (1) 或者禁止 (0) 产生消息邮箱相关代码 */
#define OS_MBOX_ACCEPT_EN         1 /* 允许生成 OSMboxAccept() */
#define OS_MBOX_DEL_EN         1 /* 允许生成 OSMboxDel() */
#define OS_MBOX_POST_EN         1 /* 允许生成 OSMboxPost() */
#define OS_MBOX_POST_OPT_EN         1 /* 允许生成 OSMboxPostOpt() */
#define OS_MBOX_QUERY_EN         1 /* 允许生成 OSMboxQuery() */

/* ---------------------内存管理 --------------------- */
#define OS_MEM_EN         1 /* 允许 (1) 或者禁止 (0) 产生内存相关代码 */
#define OS_MEM_QUERY_EN         1 /* 允许生成 OSMemQuery() */

/* ---------------- 互斥型信号量管理 ----------------- */
#define OS_MUTEX_EN         1 /* 允许 (1) 或者禁止 (0) 产生互斥型信号量相关代码 */
#define OS_MUTEX_ACCEPT_EN         1 /* 允许生成 OSMutexAccept() */
#define OS_MUTEX_DEL_EN         1 /* 允许生成 OSMutexDel() */
#define OS_MUTEX_QUERY_EN         1 /* 允许生成 OSMutexQuery() */

/* -------------------消息队列号管理 ----------------- */
#define OS_Q_EN         1 /* 允许 (1) 或者禁止 (0) 产生消息队列相关代码 */
#define OS_Q_ACCEPT_EN         1 /* 允许生成 OSQAccept() */
#define OS_Q_DEL_EN         1 /* 允许生成 OSQDel() */
#define OS_Q_FLUSH_EN         1 /* 允许生成 OSQFlush() */
#define OS_Q_POST_EN         1 /* 允许生成 OSQPost() */
#define OS_Q_POST_FRONT_EN         1 /* 允许生成 OSQPostFront() */
#define OS_Q_POST_OPT_EN         1 /* 允许生成 OSQPostOpt() */
#define OS_Q_QUERY_EN         1 /* 允许生成 OSQQuery() */

/* ---------------------信号管理 --------------------- */
#define OS_SEM_EN                           1 /* 允许 (1) 或者禁止 (0) 产生信号量相关代码 */
#define OS_SEM_ACCEPT_EN          1 /* 允许生成 OSSemAccept() */
#define OS_SEM_DEL_EN                  1 /* 允许生成 OSSemDel() */
#define OS_SEM_QUERY_EN            1 /* 允许生成 OSSemQuery() */

/* -------------------任务管理 ----------------------- */
#define OS_TASK_CHANGE_PRIO_EN         1 /* 允许生成 OSTaskChangePrio() 函数代码 */
#define OS_TASK_CREATE_EN         1 /* 允许生成 OSTaskCreate() 函数代码 */
#define OS_TASK_CREATE_EXT_EN         1 /* 允许生成 OSTaskCreateExt() 函数代码 */
#define OS_TASK_DEL_EN         1 /* 允许生成 OSTaskDel() 函数代码 */
#define OS_TASK_SUSPEND_EN         1 /* 允许生成 OSTaskSuspend() and OSTaskResume() 函数代码*/
#define OS_TASK_QUERY_EN 1 /* 允许生成 OSTaskQuery() 函数代码 */

/* ----------------------时间管理 -------------------- */
#define OS_TIME_DLY_HMSM_EN        1 /* 允许生成OSTimeDlyHMSM() 函数代码 */
#define OS_TIME_DLY_RESUME_EN    1 /* 允许生成OSTimeDlyResume() 函数代码 */
#define OS_TIME_GET_SET_EN            1 /* 允许生成 OSTimeGet() 和 OSTimeSet() 函数代码 */ 

/* -------------------- 混合管理 --------------------- */
#define OS_SCHED_LOCK_EN         1 /* 允许生成 OSSchedLock() 和 OSSchedUnlock() 代码 */
#define OS_TICKS_PER_SEC         200 /* 设置每秒的节拍数目 */
typedef INT16U         OS_FLAGS; /* 事件标志的数据类型 (8位, 16位 或 32 位) */

与计算机硬件相关的文件:
OS_CPU.H:它与处理器相关,一些部分应根据处理器的情况进行修改(与处理器相关的常数和宏),还有一些定义数据类型的部分,无需修改。
OS_CPU_A.ASM:它集中了与处理器相关的汇编语言代码。它必须根据实际的处理器进行移植。
OS_CPU_C.C:它集中了与处理器相关的C语言代码。它也必须根据实际的处理器进行移植。

系统内核的各种服务文件:

3-11所罗列出来的函数是在应用程序中可以调用的,其余内部函数不能在应用程序中被调用。

1. uCOS_II.H  (ucos内部函数参数设定,无需更改)
2. uCOS_II.C  (包含所有UCOSii源文件,移植时不用加入工程) 
3. OS_CORE.C (内核结构管理文件)
* OSInit() 初始化UCOS-II函数
* OSIntEnter() 中断函数正在执行
* OSIntExit() 中断函数已经完成(脱离中断)
* OSSchedLock() 给调度器上锁
* OSSchedUnlock() 给调度器解锁
* OSStart() 启动多个任务
* OSStatInit() 统计任务初始化
* OSVersion() 获得版本号
4. OS_FLAG.C (事件标志组代码)
* OSFlagAccept() 检查事件标志组函数(标志组的指针、事件标志位、等待事件标志位的方式、错误码指针)
* OSFlagCreate() 建立一个事件标志组(初值、错误码)
* OSFlagDel() 删除一个事件标志组(指针、条件值、错误值)
* OSFlagPend() 等待事件标志组的事件标志位(事件组指针、需要检查的标志位、等待事件标志位的方式、
* 允许等待的时钟节拍、出错代码的时钟节拍)
* OSFlagPost() 置位或清0事件标志组中的标志位(指针、标志位、条件值、错误码)
* OSFlagQuery() 查询事件标志组的当前事件标志状态(事件标志组的指针、错误代码的指针)
5. OS_MUTEX.C  (包含主要互斥型信号量代码)
* OSMutexAccept () 无等待地获取互斥型信号量[任务不挂起](信号量指针、错误代码)
* OSMutexCreate () 建立并初始化一个互斥型信号量(优先级继承优先级(PIP)、出错代码指针)
* OSMutexDel () 删除互斥型信号量(信号指针、删除条件、错误指针)
* OSMutexPend () 等待一个互斥型信号量(指针、等待超时时限、出错代码指针)
* OSMutexPost () 释放一个互斥型信号量(互斥型信号量指针)
* OSMutexQuery () 查询一个互斥型信号量的当前状态(互斥型信号量指针、状态数据结构指针)
6. OS_MBOX.C  (消息邮件管理代码)
* OSMboxAccept () 查看消息邮箱(消息邮箱指针)
* OSMboxCreate () 建立并初始化一个消息邮箱(msg 参数不为空含内容)
* OSMboxDel () 删除消息邮箱(消息邮箱指针、删除条件、出错代码指针)
* OSMboxPend () 等待一个消息邮箱函数(消息邮箱指针、允许等待的时钟节拍、代码错误指针)
* OSMboxPost () 发送消息函数(消息邮箱指针、即将实际发送给任务的消息)
* OSMboxPostOpt () 向邮箱发送一则消息(邮箱指针、消息、条件)
* OSMboxQuery () 查询一个邮箱的当前状态(信号量指针、状态数据结构指针)
7. OS_q.C  (消息队列管理代码)
* OSQAccept () 检查消息队列中是否已经有需要的消息(消息队列的指针)
* OSQCreate () 建立一个消息队列(消息内存区的基地址(指针数组)、消息内存区的大小)
* OSQDel () 删除一个消息队列(消息队列指针、删除条件、错误指针)
* OSQFlush () 清空消息队列(指向得到消息队列的指针)
* OSQPend () 任务等待消息队列中的消息(消息队列指针、允许等待的时钟节拍、代码错误指针)
* OSQPost () 向消息队列发送一则消息FIFO(消息队列指针、发送的消息)
* OSQPostFront () 向消息队列发送一则消息LIFO(消息队列指针、发送的消息)
* OSQPostOpt () 向消息队列发送一则消息LIFO(消息队列指针、发送的消息、发送条件)
* OSQQuery () 查询一个消息队列的当前状态(信号量指针、状态数据结构指针)
8. OS_MEM.C  (内存管理项代码)
* OSMemCreate () 建立并初始化一块内存区(起始地址、需要的内存块数目、内存块大小、返回错误的指针)
* OSMemGet () 从内存区分配一个内存块
* OSMemPut () 释放一个内存块,内存块必须释放回原先申请的内存区
* OSMemQuery () 得到内存区的信息
9. OS_SEM.C  (信号量程序函数)
* OSSemAccept() 无条件地等待请求一个信号量函数
* OSSemCreate() 建立并初始化一个信号量(输入一个信号量值)
* OSSemDel() 删除一个信号量(信号指针、删除条件、错误指针)
* OSSemPend () 等待一个信号量函数(信号量指针、允许等待的时钟节拍、代码错误指针)
* OSSemPost () 发出一个信号量函数(信号量指针)
* OSSemQuery () 查询一个信号量的当前状态(信号量指针、状态数据结构指针)
10. OS_TASK.C  (任务管理代码)
* OSTaskChangePrio () :改变一个任务的优先级(任务旧的优先级、任务新的优先级)
* OSTaskCreate () :建立任务(任务代码指针、传递参数指针、分配任务堆栈栈顶指针、任务优先级)
* OSTaskCreateExt () :建立扩展任务(任务代码指针/传递参数指针/分配任务堆栈栈顶指针/分配任务优先级//(未来的)优先级标识(与优先级相同)/分配任务堆栈栈底指针/指定堆栈的容量(检验用)//指向用户附加的数据域的指针/建立任务设定选项)
* OSTaskDel () :删除任务(任务的优先级)
 
* OSTaskDelReq (): 请求一个任务删除其它任务或自身?(任务的优先级)
* OSTaskResume (): 唤醒一个用OSTaskSuspend()函数挂起的任务(任务的优先级)
 
* OSTaskStkChk () :检查任务堆栈状态(任务优先级、检验堆栈数据结构)
* OSTaskSuspend () :无条件挂起一个任务(任务优先级)
 
* OSTaskQuery () :获取任务信息(任务指针、保存数据结构指针)
11. OS_TIME.C  (时钟管理代码)
* OSTimeDly () :任务延时函数(时钟节拍数)
* OSTimeDlyHMSM (): 将一个任务延时若干时间(设定时、分、秒、毫秒)
* OSTimeDlyResume () :唤醒一个用OSTimeDly()或OSTimeDlyHMSM()函数的任务(优先级)
* OSTimeGet () :获取当前系统时钟数值
* OSTimeSet () :设置当前系统时钟数值
12. OS_TMR.C :UCOSII软件定时器
13. 内部函数原型 ,在应用程序中不能使用它们
* OS_Dummy(): 建立一个虚拟函数
 
* OS_EventTaskRdy() :使一个任务进入就绪态(OS_EVENT *pevent, void *msg, INT8U msk)
 
* OS_EventTaskWait() :使一个任务进入等待某事件发生状态(ECB指针)
* OS_EventTO() :由于超时而将任务置为就绪态(ECB指针)
 
* OS_EventWaitListInit():事件控制块列表初始化(事件控制块指针)
 
* OS_FlagInit() :初始化事件标志结构
 
* OS_FlagUnlink() :把这个OS_FLAG_NODE从事件标志组的等待任务链表中删除(OS_FLAG_NODE *pnode)
 
* OS_MemInit() :初始化内存分区
 
* OS_QInit() :初始化事件队列结构
 
* OS_Sched() :任务调度函数
 
* OS_TaskIdle(): 空闲任务函数(指向一个数据结构)
 
* OS_TaskStat() :统计任务(指向一个数据结构)
 
* OS_TCBInit() :初始化任务控制块TCB(优先级指针、栈顶指针、栈底指针、任务标志符、
* 堆栈容量、扩展指针、选择项)

\SOFTWARE The main directory from the root where all software-related files are placed. \SOFTWARE\BLOCKS The main directory where all ‘Building Blocks’ are located. With μC/OS-II, I included a ‘building block’ that handles DOS-type compatible functions that are used by the example code. \SOFTWARE\BLOCKS\TO This directory contains the files for the TO utility (see Appendix E, TO). The source file is TO.C and is found in the \SOFTWARE\TO\SOURCE directory. The DOS executable file (TO.EXE) is found in the \SOFTWARE\TO\EXE directory. Note that TO requires a file called TO.TBL which must reside on your root directory. An example of TO.TBL is also found in the \SOFTWARE\TO\EXE directory. You will need to move TO.TBL to the root directory if you are to use TO.EXE. \SOFTWARE\uCOS-II The main directory where all μC/OS-II files are located. \SOFTWARE\uCOS-II\EX1_x86L This directory contains the source code for EXAMPLE #1 (see section 1.07, Example #1) which is intended to run under DOS (or a DOS window under Windows 95). \SOFTWARE\uCOS-II\EX2_x86L This directory contains the source code for EXAMPLE #2 (see section 1.08, Example #2) which is intended to run under DOS (or a DOS window under Windows 95). \SOFTWARE\uCOS-II\EX3_x86L This directory contains the source code for EXAMPLE #3 (see section 1.09, Example #3) which is intended to run under DOS (or a DOS window under Windows 95). \SOFTWARE\uCOS-II\Ix86L This directory contains the source code for the processor dependent code (a.k.a. the port) of μC/OS-II for an 80x86 Real-Mode, Large Model processor. \SOFTWARE\uCOS-II\SOURCE This directory contains the source code for processor independent portion of μC/OS-II. This code is fully portable to other processor architectures.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值