ucos-9-ucosII 函数列表1

 
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 一般定义为xdataidata

示例
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)<NBYTE)
                {
                        /*
处理消息 */
                }
                else
                {
                }
        }
}
 
OSQPend()

名称:OSQPend()
所属文件:Os_q.c
原型:uint8 OSQPend(uint8 *Ret, uint8 OS_Q_MEM_SEL *Buf,uint8 Tick)

功能描述:OSQPend()用于任务等待消息。消息通过中断或另外的任务向发送给需要的任务。如果调用OSQPend()函数时,队列中已经存在消息,则消息被返回给OSQPend()函数的调用者,队列中清除该消息。如果调用OSQPend()函数时队列中没有需要的消息,则OSQPend()将该任务加入等待队列中,并使当前任务休眠,直到这个任务得到需要的消息或超出定义的超时时间为止。如果多个任务等待同一个消息,则rtos默认他们中间优先级最高的任务取得消息。

编译开关:EN_OS_Q_PENT
调用者:用户任务
参数:Ret:返回的消息
        Buf:
指向队列的指针
        Tick:
等待时间
返回值:NOT_OK:参数错误
         OS_Q_OK:
收到消息
         OS_Q_TMO:
超时
        OS_Q_NOT_OK:
无消息
调用模块:OSRunningTaskID,OSClearSignal,OSSched,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
注意:先建立消息队列再使用。不允许中断调用该函数。

示例

void Task(void)
{
        while(1)
        {
                ..
                if(OSQPend(&temp1,SerialData,20)==OS_Q_TMO)
                {
                        /*
。超时处理 */
                }
                else
                {
                        /*
取得消息*/
                }
                ..
        err:
                ..
        }
}



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);         /*
发送消息 */
        ......
}

 
OSQPost()

名称:OSQPost()
所属文件:Os_q.c
原型:uint8 OSQPost(uint8 OS_Q_MEM_SEL *Buf,uint8 Data)

功能描述:OSQPost()通过消息队列向任务发送消息。

编译开关:EN_OS_Q_POST
调用者:用户任务
参数:Buf:指向队列的指针
        Data:
消息数据
返回值:OS_Q_FULL:队列已满
         OS_Q_OK:
发送成功
        
调用模块:OSQIntPost,OSSched

注意:先建立消息队列再使用。

示例
void Task(void)
{
        while(1)
        {
                if(OSQPost(SerialData,GetSerial())==OS_Q_OK)
                {
                        /*
将消息放入消息队列中*/
                }
                else
                {
                        /*
消息队列已满*/
                }
        }
}



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);         /*
发送消息 */
        ......
}


 

你可能感兴趣的:(函数,列表,ucos)