11-ESP8266 SDK开发基础入门篇--软硬件定时器
https://www.cnblogs.com/yangfengwu/p/11094009.html
定时器有两种,软件定时器和硬件定时器
软件定时器就是靠里面的任务延时实现的,,这样的定时器其实延时不准确
硬件定时器 就是硬件中断定时器,咱都学过单片机,中断的准确
先看软件定时器
具体大家看下面
所以第一步,定义一个定时器变量
可以看这个文件,咱就是用这个头文件
os_timer_t os_timer_one;//定义一个全局的定时器结构体变量
先看带参数的
void *XXX 就是说可以接收任意的指针变量
//定义一个定时器用的回调函数 void os_timer_one_function(void *parg) { printf("parg:%s\n", parg);//打印一下传过来的参数 GPIO_OUTPUT_SET(5, 1-GPIO_INPUT_GET(5));//GPIO5输出 反转 }
os_timer_setfn(&os_timer_one,os_timer_one_function,"yang");//配置定时器 定时器结构体变量 回调函数 传给回调函数的参数 os_timer_arm(&os_timer_one,500,1);//使能定时器 os_timer_one--定时器变量 500--500ms进一次 1--循环进去
下载进去
500ms亮 500ms灭
其实这个参数是
os_timer_setfn(&os_timer_one,os_timer_one_function,"yang");
这个时候传过去的,只传这一次,只不过,局部变量的值设置了是yang 后期进中断的时候都没有去设置这个参数
不带参数就不说了哈
大家自己测试,报不报错就看官方底层怎么写的了
现在看硬件中断定时器
然后...官方给了例子
咱就稍微改改回调函数里面的
程序挂了......不可以运行了,总是=重启
然后我把
程序又好了
我感觉这个定时器是us级的定时器
1000 才1ms
1ms进一次执行 printf printf还没执行完 中断又到了 所以程序崩了
u32 cnt = 0; void hw_test_timer_cb(void) { cnt++; if(cnt>1000) { cnt=0; printf("1111111111111:%s\n");//打印 } }
忘了..我后面怎么加了个%s 忘了去掉了