1、Void OSSchedLock(void);所属文件 OS_CORE.C 调用者 任务或中断 开关量 N/A OSSchedLock()函数停止任务调度,只有使用配对的函数 OSSchedUnlock()才能重新开始内核的任务调度。调用 OSSchedLock()函数的任务独占 CPU,不管有没有其他高优先级的就绪任务。在这种情况下,中断仍然可以被接受和执行(中断必须允许)。OSSchedLock()函数和 OSSchedUnlock()函数必须配对使用。C/OS-可以支持多达 254 层的 OSSchedLock()函数嵌套,必须调用同样次数的 OSSchedUnlock()函数才能恢复任
2、务调度。注意/警告:任务调用了调用了 OSSchedLock()函数后,决不能再调用()函数后,决不能再调用 可能导致当前任务挂起的系统函数:可能导致当前任务挂起的系统函数:OSTimeDly(),(),OSTimeDlyHMSM(),(),OSSemPend(),OSMboxPend(),OSQPend()。因为任务调度已经被禁止,其他任务不能运行,这会导致系统死锁。Void OSSchedUnlock(void);所属文件 OS_CORE.C 调用者 任务或中断 开关量 N/A 在 调用了 OSSchedLock()函数后,OSSchedUnlock()函数恢复任务调度。任务调用了 OSS
3、chedLock()函数后,决不能再调用可能导致当前任务挂起的系统函 数:OSTimeDly(),OSTimeDlyHMSM(),OSSemPend(),OSMboxPend(),OSQPend()。因为任务调度已 经被禁止,其他任务不能运行,这会导致系统死锁。void OSStart(void);所属文件 OS_CORE.C 调用者 初始代码 开关量 无 OSStart()启动 C/OS-II 的多任务环境。在调用 OSStart()之前必须先调用 OSInit()。在用户程序中 OSStart()只能被调用一次。第二次调用 OSStart()将不进行任何操作。void OSStatInit
4、(void);所属文件 OS_CORE.C 调用者 初始代码 开关量 OS_TASK_STAT_EN&OS_TASK_CREATE_EXT_EN OSStatInit()获取当系统中没有其 他任务运行时,32 位计数器所能达到的最大值。OSStatInit()的调用时机是当多任务环境已经启动,且系统中只有一个任务在运行。也就是说,该函 数只能在第一个被建立并运行的任务中调用。INT8U OSTaskChangePrio(INT8U oldprio,INT8U newprio);所属文件 OS_TASK.C 调用者 任务 开关量 OS_TASK_CHANGE_PRIO_EN OSTaskChan
5、gePrio()改变一 个任务的优先级。参数 oldprio 是任务原先的优先级。newprio 是任务的新优先级。返回值 OSTaskChangePrio()的返回值为下述之一:OS_NO_ERR:任 务优先级成功改变。OS_PRO_INVALID:参数中的任务原先优先级或新优先级大于或等于 OS_LOWEST_PRIO。OS_PRIO_EXIST:参数中的新优先级已经存在。OS_PRIO_ERR:参数中的任务原先优先级不存在。参数中的新优先级必须是没有使用过的,否则会返回错误码。在 OSTaskChangePrio()中还会先判断要改变优先级的任务是否存在 INT8U OSTaskCrea
6、te(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT8U prio);所属文件 OS_TASK.C 调用者 任务或初始化代码 开关量 无 OSTaskCreate()建立一个新任务。任务的建立可以在多任务环境启 动之前,也可以在正在运行的任务中建立。中断处理程序中不能建立任务。一个任务必须为无限循环结构,且不能有返回点。OSTaskCreate()是为与先前的 C/OS 版本保持兼容,新增的特性在 OSTaskCreateExt()函数中。无论用户程序中是否产生中断,在初始化任务堆栈 时,堆栈的结构必须与 CPU 中断后寄存器入栈的顺序结构相同。
7、详细说明请参考所用处理器的手册。参数 task 是指向任务代码的指针。Pdata 指向一个数据结构,该结构用来在建立任务时向任务传递参数。ptos 为指向任务堆栈栈顶的指针。任务堆栈用来保存局部变量,函数参数,返回地址以 及任务被中断时的CPU 寄存器内容。任务堆栈的大小决定于任务的需要及预计的中断嵌套层数。计算堆栈的大小,需要知道任务的局部变量所占的空间,可能产生 嵌套调用的函数,及中断嵌套所需空间。如果初始化常量OS_STK_GROWTH 设为 1,堆栈被设为从内存高地址向低地址增长,此时 ptos 应该指向任务 堆栈空间的最高地址。反之,如果 OS_STK_GROWTH 设为 0,堆栈将
8、从内存的低地址向高地址增长。prio 为任务的优先级。每个任务必须有 一个唯一的优先级作为标识。数字越小,优先级越高。返回值 OSTaskCreate()的返回值为下述之一:函数调用成功。具有该优先级的任务已经存在。OS_PRIO_INVALID:参数指定的优先级大于 OS_LOWEST_PRIO。OS_NO_MORE_TCB:系统中没有 OS_TCB 可以分配给任务了。任务堆栈必须声明 为 OS_STK 类型。在任务中必须调用 C/OS 提供的下述过程之一:延时等待、任务挂起、等待事件发生(等待信号量,消息邮箱、消息队列),以 使其他任务得到 CPU。用户程序中不能使用优先级 0,1,2,3
9、,以及 OS_LOWEST_PRIO-3,OS_LOWEST_PRIO-2,OS_LOWEST_PRIO-1,OS_LOWEST_PRIO。这些优先级 C/OS 系统保留,其余的 56 个优先级提供给应用程序。INT8U OSTaskCreateExt(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT8U prio,INT16U id,OS_STK*pbos,INT32U stk_size,void*pext,INT16U opt);所 属文件 OS_TASK.C 调用者 任务或初始化代码 开关量 无 OSTaskCreateExt()建立一个新任
10、务。与 OSTaskCreate()不同的是,OSTaskCreateExt()允许用户设置更多的细节内容。任务的建立可以在多任务环境启动之前,也可以在 正在运行的任务中建立,但中断处理程序中不能建立新任务。一个任务必须为无限循环结构(如下所示),且不能有返回点。参数 task 是指向 任务代码的指针。Pdata 指针指向一个数据结构,该结构用来在建立任务时向任务传递参数。下例中说明 C/OS 中的任务代码结构以及如何传递参 数 pdata:(如果在程序中不使用参数 pdata,为了避免在编译中出现“参数未使用”的警告信息,可以写一句 pdata=pdata;)ptos 为指向任务堆栈栈顶的指
11、针。任务堆栈用来保存局部变量,函数参数,返回地址以及中断时的 CPU 寄存器内容。任务堆栈的大小决定于任务的需要及预计的中断嵌 套层数。计算堆栈的大小,需要知道任务的局部变量所占的空间,可能产生嵌套调用的函数,及中断嵌套所需空间。如果初始化常量 OS_STK_GROWTH设 为 1,堆栈被设为向低端增长(从内存高地址向低地址增长)。此时 ptos 应该指向任务堆栈空间的最高地址。反之,如果 OS_STK_GROWTH 设为 0,堆栈将从低地址向高地址增长。每个任务必须有一个唯一的优先级作为标识。id 是任务的标识,目前 这个参数没有实际的用途,但保留在 OSTaskCreateExt()中供今
12、后扩展,应用程序中可设置 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
13、 位)和双字(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_STK 类型。在任务中必须进行 C/OS 提供的下述过程 之一:延时等待、任务挂起、等待事件发生(等待信号量,消息邮箱、消息队列),以使其他任务得到 CPU。用户程序中不能使用优先级 0,1,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1