嵌入式开发者社区
标题:
再次求教大神定时器不准确问题,付代码
[打印本页]
作者:
wsbuaa
时间:
2016-6-9 14:41
标题:
再次求教大神定时器不准确问题,付代码
程序基本思路是在for()里通过串口接到上位机赋初值后,启动定时器,然后1秒结算1次,用的定时器1,然后在定时器中断里点灯,设置标识,在for里再用一个函数做些解算和通过串口传给上位机的功能,问题是感觉点灯时间要比1秒多,感觉要有两秒了,要是在for里不执行解算等功能函数,感觉点灯就1秒正常了,这是为什么?代码如下:
void ISR_5ms()
{
TimerIntStatusClear(SOC_TMR_1_REGS, TMR_INT_TMR12_NON_CAPT_MODE);
g_uiCntClock++;
GPIOPinWrite(SOC_GPIO_0_REGS, 109, ucLED);
ucLED=!ucLED;
GPIOPinWrite(SOC_GPIO_0_REGS, 110, ucLED);
OUT_Flag=1;
}
for(;;)
{
InportProc();
//OutportProc();
}
如果不执行
OutportProc()感觉定时器点灯正常,计时准确,如果执行了就要比1秒时间长,根绝计时就不准确了
OutportProc();代码如下:
void OutportProc(void)
{
if(1==OUT_Flag)
{
for(i = 0; i < 20; i++) //初始化数据变量
{
b
= '\0';
}
i=0;
sins(qnb,vn,pos,wm,vm,Ts);
vn[2] = 0;
pos[2] = pos0[2]; //限定高度发散
nav_err(qnb,vn,pos,qnb0,vn0,pos0);
for( j=0; j<9 ; j++ )
{
sprintf(b,"%le",vari_nav_err[j]);
strcat(b,"\t");
printf("%s",b);
Send_Flag=1;
if(Send_Flag == 1)
{
// ScibRegs.SCITXBUF=b[0];
while( b
!= '\0')
{
UARTCharPut(SOC_UART_1_REGS, b
);
i++;
}
i=0;
}
Send_Flag=0;
}
printf("\n");
UARTCharPut(SOC_UART_1_REGS,receive);
//
// GPIOPinWrite(SOC_GPIO_0_REGS, 109, ucLED);
// ucLED=!ucLED;
// GPIOPinWrite(SOC_GPIO_0_REGS, 110, ucLED);
OUT_Flag=0;
}
作者:
希望缄默
时间:
2016-6-9 14:58
排队等着进广东省博物馆 反正无聊顺带回答下你的问题 TI C6000 DSP 不允许系统的时候不支持中断嵌套 所以在中断服务函数执行时其它中断都会被忽略 你的 ISR 函数时间太长估计是丢了中断了
作者:
wsbuaa
时间:
2016-6-9 15:51
没太懂,能说的详细点没,我的定时器中断里很简单呀,没几条语句呀
作者:
wsbuaa
时间:
2016-6-9 16:30
我想1秒解算1次,然后把结果过串口1输出到上位机保存,如果不允许中断嵌套,该如何实现。
作者:
希望缄默
时间:
2016-6-9 16:53
在主函数做处理
作者:
wsbuaa
时间:
2016-6-9 17:04
感谢你在假期给我的回答,我现在就是在主函数的for()里做的,我刚才又试了下,把OutportProc()里下面代码去掉
for( j=0; j<9 ; j++ )
{
sprintf(b,"%le",vari_nav_err[j]);
strcat(b,"\t");
printf("%s",b);
Send_Flag=1;
if(Send_Flag == 1)
{
// ScibRegs.SCITXBUF=b[0];
while( b!= '\0')
{
UARTCharPut(SOC_UART_1_REGS, b);
i++;
}
i=0;
}
Send_Flag=0;
}
printf("\n");
UARTCharPut(SOC_UART_1_REGS,receive);
就正常了,加上就慢了,可是我肯定需要这些代码要往上位机传数据呀
作者:
希望缄默
时间:
2016-6-9 18:58
printf 这些函数很耗时的
作者:
wsbuaa
时间:
2016-6-12 20:40
真是高手,就是printf的问题,谢谢
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4