|
我在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多,为什么会有这样的结果呢?麻烦大神帮忙分析下,谢谢
|
|