赞
踩
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所罗列出来的函数是在应用程序中可以调用的,其余内部函数不能在应用程序中被调用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。