|
程序基本思路是在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;
}
|
|