ucos ii 总结

UCOS-ii 中的五张表:

Mem表:OSMemFreeList

TCB表:OSTCBFreeList

Queue表OSQFreeList

Event表:OSEventFreeList

//Timer表:OSTmrFreeList(可能不是这张表,或许是和FLAG信号量集有关的表)

【-1】内存操作

首先建立OS_MEM 类型的大分区链表,然后建立一个二维数组,将这个二维数组初始化为小分区(OSMemCreate( )完成),

初始化后的分区信息记录在OS_MEM 类型的大分区链表中,如将 char  commtx[50][30]初始化后的分区记录在全局变量OSMemFreeList指向的大分区里。初始化后的小分区有50个内存块,每个内存块30字节。

    OSMemGet()用于获取一块内存块(从50块里获得一块,包含30字节)。

OSMemPut()用于释放一块内存块,到指定的大分区。

扫描二维码关注公众号,回复: 174073 查看本文章

【0】任务操作函数

建立任务,OSTaskCreate()
建立任务,OSTaskCreateExt()
任务堆栈初始化 OS_STK *OSTaskStkInit (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT16U opt)
堆栈检验,OSTaskStkChk()
删除任务,OSTaskDel()
请求删除任务,OSTaskDelReq()
改变任务的优先级,OSTaskChangePrio()
挂起任务,OSTaskSuspend()
恢复任务,OSTaskResume()

获得有关任务的信息,OSTaskQuery()

任务调度 OS_Sched()

【1】等待队列操作函数:

typedef struct {
    void   *OSEventPtr;                /* 指向消息或者消息队列的指针 */
    INT8U   OSEventTbl[OS_EVENT_TBL_SIZE]; /* 等待任务列表      */
    INT16U  OSEventCnt;               /* 计数器(当事件是信号量时) */
    INT8U   OSEventType;                   /* 时间类型  */
    INT8U   OSEventGrp;               /* 等待任务所在的组  */

} OS_EVENT;

OSEventWaitListInit(OS_EVENT *pevent) //初始化事件等待队列信息。

OSEventTaskRdy(OS_EVENT *pevent, void *msg, INT8U msk) //从等待队列中删除最高优先级任务,并置于就绪态。

OSEventWait(OS_EVENT *pevent) //从就绪表中删除该任务,并添加到事件等待列表中。

OSEventTO(OS_EVENT *pevent) //从事件列表中删除,当前等待超时的任务。

【2】信号操作函数。semaphore

建立一个信号量, OSSemCreate()
        等待一个信号量, OSSemPend()
        发送一个信号量, OSSemPost()
无等待地请求一个信号量, OSSemAccept()
查询一个信号量的当前状态, OSSemQuery()

【3】邮箱

建立一个邮箱,OSMboxCreate()
等待一个邮箱中的消息,OSMboxPend()
发送一个消息到邮箱中,OSMboxPost()
无等待地从邮箱中得到一个消息, OSMboxAccept()
查询一个邮箱的状态, OSMboxQuery()
使用邮箱作为二值信号量
使用邮箱实现延时,而不使用OSTimeDly()

【4】消息队列

建立一个消息队列,OSQCreate()
等待一个消息队列中的消息,OSQPend()
向消息队列发送一个消息(FIFO),OSQPost()
向消息队列发送一个消息(LIFO),OSQPostFront()
无等待地从一个消息队列中取得消息, OSQAccept()
清空一个消息队列, OSQFlush()
查询一个消息队列的状态,OSQQuery()


猜你喜欢

转载自blog.csdn.net/register_k/article/details/79926604
今日推荐