LiteOS信号量/反発量/メッセージキュー/イベントフラググループ

5292 ワード

一LiteOS信号量
1.関連関数インタフェースは以下の通りである.
カウント型信号量の作成
UINT32 LOS_SemCreate(UINT16 usCount, UINT32 *puwSemHandle);
二値信号量の作成
UINT32 LOS_BinarySemCreate(UINT16 usCount, UINT32 *puwSemHandle);
削除信号量
UINT32 LOS_SemDelete(UINT32 uwSemHandle);
要求信号量
UINT32 LOS_SemPend(UINT32 uwSemHandle, UINT32 uwTimeout);
かいほうしんごうりょう
UINT32 LOS_SemPost(UINT32 uwSemHandle)
2.二値信号量による割り込みとタスクの同期
UINT32 BinarySemId;/*             */

LOS_BinarySemCreate(1,&BinarySemId);/*           */

void USART1_IRQHandler(void)
{
           
    LOS_SemPost( BinarySemId );/*       */
}
 
void thread0(void* arg)
{
    while(1)
    {
        LOS_SemPend( BinarySemId, LOS_WAIT_FOREVER ); //         xSemaphore,          
              
    }
}

3.信号量を使用して共有リソースに鍵をかける
UINT32 BinarySemId;/*             */

LOS_BinarySemCreate(1,&BinarySemId);/*           */

void usart1_send_buf(uint8_t *buf, uint32_t len)
{
    LOS_SemPend( BinarySemId, LOS_WAIT_FOREVER );//     ,    1  

      1    
    
    LOS_SemPost( BinarySemId );//        ,   1  ,                */
}

4.信号量によるリソースカウント
.........
二LiteOS反発量
1.反発量相関関数
反発量の作成
UINT32 LOS_MuxCreate(UINT32 *puwMuxHandle);
反発量の削除
UINT32 LOS_MuxDelete(UINT32 puwMuxHandle);
かいほうはんぱつりょう
UINT32 LOS_MuxPost(UINT32 uwMuxHandle);
申請反発量
UINT32 LOS_MuxPend(UINT32 uwMuxHandle, UINT32 uwTimeout);
2.使用反発量の作成
UINT32 MutexId;/*             */

LOS_MuxCreate(&MutexId);/*          */

LOS_MuxPost( MutexId ); //      

LOS_MuxPend( MutexId, LOS_WAIT_FOREVER );//       ,          


三LiteOSメッセージキュー
1.メッセージキュー関連インタフェース関数
メッセージキューの作成
UINT32 LOS_QueueCreate(CHAR *pcQueueName,UINT16 usLen,UINT32 *puwQueueID,                                                UINT32 uwFlags,UINT16 usMaxMsgSize);
メッセージキューの削除
UINT32 LOS_QueueDelete(UINT32 uwQueueID);
メッセージ・キューへのデータの書き込み
UINT32 LOS_QueueWrite(UINT32 uwQueueID,VOID *pBufferAddr,                                            UINT32 uwBufferSize, UINT32 uwTimeOut);
メッセージ・キューへのデータの書き込み(コピー付き)
UINT32 LOS_QueueWriteCopy(UINT32 uwQueueID,VOID *pBufferAddr,                                                      UINT32 uwBufferSize,UINT32 uwTimeOut);
メッセージ・キュー・ヘッダへのデータの書き込み
UINT32 LOS_QueueWriteHead(UINT32 uwQueueID,VOID *pBufferAddr,                                                      UINT32 uwBufferSize, UINT32 uwTimeOut);
メッセージ・キュー・ヘッダへのデータの書き込み(コピー付き)
UINT32 LOS_QueueWriteHeadCopy(UINT32 uwQueueID,                                      VOID * pBufferAddr,                                      UINT32 uwBufferSize,                                      UINT32 uwTimeOut );
メッセージキューからデータを読み込む
UINT32 LOS_QueueRead(UINT32 uwQueueID,                                 VOID *pBufferAddr,                                 UINT32 uwBufferSize,                                 UINT32 uwTimeOut);
メッセージキューからのデータの読み込み(コピー付き)
UINT32 LOS_QueueReadCopy(UINT32 uwQueueID, VOID *pBufferAddr,                                                      UINT32 *puwBufferSize, UINT32 uwTimeOut);
メッセージキュー情報の取得
UINT32 LOS_QueueInfoGet(UINT32 uwQueueID, QUEUE_INFO_S *pstQueueInfo);
2メッセージキューを使用したメッセージの送信
UINT32 QueueId;/*            */

/*          */
LOS_QueueCreate("Test_Queue",  /*        */
                16,  /*        */
                &QueueId, /*      ID(   ) */
                0,  /*      ,        */
                4); /*      ,      */

typedef struct 
{
    uint8_t id;
    char msg[20];
}message_t;


message_t send_msg;//       
send_msg.id = 1;
strcpy(&send_msg.msg[0], "Queue test");
LOS_QueueWrite(QueueId,  /*   (  )    ID(  )  */
               &send_msg, /*           */
               sizeof(message_t), /*       */
               0);//      0


message_t *rev_msg;//    
LOS_QueueRead(QueueId,           /*    (  )    ID(   ) */
              &rev_msg,          /*    (  )        */
              sizeof(message_t), /*    (  )      */
              LOS_WAIT_FOREVER); /*      :    */

四LiteOSイベントフラググループ
1.イベントフラググループ関連関数
イベントフラググループの初期化
UINT32 LOS_EventInit(PEVENT_CB_S pstEventCB);
イベントの送信
UINT32 LOS_EventWrite(PEVENT_CB_S pstEventCB, UINT32 uwEvents);
イベントのクリア
UINT32 LOS_EventClear(PEVENT_CB_S pstEventCB, UINT32 uwEvents);
イベントの読み込み
UINT32 LOS_EventRead(PEVENT_CB_S pstEventCB, UINT32 uwEventMask,                                                         UINT32  uwMode, UINT32 uwTimeOut);
ユーザーが入力したイベント値、イベントマスク、および検証モードに基づいて、ユーザーが入力したイベントが予想に合致するかどうかを返します.
UINT32 LOS_EventPoll(UINT32 *uwEventID, UINT32 uwEventMask, UINT32 uwMode);
イベントの破棄
UINT32 LOS_EventDestory(PEVENT_CB_S pstEventCB);
2.イベントフラググループの使用
EVENT_CB_S EventGroup_CB;/*              */

LOS_EventInit(&EventGroup_CB);/*           */

LOS_EventWrite(&EventGroup_CB,0x01);/*         1 */


/*          */
LOS_EventRead(&EventGroup_CB,   //        
              0x01,             //           
              LOS_WAITMODE_AND, //         
              LOS_WAIT_FOREVER );//      
LOS_EventClear(&EventGroup_CB,~0x01); //