硬汉嵌入式论坛

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

[FreeRTOS] FreeRTOS时间与定时器时间的不对应的问题

[复制链接]

8

主题

29

回帖

53

积分

初级会员

积分
53
发表于 2018-4-28 09:41:49 | 显示全部楼层 |阅读模式

我在FreeRTOS中做了一个时间更新的任务,任务设置的优先级是最大的,但是统计的时间总是比实际的时间要慢,差不多每分钟要慢4秒左右;
程序中配置如下:
FreeRTOS的时钟频率是1000:
#define configTICK_RATE_HZ        ( ( TickType_t ) 1000 )       
定时器Timer0的频率定的为20K:
void Timer0init(void)
{
        UINT32 u32ExtFreq;
        volatile UINT32 u32TimeOut = 0;
        u32ExtFreq = sysGetExternalClock()*1000;
        sysSetTimerReferenceClock(TIMER0, u32ExtFreq); //External Crystal
        sysStartTimer(TIMER0, 20000, PERIODIC_MODE); //20K
        sysSetTimerEvent(TIMER0, 1, (PVOID)IRQ_50us);
        sysSetLocalInterrupt(ENABLE_IRQ);
}

时间统计的程序如下所示:
while(1)
{
        time_a=sysGetTicks(TIMER0);time_b=xTaskGetTickCount();
        second++;
        if(second>59)
        {
                second=0;
                minute++;
        }
        if(minute>59)
        {
                minute=0;
                hour++;
        }
        if(hour>99)
        {
                hour=0;
        }
        vTaskDelay(1000);
        time_c=sysGetTicks(TIMER0);time_d=xTaskGetTickCount();
        sysprintf("\ntime_c-time_a=%d,time_d-time_b=%d\n",time_c-time_a,time_d-time_b);
}


但是串口输出的时间如下图所示,Timer0的时间并不是20000,而是21000多,为什么会有这样的结果呢?麻烦大神帮忙分析下,谢谢
2018-04-28_092326.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2018-4-28 10:01:34 | 显示全部楼层
正常,任务调度这些都要占用时间。你这个抖动了1-2ms,时间稍长。
回复

使用道具 举报

8

主题

29

回帖

53

积分

初级会员

积分
53
 楼主| 发表于 2018-4-28 10:21:47 | 显示全部楼层
eric2013 发表于 2018-4-28 10:01
正常,任务调度这些都要占用时间。你这个抖动了1-2ms,时间稍长。

那有什么好方法通过FreeRTOS获得精确的时间吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2018-4-28 10:32:26 | 显示全部楼层
fendoushuai 发表于 2018-4-28 10:21
那有什么好方法通过FreeRTOS获得精确的时间吗?

使用函数vTaskDelayUntil ()做延迟。
回复

使用道具 举报

8

主题

29

回帖

53

积分

初级会员

积分
53
 楼主| 发表于 2018-4-28 11:01:45 | 显示全部楼层
eric2013 发表于 2018-4-28 10:32
使用函数vTaskDelayUntil ()做延迟。

根据打印信息来看,FreeRTOS确实延时了1000个周期,但是Timer0并不是20000,我想确认的是他们没有对应上,timer0的时间应该是准确的,那是不是说明FreeRTOS的时间不对了呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2018-4-28 11:08:03 | 显示全部楼层
fendoushuai 发表于 2018-4-28 11:01
根据打印信息来看,FreeRTOS确实延时了1000个周期,但是Timer0并不是20000,我想确认的是他们没有对应上 ...

如果不出意外的话,你的这个timer0的时间测试有问题。你想办验证下是不是有问题。
回复

使用道具 举报

0

主题

2

回帖

46

积分

新手上路

积分
46
发表于 2018-4-30 11:40:10 | 显示全部楼层
可以通过systick来计算,不要用这种延时累加的方式
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 17:58 , Processed in 0.168485 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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