/*任务2接收数据*/ static void *recv_Entry(UINT32 uwParam1, UINT32 uwParam2, UINT32 uwParam3, UINT32 uwParam4) { UINT32 uwReadbuf; UINT32 uwRet = LOS_OK; UINT32 uwMsgCount = 0; while (1) { /*读取队列里的数据存入uwReadbuf里*/ uwRet = LOS_QueueRead(g_uwQueue, &uwReadbuf, 24, 0); if(uwRet != LOS_OK) { dprintf("recv message failure,error:%x\n",uwRet); break; } else { dprintf("recv message:%s\n", (char *)uwReadbuf); uwMsgCount++; } (void)LOS_TaskDelay(5); } /*删除队列*/ while (LOS_OK != LOS_QueueDelete(g_uwQueue)) { (void)LOS_TaskDelay(1); } dprintf("delete the queue success!\n"); if(API_MSG_NUM == uwMsgCount) { uwRet = LOS_InspectStatusSetByID(LOS_INSPECT_MSG,LOS_INSPECT_STU_SUCCESS); if (LOS_OK != uwRet) { dprintf("Set Inspect Status Err\n"); } } else { uwRet = LOS_InspectStatusSetByID(LOS_INSPECT_MSG,LOS_INSPECT_STU_ERROR); if (LOS_OK != uwRet) { dprintf("Set Inspect Status Err\n"); } } return NULL; }
UINT32 Example_Semphore(VOID) { UINT32 uwRet = LOS_OK; TSK_INIT_PARAM_S stTask1; TSK_INIT_PARAM_S stTask2; /* create sem */ LOS_SemCreate(0, &g_usSemID); /* lock task schedue */ LOS_TaskLock(); /* create task1 */ memset(&stTask1, 0, sizeof(TSK_INIT_PARAM_S)); stTask1.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_SemTask1; stTask1.pcName = "MutexTsk1"; stTask1.uwStackSize = LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE; stTask1.usTaskPrio = TASK_PRIO_TEST; uwRet = LOS_TaskCreate(&g_TestTaskID01, &stTask1); if (uwRet != LOS_OK) { dprintf("task1 create failed .\n"); return LOS_NOK; } /* create task2 */ memset(&stTask2, 0, sizeof(TSK_INIT_PARAM_S)); stTask2.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_SemTask2; stTask2.pcName = "MutexTsk2"; stTask2.uwStackSize = LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE; stTask2.usTaskPrio = (TASK_PRIO_TEST - 1); uwRet = LOS_TaskCreate(&g_TestTaskID02, &stTask2); if (uwRet != LOS_OK) { dprintf("task2 create failed .\n"); /* delete task 1 */ if (LOS_OK != LOS_TaskDelete(g_TestTaskID01)) { dprintf("task1 delete failed .\n"); } return LOS_NOK; } /* unlock task schedue */ LOS_TaskUnlock(); uwRet = LOS_SemPost(g_usSemID); /* task delay 40 ticks */ LOS_TaskDelay(40); /* delete sem */ LOS_SemDelete(g_usSemID); return uwRet; }
osStatus_t osDelay (uint32_t ticks) { UINT32 uwRet = 0; uwRet = LOS_TaskDelay(ticks); if(uwRet == LOS_OK) { return osOK; } else { return osError; } }
LITE_OS_SEC_TEXT_MINOR VOID LOS_Msleep(UINT32 uwMsecs) { UINT32 uwInterval = 0; if (OS_INT_ACTIVE) { return; } if (uwMsecs == 0) { uwInterval = 0; } else { uwInterval = LOS_MS2Tick(uwMsecs); if (uwInterval == 0) { uwInterval = 1; } } (VOID)LOS_TaskDelay(uwInterval); }
static VOID Example_SemTask2(VOID) { UINT32 uwRet; dprintf("Example_SemTask2 try get sem g_usSemID wait forever.\n"); /* wait forever get sem */ uwRet = LOS_SemPend(g_usSemID, LOS_WAIT_FOREVER); if(LOS_OK == uwRet) { dprintf("Example_SemTask2 get sem g_usSemID and then delay 20ticks .\n"); } /* task delay 20 ticks */ LOS_TaskDelay(20); dprintf("Example_SemTask2 post sem g_usSemID .\n"); /* release sem */ LOS_SemPost(g_usSemID); return; }
osStatus_t osDelayUntil (uint64_t ticks) { UINT32 uwRet; UINT32 uwTicks; UINT64 tickCount = osKernelGetTickCount(); if(ticks < tickCount) { return osError; } uwTicks = (UINT32)(ticks - tickCount); uwRet = LOS_TaskDelay(uwTicks); if(uwRet == LOS_OK) { return osOK; } else { return osError; } }
/*任务1发送数据*/ static void *send_Entry(UINT32 uwParam1, UINT32 uwParam2, UINT32 uwParam3, UINT32 uwParam4) { UINT32 i = 0,uwRet = 0; UINT32 uwlen = sizeof(abuf); while (i < API_MSG_NUM) { abuf[uwlen -2] = '0' + i; i++; /*将abuf里的数据写入队列*/ uwRet = LOS_QueueWrite(g_uwQueue, abuf, uwlen, 0); if(uwRet != LOS_OK) { dprintf("send message failure,error:%x\n",uwRet); } LOS_TaskDelay(5); } return NULL; }