uCOS操作系统个基本函数汇总.pdf
- 文档编号:3210380
- 上传时间:2022-11-20
- 格式:PDF
- 页数:15
- 大小:335.98KB
uCOS操作系统个基本函数汇总.pdf
《uCOS操作系统个基本函数汇总.pdf》由会员分享,可在线阅读,更多相关《uCOS操作系统个基本函数汇总.pdf(15页珍藏版)》请在冰豆网上搜索。
uC/OS操作操作系统系统46个个基本基本函数函数汇总汇总VoidOSInit(void);所属文件OS_CORE.C调用者启动代码开关量无OSinit()初始化C/OS-,对这个函数的调用必须在调用OSStart()函数之前,而OSStart()函数真正开始运行多任务。
VoidOSIntEnter(void);所属文件OS_CORE.C调用者中断开关量无OSIntEnter()通知C/OS-一个中断处理函数正在执行,这有助于C/OS-掌握中断嵌套的情况。
OSIntEnter()函数通常和OSIntExit()函数联合使用。
注意/警告:
在任务级不能调用该函数。
如果系统使用的处理器能够执行自动的独立执行读取-修改-写入的操作,那么就可以直接递增中断嵌套层数(OSIntNesting),这样可以避免调用函数所带来的额外的开销。
VoidOSIntExit(void);所属文件OS_CORE.C调用者中断开关量无OSIntExit()通知C/OS-一个中断服务已执行完毕,这有助于C/OS-掌握中断嵌套的情况。
通常OSIntExit()和OSIntEnter()联合使用。
当最后一层嵌套的中断执行完毕后,如果有更高优先级的任务准备就绪,C/OS-会调用任务调度函数,在这种情况下,中断返回到更高优先级的任务而不是被中断了的任务。
注意/警告:
在任务级不能调用该函数。
并且即使没有调用OSIntEnter()而是使用直接递增OSIntNesting的方法,也必须调用OSIntExit()函数。
VoidOSSchedLock(void);所属文件OS_CORE.C调用者任务或中断开关量N/AOSSchedLock()函数停止任务调度,只有使用配对的函数OSSchedUnlock()才能重新开始内核的任务调度。
调用OSSchedLock()函数的任务独占CPU,不管有没有其他高优先级的就绪任务。
在这种情况下,中断仍然可以被接受和执行(中断必须允许)。
OSSchedLock()函数和OSSchedUnlock()函数必须配对使用。
C/OS-可以支持多达254层的OSSchedLock()函数嵌套,必须调用同样次数的OSSchedUnlock()函数才能恢复任务调度。
注意/警告:
任务调用了调用了OSSchedLock()函数后,决不能再调用()函数后,决不能再调用可能导致当前任务挂起的系统函数:
可能导致当前任务挂起的系统函数:
OSTimeDly(),(),OSTimeDlyHMSM(),(),OSSemPend(),OSMboxPend(),OSQPend()。
因为任务调度已经被禁止,其他任务不能运行,这会导致系统死锁。
VoidOSSchedUnlock(void);所属文件OS_CORE.C调用者任务或中断开关量N/A在调用了OSSchedLock()函数后,OSSchedUnlock()函数恢复任务调度。
注意/警告:
任务调用了OSSchedLock()函数后,决不能再调用可能导致当前任务挂起的系统函数:
OSTimeDly(),OSTimeDlyHMSM(),OSSemPend(),OSMboxPend(),OSQPend()。
因为任务调度已经被禁止,其他任务不能运行,这会导致系统死锁。
voidOSStart(void);所属文件OS_CORE.C调用者初始代码开关量无OSStart()启动C/OS-II的多任务环境。
注意/警告:
在调用OSStart()之前必须先调用OSInit()。
在用户程序中OSStart()只能被调用一次。
第二次调用OSStart()将不进行任何操作。
voidOSStatInit(void);所属文件OS_CORE.C调用者初始代码开关量OS_TASK_STAT_EN&OS_TASK_CREATE_EXT_ENOSStatInit()获取当系统中没有其他任务运行时,32位计数器所能达到的最大值。
OSStatInit()的调用时机是当多任务环境已经启动,且系统中只有一个任务在运行。
也就是说,该函数只能在第一个被建立并运行的任务中调用。
INT8UOSTaskChangePrio(INT8Uoldprio,INT8Unewprio);所属文件OS_TASK.C调用者任务开关量OS_TASK_CHANGE_PRIO_ENOSTaskChangePrio()改变一个任务的优先级。
参数oldprio是任务原先的优先级。
newprio是任务的新优先级。
返回值OSTaskChangePrio()的返回值为下述之一:
OS_NO_ERR:
任务优先级成功改变。
OS_PRO_INVALID:
参数中的任务原先优先级或新优先级大于或等于OS_LOWEST_PRIO。
OS_PRIO_EXIST:
参数中的新优先级已经存在。
OS_PRIO_ERR:
参数中的任务原先优先级不存在。
注意/警告:
参数中的新优先级必须是没有使用过的,否则会返回错误码。
在OSTaskChangePrio()中还会先判断要改变优先级的任务是否存在INT8UOSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT8Uprio);所属文件OS_TASK.C调用者任务或初始化代码开关量无OSTaskCreate()建立一个新任务。
任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立。
中断处理程序中不能建立任务。
一个任务必须为无限循环结构,且不能有返回点。
OSTaskCreate()是为与先前的C/OS版本保持兼容,新增的特性在OSTaskCreateExt()函数中。
无论用户程序中是否产生中断,在初始化任务堆栈时,堆栈的结构必须与CPU中断后寄存器入栈的顺序结构相同。
详细说明请参考所用处理器的手册。
参数task是指向任务代码的指针。
Pdata指向一个数据结构,该结构用来在建立任务时向任务传递参数。
ptos为指向任务堆栈栈顶的指针。
任务堆栈用来保存局部变量,函数参数,返回地址以及任务被中断时的CPU寄存器内容。
任务堆栈的大小决定于任务的需要及预计的中断嵌套层数。
计算堆栈的大小,需要知道任务的局部变量所占的空间,可能产生嵌套调用的函数,及中断嵌套所需空间。
如果初始化常量OS_STK_GROWTH设为1,堆栈被设为从内存高地址向低地址增长,此时ptos应该指向任务堆栈空间的最高地址。
反之,如果OS_STK_GROWTH设为0,堆栈将从内存的低地址向高地址增长。
prio为任务的优先级。
每个任务必须有一个唯一的优先级作为标识。
数字越小,优先级越高。
返回值OSTaskCreate()的返回值为下述之一:
OS_NO_ERR:
函数调用成功。
OS_PRIO_EXIST:
具有该优先级的任务已经存在。
OS_PRIO_INVALID:
参数指定的优先级大于OS_LOWEST_PRIO。
OS_NO_MORE_TCB:
系统中没有OS_TCB可以分配给任务了。
注意/警告:
任务堆栈必须声明为OS_STK类型。
在任务中必须调用C/OS提供的下述过程之一:
延时等待、任务挂起、等待事件发生(等待信号量,消息邮箱、消息队列),以使其他任务得到CPU。
用户程序中不能使用优先级0,1,2,3,以及OS_LOWEST_PRIO-3,OS_LOWEST_PRIO-2,OS_LOWEST_PRIO-1,OS_LOWEST_PRIO。
这些优先级C/OS系统保留,其余的56个优先级提供给应用程序。
INT8UOSTaskCreateExt(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT8Uprio,INT16Uid,OS_STK*pbos,INT32Ustk_size,void*pext,INT16Uopt);所属文件OS_TASK.C调用者任务或初始化代码开关量无OSTaskCreateExt()建立一个新任务。
与OSTaskCreate()不同的是,OSTaskCreateExt()允许用户设置更多的细节内容。
任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立,但中断处理程序中不能建立新任务。
一个任务必须为无限循环结构(如下所示),且不能有返回点。
参数task是指向任务代码的指针。
Pdata指针指向一个数据结构,该结构用来在建立任务时向任务传递参数。
下例中说明C/OS中的任务代码结构以及如何传递参数pdata:
(如果在程序中不使用参数pdata,为了避免在编译中出现“参数未使用”的警告信息,可以写一句pdata=pdata;)ptos为指向任务堆栈栈顶的指针。
任务堆栈用来保存局部变量,函数参数,返回地址以及中断时的CPU寄存器内容。
任务堆栈的大小决定于任务的需要及预计的中断嵌套层数。
计算堆栈的大小,需要知道任务的局部变量所占的空间,可能产生嵌套调用的函数,及中断嵌套所需空间。
如果初始化常量OS_STK_GROWTH设为1,堆栈被设为向低端增长(从内存高地址向低地址增长)。
此时ptos应该指向任务堆栈空间的最高地址。
反之,如果OS_STK_GROWTH设为0,堆栈将从低地址向高地址增长。
prio为任务的优先级。
每个任务必须有一个唯一的优先级作为标识。
数字越小,优先级越高。
id是任务的标识,目前这个参数没有实际的用途,但保留在OSTaskCreateExt()中供今后扩展,应用程序中可设置id与优先级相同。
pbos为指向堆栈底端的指针。
如果初始化常量OS_STK_GROWTH设为1,堆栈被设为从内存高地址向低地址增长。
此时pbos应该指向任务堆栈空间的最低地址。
反之,如果OS_STK_GROWTH设为0,堆栈将从低地址向高地址增长。
pbos应该指向堆栈空间的最高地址。
参数pbos用于堆栈检测函数OSTaskStkChk()。
stk_size指定任务堆栈的大小。
其单位由OS_STK定义:
当OS_STK的类型定义为INT8U、INT16U、INT32U的时候,stk_size的单位为分别为字节(8位)、字(16位)和双字(32位)。
pext是一个用户定义数据结构的指针,可作为TCB的扩展。
例如,当任务切换时,用户定义的数据结构中可存放浮点寄存器的数值,任务运行时间,任务切入次数等等信息。
opt存放与任务相关的操作信息。
opt的低8位由C/OS保留,用户不能使用。
用户可以使用opt的高8位。
每一种操作由opt中的一位或几位指定,当相应的位被置位时,表示选择某种操作。
当前的C/OS版本支持下列操作:
OS_TASK_OPT_STK_CHK:
决定是否进行任务堆栈检查。
OS_TASK_OPT_STK_CLR:
决定是否清空堆栈。
OS_TASK_OPT_SAVE_FP:
决定是否保存浮点寄存器的数值。
此项操作仅当处理器有浮点硬件时有效。
保存操作由硬件相关的代码完成。
其他操作请参考文件uCOS_II.H。
返回值OSTaskCreateExt()的返回值为下述之一:
OS_NO_ERR:
函数调用成功。
OS_PRIO_EXIST:
具有该优先级的任务已经存在。
OS_PRIO_INVALID:
参数指定的优先级大于OS_LOWEST_PRIO。
OS_NO_MORE_TCB:
系统中没有OS_TCB可以分配给任务了。
注意/警告:
任务堆栈必须声明为OS_STK类型。
在任务中必须进行C/OS提供的下述过程之一:
延时等待、任务挂起、等待事件发生(等待信号量,消息邮箱、消息队列),以使其他任务得到CPU。
用户程序中不能使用优先级0,1,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- uCOS 操作系统 基本 函数 汇总