CC26XX的RTOS定时器任务的建立。

来源:互联网 发布:luaeditor mac 编辑:程序博客网 时间:2024/06/04 19:24

此前我自己写过一个多线程,相比较于多线程,我个人更推荐多任务。

转自:http://blog.csdn.NET/feilusia

一、简介

本文以SimpleBLEPeripheral工程为例,介绍如何使用系统提供的定时器执行一个自定义的周期事件


二、实验平台

协议栈版本:ble_cc26xx_2_01_00_44423

编译软件:IAR Embedded Workbench for ARM Version 7.40

硬件平台:CC26xxDK开发板

仿真器:XDS100V3(香瓜)


版权声明

博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:897503845@qq.com

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667
香瓜单片机之Linux群:512598061
香瓜单片机之职场交流群:450154342
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

四、实验前提
1、在进行本文步骤前,请先阅读以下博文:
暂无

2、在进行本文步骤前,请先实现以下博文:
暂无


五、实验步骤

1、定义周期事件

1)定义周期事件的宏(simpleBLEPeripheral.c中)

[cpp] view plain copy
  1. #define SBP_GUA_PERIODIC_EVT                  0x0020    //香瓜周期事件  

2)添加周期事件的处理(simpleBLEPeripheral.c的SimpleBLEPeripheral_taskFxn中)

[cpp] view plain copy
  1. //香瓜周期事件  
  2. if (events & SBP_GUA_PERIODIC_EVT)  
  3. {  
  4.   events &= ~SBP_GUA_PERIODIC_EVT;  
  5.   
  6.   //再次启动定时器  
  7.   Util_startClock(&GUA_periodicClock);  
  8.   
  9.   //香瓜周期处理函数  
  10.   GUA_performPeriodicTask();  
  11. }    
放在其他事件之后即可。


2、定义及声明周期事件的处理函数(simpleBLEPeripheral.c中)

1)定义周期事件的处理函数

[cpp] view plain copy
  1. //******************************************************************************              
  2. //name:             GUA_performPeriodicTask             
  3. //introduce:        周期事件的处理函数         
  4. //parameter:        none                  
  5. //return:           none           
  6. //author:           甜甜的大香瓜                   
  7. //email:            897503845@qq.com       
  8. //QQ group          香瓜BLE之CC2640(557278427)                    
  9. //changetime:       2016.08.28                       
  10. //******************************************************************************   
  11. static void GUA_performPeriodicTask(void)  
  12. {  
  13.   
  14. }  
这里没做任何处理,可自行添加如LED闪烁、串口打印等,方便查看现象。


2)声明周期事件的处理函数

[cpp] view plain copy
  1. static void GUA_performPeriodicTask(void);  

3、初始化定时器

1)定义定时器结构体数据(simpleBLEPeripheral.c中)

[cpp] view plain copy
  1. //GUA  
  2. static Clock_Struct GUA_periodicClock;  

2)设置定时时间(simpleBLEPeripheral.c中)

[cpp] view plain copy
  1. //GUA  
  2. #define SBP_GUA_PERIODIC_EVT_PERIOD           3000      //香瓜定时时间  
这里设置为3000ms。

3)初始化定时事件(simpleBLEPeripheral.c的SimpleBLEPeripheral_init中)

[cpp] view plain copy
  1. //初始化定时器  
  2. Util_constructClock(&GUA_periodicClock, SimpleBLEPeripheral_clockHandler,  
  3.                     SBP_GUA_PERIODIC_EVT_PERIOD, 0, false, SBP_GUA_PERIODIC_EVT);  
  4.   
  5. //启动定时器  
  6. Util_startClock(&GUA_periodicClock);    

注意一个是定时器初始化函数,另一个是启动定时器函数。必须两个都有,定时器才能被启动起来。

simpleBLEPeripheral工程默认一上电虽然进行了定时器初始化,而启动定时器放在连接回调事件中,因此只有连接之后才会执行工程中默认的定时器周期函数。


六、实验结果

设置断点在周期事件中,仿真查看,可发现约3S进一次事件。


因此,实验成功。