wen 发表于 2020-9-2 11:02:37

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

本帖最后由 wen 于 2020-9-2 11:17 编辑




void AutoReloadCallback(TimerHandle_t xTimer)
{
        if(g_flg1)
        {
                delay_ms(100);//占用cpu
                printf("xxxxxx\n");
        }
       
        if(g_flg2)
        {
                printf("yyyyyyy\n");
        }
}



调用xTimerCreate    将AutoReloadCallback回调函数注册,周期为100ms。
将g_flg1=1;g_flg2=0,xxxxxxx的打印周期大约是200ms,持续大约一段时间将g_flg1=0;g_flg2=1;yyyyyyy的打印周期明显不是100ms,要快好多,请问这是怎么回事?谢谢

eric2013 发表于 2020-9-2 11:11:53

楼主,方便的话,把你这个题目修改下,程序排个版:handshake

eric2013 发表于 2020-9-2 15:01:49

先修改一个代码。

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

caicaptain2 发表于 2020-9-2 15:17:03

本帖最后由 caicaptain2 于 2020-9-2 15:30 编辑

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


页: [1]
查看完整版本: xTimerCreate 注册定时器的周期会变化