1# HiSpark WiFi-IoT 套件样例开发--软定时器(Timer) 2 3 4 5[HiSpark WiFi-IoT开发套件](https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w5003-23341819265.1.bf644a82Da9PZK&id=622343426064&scene=taobao_shop) 首发于HDC 2020,是首批支持OpenHarmony 2.0的开发套件,亦是官方推荐套件,由润和软件HiHope量身打造,已在OpenHarmony社区和广大OpenHarmony开发者中得到广泛应用。 6 7 8 9## 一、Timer API 10 11| API名称 | 说明 | 12| ---------------- | ------------------------ | 13| osTimerNew | 创建和初始化定时器 | 14| osTimerGetName | 获取指定的定时器名字 | 15| osTimerStart | 启动或者重启指定的定时器 | 16| osTimerStop | 停止指定的定时器 | 17| osTimerIsRunning | 检查一个定时器是否在运行 | 18| osTimerDelete | 删除定时器 | 19 20### osTimerNew() 21 22```c 23osTimerId_t osTimerNew (osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr) 24``` 25 26**参数:** 27 28| 名字 | 描述 | 29| :------- | :----------------------------------------------------------- | 30| func | 定时器回调函数. | 31| type | 定时器类型,osTimerOnce表示单次定时器,ostimer周期表示周期性定时器. | 32| argument | 定时器回调函数的参数 | 33| attr | 定时器属性 | 34 35## 二、代码分析 36 37定时器的回调函数 38 39```c 40void cb_timeout_periodic(void *arg) { 41 (void)arg; 42 times++; 43} 44``` 45 46使用osTimerNew创建一个100个时钟周期调用一次回调函数cb_timeout_periodic定时器,每隔100个时钟周期检查一下全局变量times是否小于3,若不小于3则停止时钟周期 47 48```c 49void timer_periodic(void) { 50 osTimerId_t periodic_tid = osTimerNew(cb_timeout_periodic, osTimerPeriodic, NULL, NULL); 51 if (periodic_tid == NULL) { 52 printf("[Timer Test] osTimerNew(periodic timer) failed.\r\n"); 53 return; 54 } else { 55 printf("[Timer Test] osTimerNew(periodic timer) success, tid: %p.\r\n",periodic_tid); 56 } 57 osStatus_t status = osTimerStart(periodic_tid, 100); 58 if (status != osOK) { 59 printf("[Timer Test] osTimerStart(periodic timer) failed.\r\n"); 60 return; 61 } else { 62 printf("[Timer Test] osTimerStart(periodic timer) success, wait a while and stop.\r\n"); 63 } 64 65 while(times < 3) { 66 printf("[Timer Test] times:%d.\r\n",times); 67 osDelay(100); 68 } 69 70 status = osTimerStop(periodic_tid); 71 printf("[Timer Test] stop periodic timer, status :%d.\r\n", status); 72 status = osTimerDelete(periodic_tid); 73 printf("[Timer Test] kill periodic timer, status :%d.\r\n", status); 74} 75 76``` 77 78 79 80## 三、如何编译 81 821. 将此目录下的 `timer.c` 和 `BUILD.gn` 复制到openharmony源码的`applications\sample\wifi-iot\app\iothardware`目录下, 832. 修改openharmony源码的`applications\sample\wifi-iot\app\BUILD.gn`文件,将其中的 `features` 改为: 84 85``` 86 features = [ 87 "iothardware:timer_demo", 88 ] 89``` 90 913. 在openharmony源码顶层目录执行:`python build.py wifiiot` 92 93## 四、运行结果 94 95``` 96[Timer Test] osTimerNew(periodic timer) success, tid: 0xe9b4c. 97[Timer Test] osTimerStart(periodic timer) success, wait a while and stop. 98[Timer Test] times:0. 99[Timer Test] times:1. 100[Timer Test] times:2. 101[Timer Test] stop periodic timer, status :0. 102[Timer Test] kill periodic timer, status :0. 103``` 104 105### 【套件支持】 106 107##### 1. 套件介绍 http://www.hihope.org/pro/pro1.aspx?mtt=8 108 109##### 2. 套件购买 https://item.taobao.com/item.htm?id=622343426064&scene=taobao_shop 110 111##### 3. 技术资料 112 113- Gitee码云网站(OpenHarmony Sample Code等) **https://gitee.com/hihopeorg** 114 115- HiHope官网-资源中心(SDK包、技术文档下载)[**www.hihope.org**](http://www.hihope.org/) 116 117##### 4. 互动交流 118 119- 润和HiHope技术交流-微信群(加群管理员微信13605188699,发送文字#申请加入润和官方群#,予以邀请入群) 120- HiHope开发者社区-论坛 **https://bbs.elecfans.com/group_1429** 121- 润和HiHope售后服务群(QQ:980599547) 122- 售后服务电话(025-52668590) 123 124