版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务7-1发送和接收事件Task7-1SendingandReceivingEvents《物联网操作系统技术与应用》制作人张亚军
任务描述
在LiteOS中创建两个任务LED_Task和Key_Task,LED_Task是一个读事件任务,Key_Task是一个写事件任务。写事件任务通过检测KEY1按键和KEY2按键的按下情况,写入相应事件,读事件任务则读取事件标志位,并判断事件是否发生了,如果是KEY1按键写入的事件发生,则LED1灯翻转,如果是KEY2按键写入的事件发生,则LED2灯翻转,并在串口输出相应信息。
任务实现
1.打开第2章中移植好LiteOS的裸机工程TEST,修改main.c文件,添加头文件。任务7-1发送和接收事件 26
/*USERCODEBEGINIncludes*/27
/*LiteOS头文件*/28#include"los_sys.h"29#include"los_task.ph"30
/*USERCODEENDIncludes*/2.定义任务ID变量、定义事件标志组的控制块、定义事件掩码。任务7-1发送和接收事件 59/*USERCODEBEGIN0*/60/*定义任务ID*/61UINT32LED_Task_Handle;62UINT32Key_Task_Handle;63
/*定义事件标志组的控制块*/64
staticEVENT_CB_SEventGroup_CB;65
/******************宏定义*********************/66#defineKEY1_EVENT(0x01
<<
0)//设置事件掩码的位067#defineKEY2_EVENT(0x01
<<
1)//设置事件掩码的位13.创建和管理任务LED_Task、任务Key_Task。1)定义任务实现函数LED_Task()、Key_Task()。68
/***********************************************************69*@函数名
:LED_Task70*@功能说明:LED_Task任务实现71*@参数
:NULL72*@返回值
:NULL73***********************************************************/74
static
voidLED_Task(void)75
{76
//定义一个事件接收变量77UINT32uwRet;
78
/*任务都是一个无限循环,不能返回
*/任务7-1发送和接收事件 79
while(1)80
{81
/*等待事件标志组*/82uwRet=LOS_EventRead(
&EventGroup_CB,
//事件标志组对象83KEY1_EVENT|KEY2_EVENT,
//等待任务感兴趣的事件84LOS_WAITMODE_OR,
//等待两位均被置位85LOS_WAIT_FOREVER);
//无期限等待86printf(
"uwRet=%x\n",uwRet);87
if(uwRet==KEY1_EVENT)
88
{89
/*如果接收完成并且正确*/90printf(
"KEY1按下,LED1翻转\n");91HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_5);
//LED1翻转92LOS_EventClear(&EventGroup_CB,
~KEY1_EVENT);//清除事件标志
93
}94
if(uwRet==KEY2_EVENT)
95
{96
/*如果接收完成并且正确*/97printf(
"KEY2按下,LED2翻转\n");98HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_4);
//LED2翻转99LOS_EventClear(&EventGroup_CB,
~KEY2_EVENT);//清除事件标志
100
}101
}102}103/************************************************************104*@函数名
:Key_Task105*@功能说明:Key_Task任务实现106*@参数
:NULL107*@返回值
:NULL108***********************************************************/109static
voidKey_Task(void)110{111
//定义一个返回类型变量,初始化为LOS_OK112UINT32uwRet=LOS_OK;
113
/*任务都是一个无限循环,不能返回*/114
while(1)115
{116
/*KEY1被按下*/117
if(
!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4))
//读取KEY1按键引脚,低电平表示按下118
{119printf(
"KEY1被按下\n"
);120LOS_TaskDelay(500);
//等待松手,延时防松手抖动121
/*触发一个事件1*/122LOS_EventWrite(&EventGroup_CB,KEY1_EVENT);
123
}124
/*KEY2被按下*/125
if(
!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5))
126
{127printf(
"KEY2被按下\n"
);
128LOS_TaskDelay(500);
//等待松手,延时防松手抖动129
/*触发一个事件2*/130LOS_EventWrite(&EventGroup_CB,KEY2_EVENT);
131
}132LOS_TaskDelay(20);
//每20ms扫描一次
133
}134}2)定义任务创建函数Creat_LED_Task()、Creat_Key_Task()。任务7-1发送和接收事件 135/************************************************************136*@函数名
:Creat_LED_Task137*@功能说明:
创建LED_Task任务138*@参数
:
139*@返回值
:
无140***********************************************************/141staticUINT32Creat_LED_Task()142{143
//定义一个返回类型变量,初始化为LOS_OK144UINT32uwRet=LOS_OK;
145
//定义一个用于创建任务的参数结构体146TSK_INIT_PARAM_Stask_init_param;
147task_init_param.usTaskPrio=
5;
/*任务优先级,数值越小,优先级越高*/148task_init_param.pcName=
"LED_Task";/*任务名*/149task_init_param.pfnTaskEntry=
(TSK_ENTRY_FUNC)LED_Task;/*任务函数入口*/150task_init_param.uwStackSize=
1024;
/*堆栈大小*/151uwRet=LOS_TaskCreate(&LED_Task_Handle,
&task_init_param);/*创建任务*/152
returnuwRet;153}任务7-1发送和接收事件 154/*************************************************************155*@函数名
:Creat_Key_Task156*@功能说明:
创建Key_Task任务157*@参数
:
158*@返回值
:
无159************************************************************/160staticUINT32Creat_Key_Task()161{162
//定义一个返回类型变量,初始化为LOS_OK163UINT32uwRet=LOS_OK;
164TSK_INIT_PARAM_Stask_init_param;165task_init_param.usTaskPrio=
4;
/*任务优先级,数值越小,优先级越高*/166task_init_param.pcName=
"Key_Task";
/*任务名*/167task_init_param.pfnTaskEntry=
(TSK_ENTRY_FUNC)Key_Task;/*任务函数入口*/168task_init_param.uwStackSize=
1024;
/*堆栈大小*/
169uwRet=LOS_TaskCreate(&Key_Task_Handle,
&task_init_param);/*创建任务*/170
returnuwRet;171}3)定义任务管理函数AppTaskCreate()。任务7-1发送和接收事件 178static
UINT32AppTaskCreate(void)179{180
/*定义一个返回类型变量,初始化为LOS_OK*/181UINT32uwRet=LOS_OK;
182
/*创建一个事件标志组*/183uwRet=LOS_EventInit(&EventGroup_CB);184
if
(uwRet!=LOS_OK)185
{186printf("EventGroup_CB事件标志组创建失败!失败代码0x%X\n",uwRet);187
}
188uwRet=Creat_LED_Task();189
if
(uwRet!=LOS_OK)190
{191printf("LED_Task任务创建失败!失败代码0x%X\n",uwRet);192
returnuwRet;193
}
194uwRet=Creat_Key_Task();195
if
(uwRet!=LOS_OK)196
{197printf("Key_Task任务创建失败!失败代码0x%X\n",uwRet);198
returnuwRet;199
}200
returnLOS_OK;201}202/*USERCODEEND0*/4.在主函数中修改代码。任务7-1发送和接收事件 208intmain(void)209{210
/*USERCODEBEGIN1*/211UINT32uwRet=LOS_OK;
//定义一个返回类型变量,初始化为LOS_OK212
/*USERCODEEND1*/213
/*MCUConfiguration-------------------------------------*/214
/*Resetofallperipherals,InitializestheFlashinterfaceandtheSystick.*/215HAL_Init();216
/*Configurethesystemclock*/217SystemClock_Config();218
/*Initializeallconfiguredperipherals*/219MX_GPIO_Init();220MX_USART1_UART_Init();221MX_USART2_UART_Init();222MX_USART3_UART_Init();223
/*LiteOS内核初始化*/224uwRet=LOS_KernelInit();225
if
(uwRet!=LOS_OK)226
{227printf("LiteOS核心初始化失败!失败代码0x%X\n",uwRet);228
returnLOS_NOK;229
}230printf("任务7-1发送和接收事件!\n\n");231
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京高中考勤制度
- 寿险考勤制度
- 三期员工违反考勤制度
- 学校阅读社团考勤制度
- 两学一做考核考勤制度
- 刚入职员工考勤制度
- 后厨考勤制度管理规定
- 油气田设备采购经理的职责与技能
- 汽车零部件生产厂家库存周转率提升方案介绍
- 项目成本核算管理制度
- 2025四川绵阳市五八机器人科技有限责任公司外部招聘19人(第三批次)笔试参考题库附带答案详解
- 2025年3月天津高考英语真题 试题版
- 水务公司2026年节后复工安全生产培训
- (2025年)泰兴市事业单位招聘财务会计知识试题及答案
- 2026内蒙古地质矿产集团有限公司社会招聘65人备考题库带答案详解(b卷)
- 足金点钻工艺培训
- 神秘客人报告
- JB-T 14535-2023 塑料注射模 试模方法
- 古代汉语(全套课件)pdf
- 国家高考志愿规划师资格认定考试题库(高频300题)
- 口腔护理操作规范口腔护理PPT
评论
0/150
提交评论