版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务4-2消息队列使用(带复制读写方式)Task4-2UsingMessageQueue(withcopymode)《物联网操作系统技术与应用》制作人张亚军
任务描述
在LiteOS中创建两个任务,一个是写消息任务,另一个是读消息任务。两个任务独立运行,按下KEY1键时向消息队列中写入消息,按下KEY2键时从消息队列中读出消息。
任务实现1.打开第2章中移植好LiteOS的裸机工程TEST,修改main.c文件,添加头文件。
任务4-2消息队列使用(带复制读写方式)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-2消息队列使用(带复制读写方式)60/*USERCODEBEGIN0*/61/*定义任务ID变量*/62UINT32Receive_Task_Handle;63UINT32Send_Task_Handle;64
/*定义消息队列的ID*/65UINT32Test_Queue_Handle;66
/*定义消息队列长度*/67#defineTEST_QUEUE_LEN1068#defineTEST_QUEUE_SIZE1069
/*写消息队列需要用到的全局变量*/70UINT32send_data,i=1;71
/************************************************************72*@函数名:Receive_Task73*@功能说明:Receive_Task任务实现74*@参数:无75*@返回值:无76***********************************************************/
任务4-2消息队列使用(带复制读写方式)77
static
voidReceive_Task(void)78
{79
/*定义一个返回类型变量,初始化为LOS_OK*/80UINT32uwRet=LOS_OK;81UINT32r_queue;82UINT32buffsize;83
/*任务都是一个无限循环,不能返回*/84
while(1)85
{86buffsize=10;87
/*KEY2键被按下*/88
if(
!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5))
89
{90
/*队列读取(接收),等待时间为一直等待*/91uwRet=LOS_QueueReadCopy(Test_Queue_Handle,
/*读取(接收)队列的ID(句柄)*/92
&r_queue,
/*读取(接收)的数据保存位置*/93
&buffsize,
/*读取(接收)的数据的长度*/94LOS_WAIT_FOREVER);
/*等待时间:一直等*/
任务4-2消息队列使用(带复制读写方式)95LOS_TaskDelay(500);
//等待松手,延时防松手抖动96
if(LOS_OK==uwRet)97
{98printf("本次从消息队列中读出的数据是:%d,读出数据的长度是:%d\n",r_queue,buffsize);99
}100
else101
{102printf("数据接收出错,错误代码0x%X\n",uwRet);103
}104
}105
/*20ms扫描一次*/106LOS_TaskDelay(20);
107
}108}109/***********************************************************110*@函数名:Send_Task111*@功能说明:Send_Task任务实现112*@参数:无113*@返回值:无114***********************************************************/
任务4-2消息队列使用(带复制读写方式)115static
voidSend_Task(void)116{117
/*定义一个返回类型变量,初始化为LOS_OK*/118UINT32uwRet=LOS_OK;
119
/*任务都是一个无限循环,不能返回*/120
while(1)121
{122
/*KEY1键被按下*/123
if(
!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4))
//读取KEY按键引脚,低电平表示按下124
{125send_data=i;126
/*将数据写入(发送)到队列中,等待时间为0*/127uwRet=LOS_QueueWriteCopy(Test_Queue_Handle,
/*写入(发送)队列的ID(句柄)*/128
&(send_data),
/*写入(发送)的数据*/129
sizeof(send_data),
/*数据的长度*/130
0);
/*等待时间为0*/131
if(LOS_OK==uwRet)132
{133printf("本次写入消息队列的数据是:%d\n",send_data);134
}135
else
任务4-2消息队列使用(带复制读写方式)136
{137printf("数据不能发送到消息队列!错误代码0x%X\n",uwRet);138
}139LOS_TaskDelay(500);
//等待松手,延时防松手抖动140i++;141
}
142
/*20ms扫描一次*/143LOS_TaskDelay(20);
144
}145}2)定义任务创建函数Creat_Receive_Task()和Creat_Send_Task()。146/**********************************************************147*@函数名:Creat_Receive_Task148*@功能说明:创建Receive_Task任务149*@参数:
无
150*@返回值:无151**********************************************************/152staticUINT32Creat_Receive_Task()
任务4-2消息队列使用(带复制读写方式)153{154
//定义一个返回类型变量,初始化为LOS_OK155UINT32uwRet=LOS_OK;
156
//定义一个用于创建任务的参数结构体157TSK_INIT_PARAM_Stask_init_param;
158task_init_param.usTaskPrio=
5;
/*任务优先级,数值越小,优先级越高*/159task_init_param.pcName=
"Receive_Task";/*任务名*/160task_init_param.pfnTaskEntry=
(TSK_ENTRY_FUNC)Receive_Task;/*任务函数入口*/161task_init_param.uwStackSize=
1024;
/*堆栈大小*/162uwRet=LOS_TaskCreate(&Receive_Task_Handle,
&task_init_param);/*创建任务*/163
returnuwRet;164}165/************************************************************166*@函数名:Creat_Send_Task167*@功能说明:创建Send_Task任务168*@参数:无169*@返回值:无170***********************************************************/
任务4-2消息队列使用(带复制读写方式)171staticUINT32Creat_Send_Task()172{173
//定义一个返回类型变量,初始化为LOS_OK174UINT32uwRet=LOS_OK;
175TSK_INIT_PARAM_Stask_init_param;176task_init_param.usTaskPrio=
4;
/*任务优先级,数值越小,优先级越高*/177task_init_param.pcName=
"Send_Task";
/*任务名*/178task_init_param.pfnTaskEntry=
(TSK_ENTRY_FUNC)Send_Task;/*任务函数入口*/179task_init_param.uwStackSize=
1024;
/*堆栈大小*/
180uwRet=LOS_TaskCreate(&Send_Task_Handle,
&task_init_param);/*创建任务*/181
returnuwRet;182}
3)定义任务管理函数AppTaskCreate()。
任务4-2消息队列使用(带复制读写方式)183/*************************************************************184*@函数名:AppTaskCreate185*@功能说明:任务创建,为了方便管理,所有的任务创建函数都可以放在这个函数里面186*@参数:无187*@返回值:无188************************************************************/189staticUINT32AppTaskCreate(void)190{191
/*定义一个返回类型变量,初始化为LOS_OK*/192UINT32uwRet=LOS_OK;
193
/*创建一个测试队列*/194uwRet=LOS_QueueCreate("Test_Queue",
/*队列的名称*/195TEST_QUEUE_LEN,
/*队列的长度*/196
&Test_Queue_Handle,
/*队列的ID(句柄)*/197
0,
/*队列模式,官方暂时未使用*/198TEST_QUEUE_SIZE);
/*节点大小,单位为字节*/199
if
(uwRet!=LOS_OK)200
{201printf("Test_Queue队列创建失败!失败代码0x%X\n",uwRet);202
returnuwRet;203
}
任务4-2消息队列使用(带复制读写方式)204uwRet=Creat_Receive_Task();205
if
(uwRet!=LOS_OK)206
{207printf("Receive_Task任务创建失败!失败代码0x%X\n",uwRet);208
returnuwRet;209
}210uwRet=Creat_Send_Task();211
if
(uwRet!=LOS_OK)212
{213printf("Send_Task任务创建失败!失败代码0x%X\n",uwRet);214
returnuwRet;215
}216
returnLOS_OK;217}218/*USERCODEEND0*/
4.在主函数中修改代码。
任务4-2消息队列使用(带复制读写方式)224intmain(void)225{226
/*USERCODEBEGIN1*/227
//定义一个返回类型变量,初始化为LOS_OK228UINT32uwRet=LOS_OK;
229
/*USERCODEEND1*/230
/*MCUConfiguration---------------------------------------*/231
/*Resetofallperipherals,InitializestheFlashinterfaceandtheSystick.*/232HAL_Init();233
/*Configurethesystemclock*/234SystemClock_Config();235
/*Initializeallconfiguredperipherals*/236MX_GPIO_Init();237MX_USART1_UART_Init();238MX_USART2_UART_Init();239MX_USART3_UART_Init();240
/*LiteOS内核初始化*/241uwRet=LOS_KernelInit();
任务4-2消息队列使用(带复制读写方式)242
if
(uwRet!=LOS_OK)243
{244printf("LiteOS内核初始化失败!失败代码0x%X\n",uwRet);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年春季学期课后服务工作实施方案
- 2026年大学大四(风景园林)居住区景观设计综合测试题及答案
- 单位评价意见范文工作单位对员工的评价
- 2026中国航空发动机招聘面试题及答案
- 2026年供应商满意度调查表
- 2026中国储备粮管理集团秋招面试题及答案
- 客户绘画活动策划方案(3篇)
- 一次公益活动演讲稿(10篇)
- 出版物出版责任书范文8篇
- 搞装修活动策划方案(3篇)
- 认知行为疗法(CBT)实操讲座
- GB/T 3683-2023橡胶软管及软管组合件油基或水基流体适用的钢丝编织增强液压型规范
- 测绘仪器检测与维修
- GB/T 16866-2006铜及铜合金无缝管材外形尺寸及允许偏差
- GB/T 16855.2-2015机械安全控制系统安全相关部件第2部分:确认
- 计算机二级java考试课件(1-9章)
- 年产55万吨环氧乙烷乙二醇车间环氧乙烷合成工段工艺设计
- 准噶尔含油气盆地
- “双减”背景下提高初中体育课堂教学有效性的策略探究
- 云南中考文言文备考策略课件
- 井下变电所安装施工方案(常用)
评论
0/150
提交评论