硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2192|回复: 3
收起左侧

[FreeRTOS] xTimerCreate 注册定时器的周期会变化

[复制链接]

91

主题

87

回帖

360

积分

高级会员

积分
360
发表于 2020-9-2 11:02:37 | 显示全部楼层 |阅读模式
本帖最后由 wen 于 2020-9-2 11:17 编辑



  1. void AutoReloadCallback(TimerHandle_t xTimer)
  2. {
  3.         if(g_flg1)
  4.         {
  5.                 delay_ms(100);//占用cpu
  6.                 printf("xxxxxx\n");
  7.         }
  8.        
  9.         if(g_flg2)
  10.         {
  11.                 printf("yyyyyyy\n");
  12.         }
  13. }
复制代码



调用xTimerCreate    将AutoReloadCallback回调函数注册,周期为100ms。
将g_flg1=1;g_flg2=0,xxxxxxx的打印周期大约是200ms,持续大约一段时间

将g_flg1=0;g_flg2=1;yyyyyyy的打印周期明显不是100ms,要快好多,请问这是怎么回事?谢谢


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2020-9-2 11:11:53 | 显示全部楼层
楼主,方便的话,把你这个题目修改下,程序排个版
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2020-9-2 15:01:49 | 显示全部楼层
先修改一个代码。

用了RTOS,就不要再调用delay_ms(100)这种裸机延迟,如果你这个延迟是封装了RTOS的延迟API,更加禁止的。
1.png
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2020-9-2 15:17:03 | 显示全部楼层
本帖最后由 caicaptain2 于 2020-9-2 15:30 编辑

你这个解释起来可能有点复杂。 delay_ms(100);//占用cpu 这个会导致定时器回调函数多次重入,某些任务标志位没有清零。具体什么后果也不清楚。如果不是理论研究操作系统的话,可以变更自己的思路,更快适应它。
可以改一下编程的思路。 比如希望在一个100ms的定时器里面分别执行100ms,200ms间隔的任务,可以使用一个计数变量来判定100ms,200ms。。。500ms的周期。 因为定时器回调函数应该是快进快出的。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-1 10:09 , Processed in 0.277697 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表