ucos-9-ucosII 函数列表2

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

功能描述: OSQPostFront() 通过消息队列向任务发送消息。与 OSQPost() 不同的是, OSQPostFront() 把将要发送的消息放在消息队列的最前端,也就是按照后入后出的工作方式,而不是先入先出的工作方式。

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

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

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

名称:OSQSize()
所属文件:Os_q.c
原型:uint8 OSQSize(uint8 OS_Q_MEM_SEL *Buf)
功能描述:OSQSize()用于取得指定消息队列消息总容量。
编译开关:EN_OS_Q_SIZE
调用者:用户任务
参数:Buf:指向队列的指针
返回值:消息队列总容量
调用模块:OS_ENTER_CRITICAL OS_EXIT_CRITICAL

 
OSRunningTaskID()
名称: OSRunningTaskID()
所属文件: os.h
原型:宏
功能描述: OSRunningTaskID() 返回当前正在运行的任务的 ID. 任务的 ID 与任务优先级一一对应, ID 0 的任务优先级最高。任务的 ID 在运行中不能改变。

编译开关:无
调用者:用户任务、内核函数
参数:无
返回值:当前正在运行的任务的 ID
示例:

void TaskB(void)
{
        while(1)
        {
                ShowChar = OSRunningTaskID()+'0';
                OSSendSignal(0);
                OSWait(K_TMO,1);
        }
}
 
OSSemAccept()
名称: OSSemAccept()
所属文件: Os_sem.c
原型: uint8 OSSemAccept(uint8 index)
功能描述: OSSemAccept() 函数查看设备是否就绪或事件是否发生。与 OSSemPend() 不同,如果设备没有就绪,则 OSSemAccept() 函数并不使当前任务睡眠。一般在中断中用该函数查询信号量。

编译开关: EN_OS_SEM_ACCEPT.
调用者:用户任务
参数: index: 信号量索引
返回值: NOT_OK: 参数错误
         OS_SEM_OK:
得到信号量
         OS_SEM_NOT_OK:
没有得到信号量
        
调用模块: OSClearSignal,OSSched,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL

注意:必须先建立信号量,然后再使用

void Task(void)
{
        while(1)
        {
                if(OSSemAccept()==OS_SEM_OK)
                        /*
查看设备是否就绪或事件是否发生 */
                {
                        /*
就绪就执行代码 */
                }
        }
}
 
OSSemCreate()

名称:OSSemCreate()
所属文件:Os_sem.c
原型:uint8 OSSemCreate(uint8 index,uint8 Data)
功能描述:OSSemCreate()建立并初始化一个信号量。
        
信号量的作用是:
1.
允许一个任务或其他任务或中断同步
2.
取得设备的使用权
3.
标志事件发生

编译开关:EN_OS_Q_SIZE
调用者:用户任务
参数:index:信号量索引
        Data:
信号量初始值

返回值:NOT_OK:没有这个信号量
         OS_SEM_OK:
成功
注意:必须先建立信号量,然后再使用

示例:

void Task(void)
{
        ..
        OSSemCreate();
        ...
        while
1
        {
                }
        ..
}


2

/*  
分配信号量索引    */
#define IICSem          0
#define PCF8563Sem      1
.....

/*
初始化使用到的信号量 */
    OSSemCreate(IICSem, 1);                //
初始值均为 1
    OSSemCreate(PCF8563Sem, 1);
.....

while (1)
{
    ......

        OSSemPend(PCF8563Sem,0);   /*
无限等待信号量PCF85863Sem  */
      
      /*
得到信号量才能执行 */
            ..........
  
        OSSemPost(PCF8563Sem); /*
置起信号量,其它任务可用 */
}


 
OSSemIntPost()

名称:OSSemIntPost()
所属文件:Os_sem.c
原型:uint8 OSSemIntPost(uint8 index)
功能描述:OSSemIntPost()函数置指定的信号量。如果指定的信号量是0或大于0,OSSemIntPost()函数递增该信号量并返回。如果有任何在等待信号量,则最高优先级的任务将得到信号量并进入就绪状态。与OSSemPost()不同,任务调度函数并不被执行,OSSemIntPost()返回当前任务。

