任务8-2 软件定时器使用_第1页
任务8-2 软件定时器使用_第2页
任务8-2 软件定时器使用_第3页
任务8-2 软件定时器使用_第4页
任务8-2 软件定时器使用_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

任务8-2软件定时器使用Task8-2UsingSoftwareTimer《物联网操作系统技术与应用》制作人张亚军

任务描述在LiteOS中创建两个软件定时器,其中一个软件定时器是单次模式,5000Ticks后调用一次回调函数,另一个软件定时器是周期模式,每1000Ticks调用一次回调函数,在回调函数中输出相关信息。

任务实现1.打开第2章中移植好LiteOS的裸机工程TEST,修改OS_CONFIG\target_config.h文件。任务8-2软件定时器使用 242

#defineLOSCFG_BASE_CORE_SWTMR_ALIGNNO2.修改main.c文件,添加头文件。26

/*USERCODEBEGINIncludes*/27

/*LiteOS头文件*/28#include"los_sys.h"29#include"los_task.ph"30#include"los_swtmr.h"31/*USERCODEENDIncludes*/3.定义软件定时器句柄(ID),声明全局变量。任务8-2软件定时器使用 60

/*USERCODEBEGIN0*/61

/*定义定时器句柄(ID)*/62UINT16Timer1_Handle;63UINT16Timer2_Handle;64

/******************全局变量声明********************/65

staticUINT32TmrCb_Count1=

0;66

staticUINT32TmrCb_Count2=

0;4.定义软件定时器回调函数Timer1_Callback()、Timer2_Callback()。67

/*************************************************************68*@函数名

:Timer1_Callback69*@功能说明:

软件定时器回调函数170*@参数

传入1个参数,但未使用

71*@返回值

无72***********************************************************/73

static

voidTimer1_Callback(UINT32arg)74

{75UINT32tick_num1;76TmrCb_Count1++;

/*每回调一次加一*/77HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_5);

//LED1翻转78tick_num1=

(UINT32)LOS_TickCountGet();

/*获取滴答定时器的计数值*/

79printf("全局变量TmrCb_Count1=%d\n",TmrCb_Count1);80printf("软件定时器Timer1的计数值tick_num1=%d\n",tick_num1);81

}任务8-2软件定时器使用 82

/************************************************************83*@函数名

:Timer2_Callback84*@功能说明:

软件定时器回调函数285*@参数

传入1个参数,但未使用

86*@返回值

无87***********************************************************/88

static

voidTimer2_Callback(UINT32arg)89

{90UINT32tick_num2;

91TmrCb_Count2++;

/*每回调一次加一*/92HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_4);

//LED2翻转93tick_num2=

(UINT32)LOS_TickCountGet();

/*获取滴答定时器的计数值*/

94printf("全局变量TmrCb_Count2=%d\n",TmrCb_Count2);

95printf("软件定时器Timer2的计数值tick_num2=%d\n",tick_num2);

96

}5.定义创建、启动软件定时器的函数AppTaskCreate()。任务8-2软件定时器使用 97

/************************************************************98*@函数名

:AppTaskCreate99*@功能说明:

创建、启动软件定时器100*@参数

101*@返回值

无102***********************************************************/103staticUINT32AppTaskCreate(void)104{105

/*定义一个返回类型变量,初始化为LOS_OK*/106UINT32uwRet=LOS_OK;

107

/*创建一个软件定时器定时器*/108uwRet=LOS_SwtmrCreate(5000,

/*软件定时器的定时时间*/

109LOS_SWTMR_MODE_ONCE,

/*软件定时器模式,一次模式*/110

(SWTMR_PROC_FUNC)Timer1_Callback,

/*软件定时器的回调函数*/111

&Timer1_Handle,

/*软件定时器的id*/112

0);

113

if

(uwRet!=LOS_OK)114

{115printf("软件定时器Timer1创建失败!\n");116

}117uwRet=LOS_SwtmrCreate(1000,

/*软件定时器的定时时间(ms)*/

118LOS_SWTMR_MODE_PERIOD,

/*软件定时器模式,周期模式*/119

(SWTMR_PROC_FUNC)Timer2_Callback,

/*软件定时器的回调函数*/120

&Timer2_Handle,

/*软件定时器的id*/121

0);

122

if

(uwRet!=LOS_OK)

123

{124printf("软件定时器Timer2创建失败!\n");125

returnuwRet;126

}

127

/*启动一个软件定时器定时器*/128uwRet=LOS_SwtmrStart(Timer1_Handle);129

if

(LOS_OK!=uwRet)130

{131printf("startTimer1failed\n");132

returnuwRet;133

}134

else135

{136printf("启动软件定时器Timer1成功!\n");137

}138

/*启动一个软件定时器定时器*/139uwRet=LOS_SwtmrStart(Timer2_Handle);140

if

(LOS_OK!=uwRet)141

{142printf("startTimer2failed\n");143

returnuwRet;144

}145

else146

{147printf("启动软件定时器Timer2成功!\n");148

}

149

returnLOS_OK;150}151/*USERCODEEND0*/6.在主函数中修改代码。任务8-2软件定时器使用 157intmain(void)158{159

/*USERCODEBEGIN1*/160UINT32uwRet=LOS_OK;

//定义一个返回类型变量,初始化为LOS_OK161

/*USERCODEEND1*/162

/*MCUConfiguration----------------------------------*/163

/*Resetofallperipherals,InitializestheFlashinterfaceandtheSystick.*/164HAL_Init();165

/*Configurethesystemclock*/166SystemClock_Config();167

/*Initializeallconfiguredperipherals*/168MX_GPIO_Init();169MX_USART1_UART_Init();170MX_USART2_UART_Init();171MX_USART3_UART_Init();172

/*LiteOS内核初始化*/173uwRet=LOS_KernelInit();174

if

(uwRet!=LOS_OK)175

{176printf("LiteOS核心初始化失败!失败代码0x%X\n",uwRet);177

returnLOS_NOK;178

}179printf("任务8-2软件定时器使用!\n\n");180uwRet=AppTaskCreate();181

if

(uwRet!=LOS_OK)182

{183printf("AppTaskCreate创建任务失败!失败代码0x%X\n",uwRet);184

returnLOS_NOK;185

}186

/*开启LiteOS任务调度*/187LOS_Start();188

/*Infiniteloop*/189

while

(1)190

{191

}192}7.添加串口发送函数。任务8-2软件定时器使用 250/*USERCODEBEGIN4*/251intfputc(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论