10a7ce71fSopenharmony_ci# HiSpark WiFi-IoT 套件样例开发--软定时器(Timer)
20a7ce71fSopenharmony_ci
30a7ce71fSopenharmony_ci![hihope_illustration](https://gitee.com/hihopeorg/hispark-hm-pegasus/raw/master/docs/figures/hihope_illustration.png)
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![wifi_iot](https://gitee.com/hihopeorg/hispark-hm-pegasus/raw/master/docs/figures/2.png)
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