在嵌入式编程中,定时器是一个非常重要且强大的功能,用来帮我们定时性的调用中断服务函数来帮助我们处理程序。定时器通常是用硬件来实现的,例如stm32f407就有8个硬件定时器。
而在freertos中则可以用软件实现定时器。大大的扩展了定时器的数量。
阅读freertos开发者文档我们可以知道,软件定时器的回调函数会在定时器服务函数中执行。
同时,软件定时器的回调函数中不能调用然后可以导致阻塞的函数例如vtaskdelay()等等,包括等待信号量的函数这些也会造成阻塞。
freertos会使用队列向定时器服务任务发送命令,这个队列就是定时器命令队列。
创建软件定时器
在api引用文档中,我们可以查询有关创建软件定时器创建的函数。内容有许多,但是还是总归是分三个步骤:包含相关头文件、启动相关的宏、配置软件定时器。
软件定时器配置时也有三个参数需要注意,一个定时器的定时时间,一个是设置定时器重复使用还是一次项,最后需要注意的是传入调用函数的句柄。
定义相关的回调函数与定时器句柄。
timer_handler = xtimercreate ( (const char * const) xtimercreate, (const ticktype_t) 500,//500ms一次 (const ubasetype_t) pdtrue,//重复 (void * const) 1,//定时器id (timercallbackfunction_t) callbacl );//中断服务函数句柄接着我们定义一个轮询函数,当按键按下时,我们就开启定时器
void low_task(void * pvparameters)//参数为 void * pvparameters{ while(1) { if(key_scan(0)==1) { xtimerstart(timer_handler,100);//开始定时器传入句柄以及最大等待时间 } }}在回调函数中我们让led灯进行翻转
void callbacl( timerhandle_t xtimer){ hal_gpio_togglepin(gpiof,gpio_pin_10); }同样的,在官方的api文档中我们还可以看到许多和软件定时器有关的内容,在这里不一一介绍,有感兴趣的小伙伴可以去官网查看api使用说明。
反相比例放大电路
区块链战舰游戏以太战舰介绍
常见的几种西门子PLC通讯方式
如何挑选语音方案中的语音芯片型号
企商在线携手合作伙伴打造基于大数据中心的AI公共算力平台
基于STM32F407的FreeRTOS学习笔记(9)
电脑黑屏怎么办_重启也没有用
比迈腾省油,操控远超凯美瑞!看来雪铁龙C6要接手“家族老大”的位置了
开思APP中的智能接车神器为什么大受汽修门店的欢迎?
选择使用贴片保险丝时要注意的5个细节
[图文]6通道输入混合器
谷歌开源了一个强大的NLP深度学习框架Lingvo
激动人心的“人机大战”,中国棋院迎来谷歌创始人与CEO
weblogic正式服务属于什么模式
NXP并购两连发,目标剑指汽车和安全
纯干货:3个超实用PLC编程算法
AI人流量统计系统
5G商用网络话正在架构:5G实现价值
人工智能机器人如何引领餐饮行业的发展
台积电助AMD攻城拔寨 英特尔借三星巩固城池