10a7ce71fSopenharmony_ci# HiSpark WiFi-IoT 套件样例开发--软定时器(Timer) 20a7ce71fSopenharmony_ci 30a7ce71fSopenharmony_ci 40a7ce71fSopenharmony_ci 50a7ce71fSopenharmony_ci[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开发者中得到广泛应用。 60a7ce71fSopenharmony_ci 70a7ce71fSopenharmony_ci 80a7ce71fSopenharmony_ci 90a7ce71fSopenharmony_ci## 一、Timer API 100a7ce71fSopenharmony_ci 110a7ce71fSopenharmony_ci| API名称 | 说明 | 120a7ce71fSopenharmony_ci| ---------------- | ------------------------ | 130a7ce71fSopenharmony_ci| osTimerNew | 创建和初始化定时器 | 140a7ce71fSopenharmony_ci| osTimerGetName | 获取指定的定时器名字 | 150a7ce71fSopenharmony_ci| osTimerStart | 启动或者重启指定的定时器 | 160a7ce71fSopenharmony_ci| osTimerStop | 停止指定的定时器 | 170a7ce71fSopenharmony_ci| osTimerIsRunning | 检查一个定时器是否在运行 | 180a7ce71fSopenharmony_ci| osTimerDelete | 删除定时器 | 190a7ce71fSopenharmony_ci 200a7ce71fSopenharmony_ci### osTimerNew() 210a7ce71fSopenharmony_ci 220a7ce71fSopenharmony_ci```c 230a7ce71fSopenharmony_ciosTimerId_t osTimerNew (osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr) 240a7ce71fSopenharmony_ci``` 250a7ce71fSopenharmony_ci 260a7ce71fSopenharmony_ci**参数:** 270a7ce71fSopenharmony_ci 280a7ce71fSopenharmony_ci| 名字 | 描述 | 290a7ce71fSopenharmony_ci| :------- | :----------------------------------------------------------- | 300a7ce71fSopenharmony_ci| func | 定时器回调函数. | 310a7ce71fSopenharmony_ci| type | 定时器类型,osTimerOnce表示单次定时器,ostimer周期表示周期性定时器. | 320a7ce71fSopenharmony_ci| argument | 定时器回调函数的参数 | 330a7ce71fSopenharmony_ci| attr | 定时器属性 | 340a7ce71fSopenharmony_ci 350a7ce71fSopenharmony_ci## 二、代码分析 360a7ce71fSopenharmony_ci 370a7ce71fSopenharmony_ci定时器的回调函数 380a7ce71fSopenharmony_ci 390a7ce71fSopenharmony_ci```c 400a7ce71fSopenharmony_civoid cb_timeout_periodic(void *arg) { 410a7ce71fSopenharmony_ci (void)arg; 420a7ce71fSopenharmony_ci times++; 430a7ce71fSopenharmony_ci} 440a7ce71fSopenharmony_ci``` 450a7ce71fSopenharmony_ci 460a7ce71fSopenharmony_ci使用osTimerNew创建一个100个时钟周期调用一次回调函数cb_timeout_periodic定时器,每隔100个时钟周期检查一下全局变量times是否小于3,若不小于3则停止时钟周期 470a7ce71fSopenharmony_ci 480a7ce71fSopenharmony_ci```c 490a7ce71fSopenharmony_civoid timer_periodic(void) { 500a7ce71fSopenharmony_ci osTimerId_t periodic_tid = osTimerNew(cb_timeout_periodic, osTimerPeriodic, NULL, NULL); 510a7ce71fSopenharmony_ci if (periodic_tid == NULL) { 520a7ce71fSopenharmony_ci printf("[Timer Test] osTimerNew(periodic timer) failed.\r\n"); 530a7ce71fSopenharmony_ci return; 540a7ce71fSopenharmony_ci } else { 550a7ce71fSopenharmony_ci printf("[Timer Test] osTimerNew(periodic timer) success, tid: %p.\r\n",periodic_tid); 560a7ce71fSopenharmony_ci } 570a7ce71fSopenharmony_ci osStatus_t status = osTimerStart(periodic_tid, 100); 580a7ce71fSopenharmony_ci if (status != osOK) { 590a7ce71fSopenharmony_ci printf("[Timer Test] osTimerStart(periodic timer) failed.\r\n"); 600a7ce71fSopenharmony_ci return; 610a7ce71fSopenharmony_ci } else { 620a7ce71fSopenharmony_ci printf("[Timer Test] osTimerStart(periodic timer) success, wait a while and stop.\r\n"); 630a7ce71fSopenharmony_ci } 640a7ce71fSopenharmony_ci 650a7ce71fSopenharmony_ci while(times < 3) { 660a7ce71fSopenharmony_ci printf("[Timer Test] times:%d.\r\n",times); 670a7ce71fSopenharmony_ci osDelay(100); 680a7ce71fSopenharmony_ci } 690a7ce71fSopenharmony_ci 700a7ce71fSopenharmony_ci status = osTimerStop(periodic_tid); 710a7ce71fSopenharmony_ci printf("[Timer Test] stop periodic timer, status :%d.\r\n", status); 720a7ce71fSopenharmony_ci status = osTimerDelete(periodic_tid); 730a7ce71fSopenharmony_ci printf("[Timer Test] kill periodic timer, status :%d.\r\n", status); 740a7ce71fSopenharmony_ci} 750a7ce71fSopenharmony_ci 760a7ce71fSopenharmony_ci``` 770a7ce71fSopenharmony_ci 780a7ce71fSopenharmony_ci 790a7ce71fSopenharmony_ci 800a7ce71fSopenharmony_ci## 三、如何编译 810a7ce71fSopenharmony_ci 820a7ce71fSopenharmony_ci1. 将此目录下的 `timer.c` 和 `BUILD.gn` 复制到openharmony源码的`applications\sample\wifi-iot\app\iothardware`目录下, 830a7ce71fSopenharmony_ci2. 修改openharmony源码的`applications\sample\wifi-iot\app\BUILD.gn`文件,将其中的 `features` 改为: 840a7ce71fSopenharmony_ci 850a7ce71fSopenharmony_ci``` 860a7ce71fSopenharmony_ci features = [ 870a7ce71fSopenharmony_ci "iothardware:timer_demo", 880a7ce71fSopenharmony_ci ] 890a7ce71fSopenharmony_ci``` 900a7ce71fSopenharmony_ci 910a7ce71fSopenharmony_ci3. 在openharmony源码顶层目录执行:`python build.py wifiiot` 920a7ce71fSopenharmony_ci 930a7ce71fSopenharmony_ci## 四、运行结果 940a7ce71fSopenharmony_ci 950a7ce71fSopenharmony_ci``` 960a7ce71fSopenharmony_ci[Timer Test] osTimerNew(periodic timer) success, tid: 0xe9b4c. 970a7ce71fSopenharmony_ci[Timer Test] osTimerStart(periodic timer) success, wait a while and stop. 980a7ce71fSopenharmony_ci[Timer Test] times:0. 990a7ce71fSopenharmony_ci[Timer Test] times:1. 1000a7ce71fSopenharmony_ci[Timer Test] times:2. 1010a7ce71fSopenharmony_ci[Timer Test] stop periodic timer, status :0. 1020a7ce71fSopenharmony_ci[Timer Test] kill periodic timer, status :0. 1030a7ce71fSopenharmony_ci``` 1040a7ce71fSopenharmony_ci 1050a7ce71fSopenharmony_ci### 【套件支持】 1060a7ce71fSopenharmony_ci 1070a7ce71fSopenharmony_ci##### 1. 套件介绍 http://www.hihope.org/pro/pro1.aspx?mtt=8 1080a7ce71fSopenharmony_ci 1090a7ce71fSopenharmony_ci##### 2. 套件购买 https://item.taobao.com/item.htm?id=622343426064&scene=taobao_shop 1100a7ce71fSopenharmony_ci 1110a7ce71fSopenharmony_ci##### 3. 技术资料 1120a7ce71fSopenharmony_ci 1130a7ce71fSopenharmony_ci- Gitee码云网站(OpenHarmony Sample Code等) **https://gitee.com/hihopeorg** 1140a7ce71fSopenharmony_ci 1150a7ce71fSopenharmony_ci- HiHope官网-资源中心(SDK包、技术文档下载)[**www.hihope.org**](http://www.hihope.org/) 1160a7ce71fSopenharmony_ci 1170a7ce71fSopenharmony_ci##### 4. 互动交流 1180a7ce71fSopenharmony_ci 1190a7ce71fSopenharmony_ci- 润和HiHope技术交流-微信群(加群管理员微信13605188699,发送文字#申请加入润和官方群#,予以邀请入群) 1200a7ce71fSopenharmony_ci- HiHope开发者社区-论坛 **https://bbs.elecfans.com/group_1429** 1210a7ce71fSopenharmony_ci- 润和HiHope售后服务群(QQ:980599547) 1220a7ce71fSopenharmony_ci- 售后服务电话(025-52668590) 1230a7ce71fSopenharmony_ci 124