【FreeRTOS】小白进阶之如何使用FreeRTOS软件定时器(一)

举报
产品人卫朋 发表于 2021/10/30 01:06:23 2021/10/30
【摘要】 介绍软件定时器使用基础:单次触发和自动重载定时器。 1、头文件声明 #include "FreeRTOS.h"#include "task.h"#include "timers.h"#include "supporting_functions.h" // 定义定时器相关时间#define mainONE_SHOT_TIMER_PER...

介绍软件定时器使用基础:单次触发和自动重载定时器。

1、头文件声明


  
  1. #include "FreeRTOS.h"
  2. #include "task.h"
  3. #include "timers.h"
  4. #include "supporting_functions.h"
  5. // 定义定时器相关时间
  6. #define mainONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 3333UL ) )
  7. #define mainAUTO_RELOAD_TIMER_PERIOD ( pdMS_TO_TICKS( 500UL ) )
  8. // 定时器回调函数
  9. static void prvOneShotTimerCallback( TimerHandle_t xTimer );
  10. static void prvAutoReloadTimerCallback( TimerHandle_t xTimer );

2、创建和启动软件定时器


  
  1. int main( void )
  2. {
  3. TimerHandle_t xAutoReloadTimer, xOneShotTimer;
  4. BaseType_t xTimer1Started, xTimer2Started;
  5. // 创建软件定时器:单次执行
  6. software timer in xOneShotTimer. */
  7. xOneShotTimer = xTimerCreate( "OneShot", // 名字
  8. mainONE_SHOT_TIMER_PERIOD, // 多久开始执行
  9. pdFALSE, // 设置为单次执行
  10. 0,
  11. prvOneShotTimerCallback ); // 回调函数
  12. // 创建软件定时器:自动重载
  13. xAutoReloadTimer = xTimerCreate( "AutoReload", // 名字
  14. mainAUTO_RELOAD_TIMER_PERIOD, // 重载需要时间
  15. pdTRUE, // 重载模式
  16. 0,
  17. prvAutoReloadTimerCallback ); // 回调函数
  18. if( ( xOneShotTimer != NULL ) && ( xAutoReloadTimer != NULL ) )
  19. {
  20. // 启动定时器
  21. xTimer1Started = xTimerStart( xOneShotTimer, 0 );
  22. xTimer2Started = xTimerStart( xAutoReloadTimer, 0 );
  23. if( ( xTimer1Started == pdPASS ) && ( xTimer2Started == pdPASS ) )
  24. {
  25. // 开始调度
  26. vTaskStartScheduler();
  27. }
  28. }
  29. for( ;; );
  30. return 0;
  31. }

3、定时器回调函数


  
  1. static void prvOneShotTimerCallback( TimerHandle_t xTimer )
  2. {
  3. static TickType_t xTimeNow;
  4. xTimeNow = xTaskGetTickCount();
  5. vPrintStringAndNumber( "One-shot timer callback executing", xTimeNow );
  6. }
  7. static void prvAutoReloadTimerCallback( TimerHandle_t xTimer )
  8. {
  9. static TickType_t xTimeNow;
  10. xTimeNow = xTaskGetTickCount();
  11. vPrintStringAndNumber( "Auto-reload timer callback executing", xTimeNow );
  12. }

 

文章来源: blog.csdn.net,作者:简一商业,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/liwei16611/article/details/82587673

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。