任务7-1 发送和接收事件_第1页
任务7-1 发送和接收事件_第2页
任务7-1 发送和接收事件_第3页
任务7-1 发送和接收事件_第4页
任务7-1 发送和接收事件_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论