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