当前位置:   article > 正文

UCOSii源文件概要_ucosii源代码

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)源码:

  1. #include    <stdio.h>
  2. #include    <string.h>
  3. #include    <ctype.h>
  4. #include    <stdlib.h>
  5. #include    <conio.h>
  6. #include    <dos.h>
  7. #include    <setjmp.h>      
  8. #include    "\software\ucos-ii\ix86l\bc31\os_cpu.h"//与应用程序相关
  9. #include    "os_cfg.h"                             //与应用程序相关
  10. #include    "\software\ucos-ii\source\ucos_ii.h"   //与应用程序相关
  11. #include    "\software\blocks\pc\bc31\pc.h"        //与应用程序相关


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

  1. #if OS_ARG_CHK_EN > 0
  2.     if (prio > OS_LOWEST_PRIO) {            
  3.         return (OS_PRIO_INVALID);
  4.     }
  5. #endif 


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

  1. #define OS_MAX_EVENTS                             2 /* 应用中最多事件控制块的数目... */
  2. /* ... 必须大于 0 */
  3. #define OS_MAX_FLAGS                                5 /* 应用中最多事件标志组的数目... */
  4. /* ... 必须大于 0 */
  5. #define OS_MAX_MEM_PART                         5 /* 最多内存块的数目... */
  6. /* ... 必须大于 0 */
  7. #define OS_MAX_QS                                        2 /* 应用中最多对列控制块的数目... */
  8. /* ... 必须大于 0 */
  9. #define OS_MAX_TASKS                                 11 /* 应用中最多任务数目... */
  10. /* ... 必须大于等于2 */
  11. #define OS_LOWEST_PRIO                             12 /* 定义任务的最低优先级... */
  12. /* ... 不得大于 63 ! */
  13. #define OS_TASK_IDLE_STK_SIZE                 512 /* 统计任务堆栈容量( # 按照OS_STK的宽度数目) */
  14. #define OS_TASK_STAT_EN                             1 /* 允许 (1) 或者禁止 (0) 统计任务 */
  15. #define OS_TASK_STAT_STK_SIZE                 512 /* 空闲任务堆栈容量 (#按照OS_STK的宽度数目) */
  16. #define OS_ARG_CHK_EN                               1 /* 允许 (1) 或者禁止 (0) 变量检查 */
  17. #define OS_CPU_HOOKS_EN                          1 /* 在处理器移植文件中允许使用 uC/OS-II 的接口函数 */
  18. /* -------------------事件标志管理 ------------------- */
  19. #define OS_FLAG_EN                                 1 /* 允许 (1) 或者禁止 (0) 产生事件标志相关代码 */
  20. #define OS_FLAG_WAIT_CLR_EN             1 /* 允许生成 Wait on Clear 事件标志代码 */
  21. #define OS_FLAG_ACCEPT_EN                1 /* 允许生成 OSFlagAccept() */
  22. #define OS_FLAG_DEL_EN                       1 /* 允许生成 OSFlagDel() */
  23. #define OS_FLAG_QUERY_EN                 1 /* 允许生成 OSFlagQuery() */
  24. /* -------------------消息邮箱管理 -------- ---------- */
  25. #define OS_MBOX_EN         1 /* 允许 (1) 或者禁止 (0) 产生消息邮箱相关代码 */
  26. #define OS_MBOX_ACCEPT_EN         1 /* 允许生成 OSMboxAccept() */
  27. #define OS_MBOX_DEL_EN         1 /* 允许生成 OSMboxDel() */
  28. #define OS_MBOX_POST_EN         1 /* 允许生成 OSMboxPost() */
  29. #define OS_MBOX_POST_OPT_EN         1 /* 允许生成 OSMboxPostOpt() */
  30. #define OS_MBOX_QUERY_EN         1 /* 允许生成 OSMboxQuery() */
  31. /* ---------------------内存管理 --------------------- */
  32. #define OS_MEM_EN         1 /* 允许 (1) 或者禁止 (0) 产生内存相关代码 */
  33. #define OS_MEM_QUERY_EN         1 /* 允许生成 OSMemQuery() */
  34. /* ---------------- 互斥型信号量管理 ----------------- */
  35. #define OS_MUTEX_EN         1 /* 允许 (1) 或者禁止 (0) 产生互斥型信号量相关代码 */
  36. #define OS_MUTEX_ACCEPT_EN         1 /* 允许生成 OSMutexAccept() */
  37. #define OS_MUTEX_DEL_EN         1 /* 允许生成 OSMutexDel() */
  38. #define OS_MUTEX_QUERY_EN         1 /* 允许生成 OSMutexQuery() */
  39. /* -------------------消息队列号管理 ----------------- */
  40. #define OS_Q_EN         1 /* 允许 (1) 或者禁止 (0) 产生消息队列相关代码 */
  41. #define OS_Q_ACCEPT_EN         1 /* 允许生成 OSQAccept() */
  42. #define OS_Q_DEL_EN         1 /* 允许生成 OSQDel() */
  43. #define OS_Q_FLUSH_EN         1 /* 允许生成 OSQFlush() */
  44. #define OS_Q_POST_EN         1 /* 允许生成 OSQPost() */
  45. #define OS_Q_POST_FRONT_EN         1 /* 允许生成 OSQPostFront() */
  46. #define OS_Q_POST_OPT_EN         1 /* 允许生成 OSQPostOpt() */
  47. #define OS_Q_QUERY_EN         1 /* 允许生成 OSQQuery() */
  48. /* ---------------------信号管理 --------------------- */
  49. #define OS_SEM_EN                           1 /* 允许 (1) 或者禁止 (0) 产生信号量相关代码 */
  50. #define OS_SEM_ACCEPT_EN          1 /* 允许生成 OSSemAccept() */
  51. #define OS_SEM_DEL_EN                  1 /* 允许生成 OSSemDel() */
  52. #define OS_SEM_QUERY_EN            1 /* 允许生成 OSSemQuery() */
  53. /* -------------------任务管理 ----------------------- */
  54. #define OS_TASK_CHANGE_PRIO_EN         1 /* 允许生成 OSTaskChangePrio() 函数代码 */
  55. #define OS_TASK_CREATE_EN         1 /* 允许生成 OSTaskCreate() 函数代码 */
  56. #define OS_TASK_CREATE_EXT_EN         1 /* 允许生成 OSTaskCreateExt() 函数代码 */
  57. #define OS_TASK_DEL_EN         1 /* 允许生成 OSTaskDel() 函数代码 */
  58. #define OS_TASK_SUSPEND_EN         1 /* 允许生成 OSTaskSuspend() and OSTaskResume() 函数代码*/
  59. #define OS_TASK_QUERY_EN 1 /* 允许生成 OSTaskQuery() 函数代码 */
  60. /* ----------------------时间管理 -------------------- */
  61. #define OS_TIME_DLY_HMSM_EN        1 /* 允许生成OSTimeDlyHMSM() 函数代码 */
  62. #define OS_TIME_DLY_RESUME_EN    1 /* 允许生成OSTimeDlyResume() 函数代码 */
  63. #define OS_TIME_GET_SET_EN            1 /* 允许生成 OSTimeGet() 和 OSTimeSet() 函数代码 */
  64. /* -------------------- 混合管理 --------------------- */
  65. #define OS_SCHED_LOCK_EN         1 /* 允许生成 OSSchedLock() 和 OSSchedUnlock() 代码 */
  66. #define OS_TICKS_PER_SEC         200 /* 设置每秒的节拍数目 */
  67. 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(优先级指针、栈顶指针、栈底指针、任务标志符、
* 堆栈容量、扩展指针、选择项)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/655012
推荐阅读
相关标签
  

闽ICP备14008679号