logo资料库

ucos函数说明.pdf

第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
资料共24页,剩余部分请下载后查看
SmallRTOS用户函数参考手册
标签: SmallRTOS RTOS SmallRTOS 用户函数参考手册 根据陈明计 SmallRTOS 使用手册整理,便于在编程时查找 OS_INT_ENTER() 名称:OS_INT_ENTER() 所属文件:Os_cpu.h 原型:宏 功能描述:OS_INT_ENTER()通知 SMALLRTOS 一个中断服务函数正在运行,这样 RTOS 可以 跟踪中断嵌套情况,通常与 OSIntExit()联合使用。 编译开关:EN_OS_INT_ENTER 调用者:中断 注意点:用户任务不能调用该函数。其实现与目标系统相关,移植时由用户实现。 OSClearSignal() 名称:OSClearSignal() 所属文件:Os_core.h 原型:void OSClearSignal(uint8 TaskID) 功能描述:OSClearSignal()无条件使任务休眠。如果它使当前任务休眠,则还需要调用 OSSched(),才会切换到其他任务。 编译开关:无 调用者:内核函数 参数: TaskID 注意点:用户任务不能调用该函数. OSIntExit() 名称:OSIntExit() 所属文件:Os_core.h 原型:void OSIntExit(void) 功能描述:OSIntExit()通知 RTOS 一个中断服务函数已经执行完毕,这样 RTOS 可以跟踪中 断嵌套情况。它通常与 OS_INT_ENTER()联合使用。当最后一层嵌套的中断服务函数执行完 毕后,如果有更高优先级的任务就绪,则 RTOS 就会调用任务调度函数。在这种情况下,中 断返回到更高优先级的任务,而不是返回中断了的任务
编译开关:无 调用者:中断 调用模块:OSIntCtxSW 注意点:用户任务不能调用该函数,只要是受 RTOS 管理的中断服务函数,在其退出之前必须 调用此函数 OSIntSendSignal() 名称:OSIntSendSignal() 所属文件:Os_q.h 原型:void OSintSendSignal(uint9 TaskId) 功能描述:OSIntSendSignal()无条件指使指定任务就绪。如果指定任务比当前任务优先级高, 则在全部中断退出后或调用 OSSched()后,开始执行高优先级任务。 编译开关:无 调用者:中断、内核函数 参数:TaskId:任务 ID 注意点:用户任务一般不需要调用该函数。 例: void comm(void) interrupt 4 { OS_INT_ENTER(); if(RI==1) { RI = 0; OSIntSendSignal(RECEIVE_TASK_ID); } if(TI==1) { TI=0; OSIntSendSignal(1); } OSIntExit(); } OSQAccept() 名称:OSQAccept() 所属文件:Os_q.h
原型:uint8 OSQAccept(uint8 data * Ret, uint8 OS_Q_MEM_SEL *Buf) 功能描述:OSQAccept()函数检查消息队列中是否已经有需要的消息,他不同于 OSQPend(), 如果没有需要的消息,则 OSQAccept()并不使任务休眠。如果任务已经到达,则该消息被传 递到用户任务。通常中断调用该函数,因为中断不允许等待。 编译开关:EN_OS_Q_ACCEPT 调用者:用户任务 参数:Ret: 返回消息; Buf:指向队列的指针 返回值:NOT_OK:参数错误 OS_Q_OK:收到消息 OS_Q_NOT_OK:无消息 注意点:必须先建立消息队列,然后再使用。 示例: void Task(void) { uint8 data *Ret; while(1) { if(OSQAccept(CommQ) == OS_Q_OK) //检查消息队列 { .....//处理接收的消息 } else { }//,没有消息 } } OSQCreate() 名称:OSQCreate() 所属文件:Os_q.c 原型:uint8 OSQCreate(uint8 OS_Q_MEM_SEL *Buf, uint8 SizeOfBuf) 功能描述:OSQCreate()函数建立一个消息队列。任务或中断可以通过消息队列向其它一个或
多个任务发送消息,消息是一个 uint8 整型数 ,在不同应用中有不同含义。 编译开关:无 调用者:用户任务 参数:Buf:为队列分配的存储空间地址 SizeOfBuf:为队列分配的存储空间大小 注意点:OSQCreate()不分配内存,内存由用户自己分配。在 KEIL 中 OS_Q_MEM_SEL 一般 定义为 xdata 或 idata 示例 uint8 OS_Q_MEM_SEL serialData[14]; void main(void) { ... OSQCreate(SerialData,14); ... OSStart(); } 例 2: uint8 OS_Q_MEM_SEL CommandData[16]; //给命令消息队列分配的队列空间 .... /* 建立所需要的消息队列 */ OSQCreate(CommandData,16); ......... uint8 data temp; while (1) { OSQPend(&temp,CommandData,0); /* 等待 CommandData 消息队列中的消息,存入 temp */ /*收到消息才执行*/ ......... } .......... while(1) { ...... OSQPost(CommandData,temp); /* 发送消息 */
...... } OSQFlush() 名称:OSQFlush() 所属文件:Os_q.c 原型:void OSQFlush(uint8 OS_Q_MEM_SEL *Buf) 功能描述:OSQFlush()函数清空消息队列并且忽略发送到队列的所有消息,消息是一个 uint8 整型数,在不同应用中有不同的含义。 编译开关:EN_OS_Q_FLUSH 调用者:任务、中断 参数:Buf:指向队列的指针 注意点:必须先建立消息,然后在使用 示例 void Task() { while(1) { if(OSQPost(SerialData,GetSerial())==OS_Q_FULL) { OSQFlush(SerialData); } } } OSQIntPost() 名称:OSQIntPost() 所属文件:Os_q.c 原型:uint8 OSQIntPost(uint8 OS_Q_MEM_SEL *Buf, uint8 Data) 功能描述:OSQIntPost()在中断或内核函数中使用,OSQIntPost()通过消息队列向任务发送消
息。 消息是一个 uint8 整型数,在不同应用中有不同的含义。如果消息队列已经存满,则返回错误 码。 如果有任何等待消息的任务在等待消息,则这些任务中的最高级任务将得到消息。如果得到 消息的任务比当前的任务优先级高,则在所有中断退出后或调用 OSSched()后,高优先级的 任务将得到消息而恢复执行。消息队列是先入先出机制的,先入队列消息先被传递给任务。 编译开关:EN_OS_Q_INT_POST, EN_OS_Q_POST 调用者:中断、内核函数 参数:Buf:指向队列指针 Data:消息数据 返回值:OS_Q_FULL:队列满 OS_Q_OK:发送成功 调用模块:OSIntSendSignal,OS_ENTER_CRITICAL,OS_EXIT_CTRITICAL 注意:必须先建立消息队列,然后再使用。用户任务一般使用 OSQPost() 示例: void comm(void) interrupt4 { OS_INT_ENTER(); if(RI==1) { RI = 0; if(OSQIntPost(SerialData,SBUF) == OS_Q_OK) { /* 将消息放入队列中*/ } else { /*消息队列已满*/ } OSIntExit(); } OSQIntPostFront() 名称:OSQIntPostFront() 所属文件:Os_q.c 原型:uint8 OSQIntPostFront(uint8 OS_Q_MEM_SEL *Buf, uint8 Data) 功能描述:OSQIntPostFront()函数在中断或内核函数中使用。OSQIntPostFront()通过消息队
列向任务发送消息。OSQIntPostFront()和 OSQIntPost()非常相似,不同之处是 OSQIntPostFront()报将要发送的消息放在消息队列的最前面,就是按照后入先出方式工作, 而不是按照先入先出的方式工作。 编译开关: EN_OS_INT_POST_FRONT, EN_OS_Q_POST_FRONT 调用者:中断、内核函数 参数:Buf:指向队列指针 Data:消息数据 调用模块:OSIntSendSignal, OS_ENTER)CRITICAL, OS_EXIT_CRITICAL 注意点:用户任务一般使用 OSQFront() 示例 void comm(void) interrupt 4 { OS_INT_ENTER(); if(RI == 1) { RI = 0; if(OSQIntPostFront(SerialData,SBUF) == OS_Q_OK) { /*将消息放入队列中*/ } else{ /*消息队列已满*/ } } OSIntExit(); } OSQNMsgs() 名称:OSQNMsgs() 所属文件:Os_q.c 原型:uint8 OSQNMsgs(uint8 OS_Q_MEM_SEL *Buf) 功能描述:OSQNMsgs()用于取得制定消息队列中的消息数。 编译开关:EN_OS_Q_NMsgs 调用者:用户任务 参数:Buf:指向队列指针 返回值:消息数 调用模块:OS_ENTER)CRITICAL OS_EXIT_CRITICAL
示例 void Task(void) { OSQCreate(SerialData,14); while(1) { if(OSQNMsgs(SerialData)
分享到:
收藏