更新时间:2021-07-08 GMT+08:00
编程实例
实例描述
创建一个队列,两个任务。任务1调用写队列接口发送消息,任务2通过读队列接口接收消息。
- 通过LOS_TaskCreate创建任务1和任务2。
- 通过LOS_QueueCreate创建一个消息队列。
- 在任务1 send_Entry中发送消息。
- 在任务2 recv_Entry中接收消息。
- 通过LOS_QueueDelete删除队列。
编程示例
前提条件:在menuconfig菜单中完成队列模块的配置。
#include "los_task.h" #include "los_queue.h" static UINT32 g_queue; #define BUFFER_LEN 50 VOID send_Entry(VOID) { UINT32 i = 0; UINT32 ret = 0; CHAR abuf[] = "test is message x"; UINT32 len = sizeof(abuf); while (i < 5) { abuf[len -2] = '0' + i; i++; ret = LOS_QueueWriteCopy(g_queue, abuf, len, 0); if(ret != LOS_OK) { dprintf("send message failure, error: %x\n", ret); } LOS_TaskDelay(5); } } VOID recv_Entry(VOID) { UINT32 ret = 0; CHAR readBuf[BUFFER_LEN] = {0}; UINT32 readLen = BUFFER_LEN; while (1) { ret = LOS_QueueReadCopy(g_queue, readBuf, &readLen, 0); if(ret != LOS_OK) { dprintf("recv message failure, error: %x\n", ret); break; } dprintf("recv message: %s\n", readBuf); LOS_TaskDelay(5); } while (LOS_OK != LOS_QueueDelete(g_queue)) { LOS_TaskDelay(1); } dprintf("delete the queue success!\n"); } UINT32 Example_CreateTask(VOID) { UINT32 ret = 0; UINT32 task1, task2; TSK_INIT_PARAM_S initParam; initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)send_Entry; initParam.usTaskPrio = 9; initParam.uwStackSize = LOS_TASK_MIN_STACK_SIZE; initParam.pcName = "sendQueue"; #ifdef LOSCFG_KERNEL_SMP initParam.usCpuAffiMask = CPUID_TO_AFFI_MASK(ArchCurrCpuid()); #endif initParam.uwResved = LOS_TASK_STATUS_DETACHED; LOS_TaskLock(); ret = LOS_TaskCreate(&task1, &initParam); if(ret != LOS_OK) { dprintf("create task1 failed, error: %x\n", ret); return ret; } initParam.pcName = "recvQueue"; initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)recv_Entry; ret = LOS_TaskCreate(&task2, &initParam); if(ret != LOS_OK) { dprintf("create task2 failed, error: %x\n", ret); return ret; } ret = LOS_QueueCreate("queue", 5, &g_queue, 0, BUFFER_LEN); if(ret != LOS_OK) { dprintf("create queue failure, error: %x\n", ret); } dprintf("create the queue success!\n"); LOS_TaskUnlock(); return ret; }
结果验证
create the queue success! recv message: test is message 0 recv message: test is message 1 recv message: test is message 2 recv message: test is message 3 recv message: test is message 4 recv message failure, error: 200061d delete the queue success!
完整实例代码
父主题: 队列