编译开关:EN_OS_SEM_INT_POST, EN_OS_SEM_POST
调用者:用户任务、内核函数
参数:index:信号量索引
返回值:NOT_OK:参数错误
        OS_SEM_OK:
发送成功
调用模块:OSIntSendSignal, OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
注意:一般在中断函数中调用该函数

示例:
#if EN_OS_SEM_POST>0
        uint8 OSSemPost(uint8 index)
{
        if(OSSemIntPost(index) == 0S_SEM_OK)
        {
                OSSched();
                return OS_SEM_OK;
        }
        else
                {
                 return NOT_OK;
        }
}
#endif

 
OSSemPend()
名称: OSSemPend()
所属文件: Os_sem.c
原型: uint8 OSSemPend(uint8 index,uint8 Tick)

功能描述: OSSemPend() 用于任务试图取得设备的使用权,需要和其它任务或中断同步,任务需要等待特定事件发生的场合。如果任务需要调用 OSSemPend() 函数时,信号量的值大于 0, OSSemPend() 函数递减该值并返回 OS_SEM_OK. 如果该值等于 0, OSSemPend() 函数将当前任务加入该信号量的等待队列,并使当前任务睡眠,直到其它任务或中断置起信号量或超出预定时间。如果多个任务等待同一个信号量,则当信号量被置起时, RTOS 是其中优先等级最高的任务取得信号量并恢复执行。

编译开关: EN_OS_SEM_PENT
调用者:用户任务
参数: index :信号量索引
        Tick:
等待时间
返回值: NOT_OK: 参数错误
         OS_SEM_OK:
收到信号量
         OS_SEM_TMO:
超时
        OS_SEM_NOT_OK:
没有得到信号量
调用模块: OSRunningTaskID,OSClearSignal,OSSched,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
注意:先建立信号量再使用。不允许中断调用该函数。

示例

void TaskA(void)
{
        while(1)
        {
         OSSemPend(0,0);
          ... /*
只有得到信号量置起,该任务才能执行 */
          ...
        }
        
}        


2

/*  
分配信号量索引     */
#define IICSem          0
#define PCF8563Sem      1
.....

/*
初始化使用到的信号量 */
    OSSemCreate(IICSem, 1);                //
初始值均为 1
    OSSemCreate(PCF8563Sem, 1);
.....

while (1)
{
    ......

        OSSemPend(PCF8563Sem,0);   /*
无限等待信号量 PCF85863Sem  */
      
      /*
得到信号量才能执行 */
            ..........
  
        OSSemPost(PCF8563Sem); /*
置起信号量 , 其它任务可用 */
}
 
OSSemPost()
名称: OSSemPost()
所属文件: Os_sem.c
原型: uint8 OSSemPost(uint8 index)

功能描述: OSSemPost() 置起指定的信号量。如果指定的信号量是 0 或大于 0, OSSemPost() 函数递增该信号量并返回。如果有任何在等待信号量,则最高优先级的任务将得到信号量并进入就绪状态。任务调度函数将进行任务调度,决定当前运行的任务是否依然为最高优先级就绪状态的任务

编译开关: EN_OS_SEM_POST
调用者:用户任务
参数: index: 信号量索引
返回值: NOT_OK: 参数错误
         OS_SEM_OK:
发送成功
        
调用模块: OSSemIntPost,OSSched

注意:先建立信号量再使用,中断中不允许调用该函数。

示例:

void TaskA(void)
{
        OSSemCreate(0,1);
        while(1)
        {
                OSSemPend(0,0);
                /*
使用设备 */
                OSSemPost(0);
                ..
        }
}


2

/*  
分配信号量索引     */
#define IICSem          0
#define PCF8563Sem      1
.....

/*
初始化使用到的信号量 */
    OSSemCreate(IICSem, 1);                //
初始值均为 1
    OSSemCreate(PCF8563Sem, 1);
.....

while (1)
{
    ......

        OSSemPend(PCF8563Sem,0);   /*
无限等待信号量 PCF85863Sem  */
      
      /*
得到信号量才能执行 */
            ..........
  
        OSSemPost(PCF8563Sem); /*
置起信号量 , 其它任务可用 */
}

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