版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务4-1消息队列使用(不带复制读写方式)Task4-1UsingMessageQueue(withoutcopymode)《物联网操作系统技术与应用》制作人张亚军
任务描述
在LiteOS中创建两个任务,一个是写消息任务,另一个是读消息任务。两个任务独立运行。写消息任务检测按键的按下情况,按下KEY1键时向消息队列中写入一条消息,按下KEY2键时向消息队列中写入另一条消息;读消息任务一直等待消息的到来,当读取成功时,将读出的数据通过串口输出。
任务实现1.打开第2章中移植好LiteOS的裸机工程TEST,修改main.c文件,添加头文件。
任务4-1消息队列使用(不带复制读写方式)26
/*USERCODEBEGINIncludes*/27
/*LiteOS头文件*/28#include"los_sys.h"29#include"los_task.ph"30#include"los_queue.h"31
/*USERCODEENDIncludes*/2.定义任务ID变量、消息队列ID变量、消息队列长度、消息节点长度以及全局变量。3.创建和管理读消息任务Receive_Task和写消息任务Send_Task。1)定义任务实现函数Receive_Task()和Send_Task()。
任务4-1消息队列使用(不带复制读写方式)60/*USERCODEBEGIN0*/61/*定义任务ID变量*/62UINT32Receive_Task_Handle;63UINT32Send_Task_Handle;64
/*定义消息队列的ID*/65UINT32Test_Queue_Handle;66
/*定义消息队列长度*/67#defineTEST_QUEUE_LEN1068#defineTEST_QUEUE_SIZE1069
/*写消息队列需要用到的全局变量*/70UINT32send_data1=1;71UINT32send_data2=2;72
/************************************************************73*@函数名:Receive_Task74*@功能说明:Receive_Task任务实现75*@参数:无76*@返回值:无77***********************************************************/
任务4-1消息队列使用(不带复制读写方式)78
static
voidReceive_Task(void)79
{80
/*定义一个返回类型变量,初始化为LOS_OK*/81UINT32uwRet=LOS_OK;82UINT32r_queue;83UINT32buffsize=10;84
/*任务都是一个无限循环,不能返回*/85
while(1)86
{87
/*队列读取(接收),等待时间为一直等待*/88uwRet=LOS_QueueRead(Test_Queue_Handle,
/*读取(接收)队列的ID(句柄)*/89
&r_queue,
/*读取(接收)的数据保存位置*/90buffsize,
/*读取(接收)的数据的长度*/91LOS_WAIT_FOREVER);
/*等待时间:一直等*/92LOS_TaskDelay(500);
93
if(LOS_OK==uwRet)94
{95printf("本次从消息队列中读出的数据是:%d,读出数据的长度是:%d\n",*(UINT32*)r_queue,buffsize);96
}97
else98
{99printf("数据接收出错,错误代码0x%X\n",uwRet);
任务4-1消息队列使用(不带复制读写方式)100
}101
/*20ms扫描一次*/102LOS_TaskDelay(20);
103
}104}105/************************************************************106*@函数名:Send_Task107*@功能说明:Send_Task任务实现108*@参数:无109*@返回值:无110***********************************************************/111static
voidSend_Task(void)112{113
/*定义一个返回类型变量,初始化为LOS_OK*/114UINT32uwRet=LOS_OK;
115
/*任务都是一个无限循环,不能返回*/116
while(1)117
{118
/*KEY1键被按下*/119
if(
!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4))
//读取KEY按键引脚,低电平表示按下120
{
任务4-1消息队列使用(不带复制读写方式)121
/*将数据写入(发送)到队列中,等待时间为0*/122uwRet=LOS_QueueWrite(Test_Queue_Handle,
/*写入(发送)队列的ID(句柄)*/123
&(send_data1),
/*写入(发送)的数据*/124
sizeof(send_data1),
/*数据的长度*/125
0);
/*等待时间为0*/126
if(LOS_OK==uwRet)127
{128printf("本次写入消息队列的数据是:%d\n",send_data1);129
}130
else131
{132printf("数据不能发送到消息队列!错误代码0x%X\n",uwRet);133
}134LOS_TaskDelay(500);
//等待松手,延时防松手抖动135
}
136
/*KEY2键被按下*/137
if(
!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5))
//读取KEY按键引脚,低电平表示按下138
{139
/*将数据写入(发送)到队列中,等待时间为0*/
任务4-1消息队列使用(不带复制读写方式)140uwRet=LOS_QueueWrite(Test_Queue_Handle,
/*写入(发送)队列的ID(句柄)*/141
&(send_data2),
/*写入(发送)的数据*/142
sizeof(send_data2),
/*数据的长度*/143
0);
/*等待时间为0*/144
if(LOS_OK==uwRet)145
{146printf("本次写入消息队列的数据是:%d\n",send_data2);147
}148
else149
{150printf("数据不能发送到消息队列!错误代码0x%X\n",uwRet);151
}152LOS_TaskDelay(500);
//等待松手,延时防松手抖动153
}
154
/*20ms扫描一次*/155LOS_TaskDelay(20);
156
}157}2)定义任务创建函数Creat_Receive_Task()和Creat_Send_Task()。
任务4-1消息队列使用(不带复制读写方式)158/***********************************************************159*@函数名:Creat_Receive_Task160*@功能说明:创建Receive_Task任务161*@参数:
无
162*@返回值:无163**********************************************************/164staticUINT32Creat_Receive_Task()165{166
//定义一个返回类型变量,初始化为LOS_OK167UINT32uwRet=LOS_OK;
168
//定义一个用于创建任务的参数结构体169TSK_INIT_PARAM_Stask_init_param;
170task_init_param.usTaskPrio=
5;
/*任务优先级,数值越小,优先级越高*/171task_init_param.pcName=
"Receive_Task";/*任务名*/172task_init_param.pfnTaskEntry=
(TSK_ENTRY_FUNC)Receive_Task;/*任务函数入口*/173task_init_param.uwStackSize=
1024;
/*堆栈大小*/174uwRet=LOS_TaskCreate(&Receive_Task_Handle,
&task_init_param);/*创建任务*/175
returnuwRet;176}
任务4-1消息队列使用(不带复制读写方式)177/************************************************************178*@函数名:Creat_Send_Task179*@功能说明:创建Send_Task任务180*@参数:
无
181*@返回值:无182**********************************************************/183staticUINT32Creat_Send_Task()184{185
//定义一个返回类型变量,初始化为LOS_OK186UINT32uwRet=LOS_OK;
187TSK_INIT_PARAM_Stask_init_param;188task_init_param.usTaskPrio=
4;
/*任务优先级,数值越小,优先级越高*/189task_init_param.pcName=
"Send_Task";
/*任务名*/190task_init_param.pfnTaskEntry=
(TSK_ENTRY_FUNC)Send_Task;/*任务函数入口*/191task_init_param.uwStackSize=
1024;
/*堆栈大小*/
192uwRet=LOS_TaskCreate(&Send_Task_Handle,
&task_init_param);/*创建任务*/193
returnuwRet;194}
3)定义任务管理函数AppTaskCreate()。
任务4-1消息队列使用(不带复制读写方式)195/***********************************************************196*@函数名:AppTaskCreate197*@功能说明:任务创建,为了方便管理,所有的任务创建函数都可以放在这个函数里面198*@参数:无199*@返回值:无200***********************************************************/201staticUINT32AppTaskCreate(void)202{203
/*定义一个返回类型变量,初始化为LOS_OK*/204UINT32uwRet=LOS_OK;
205
/*创建一个测试队列*/206uwRet=LOS_QueueCreate("Test_Queue",
/*队列的名称*/207TEST_QUEUE_LEN,
/*队列的长度*/208
&Test_Queue_Handle,
/*队列的ID(句柄)*/209
0,
/*队列模式,官方暂时未使用*/210TEST_QUEUE_SIZE);
/*节点大小,单位为字节*/211
if
(uwRet!=LOS_OK)212
{213printf("Test_Queue队列创建失败!失败代码0x%X\n",uwRet);214
returnuwRet;215
}
任务4-1消息队列使用(不带复制读写方式)216uwRet=Creat_Receive_Task();217
if
(uwRet!=LOS_OK)218
{219printf("Receive_Task任务创建失败!失败代码0x%X\n",uwRet);220
returnuwRet;221
}222uwRet=Creat_Send_Task();223
if
(uwRet!=LOS_OK)224
{225printf("Send_Task任务创建失败!失败代码0x%X\n",uwRet);226
returnuwRet;227
}228
returnLOS_OK;229}230/*USERCODEEND0*/
4.在主函数中修改代码。
任务4-1消息队列使用(不带复制读写方式)236intmain(void)237{238
/*USERCODEBEGIN1*/239
//定义一个返回类型变量,初始化为LOS_OK240UINT32uwRet=LOS_OK;
241
/*USERCODEEND1*/242
/*MCUConfiguration---------------------------------------*/243
/*Resetofallperipherals,InitializestheFlashinterfaceandtheSystick.*/244HAL_Init();245
/*Configurethesystemclock*/246SystemClock_Config();247
/*Initializeallconfiguredperipherals*/248MX_GPIO_Init();249MX_USART1_UART_Init();250MX_USART2_UART_Init();251MX_USART3_UART_Init();
任务4-1消息队列使用(不带复制读写方式)252
/*LiteOS内核初始化*/253uwRet=LOS_KernelInit();
254
if
(uwRet!=LOS_OK)255
{256printf("L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 平煤集团六矿考勤制度
- 检察机关考勤制度
- 物价局内部考勤制度
- 组织生活严格考勤制度
- 综合执法局考勤制度
- 美容美发卫生考勤制度
- 西吉县公安局考勤制度
- 驻村书记考勤制度
- 2025年甘肃电器科学研究院聘用人员招聘备考题库带答案详解
- 2025-2026学年河南省焦作市高二上学期期中考试英语试题
- 2026年山东铝业职业学院单招综合素质考试必刷测试卷带答案解析
- 物流园区规划与设计课件
- 直播销售工作计划与时间表
- 2026年营口职业技术学院单招职业技能考试题库必考题
- 警车安全驾驶课件大全
- 2025年内蒙历年单招题库及答案
- 2025下半年教师资格考试(初中信息技术)新版真题卷附答案
- 《脓毒症标准化动物模型》
- 强化训练苏科版九年级物理下册《电磁转换》专题练习试题(解析版)
- 初三完整版英语单项选择100题练习题及答案含答案
- 2025年及未来5年中国高压开关制造行业发展监测及投资方向研究报告
评论
0/150
提交评论