UCOSIII系统只创建了一个任务void bd910_update(void *p_arg)和一个软件定时器void tmr1_callback(void *p_tmr, void *p_arg),软件定时器中只让LED灯的电平进行翻转。另外一个任务是处理数据,任务写的是定义一个数组,数组的内容的长度大概有500字节,然后再调用另一函数void Data_rewrite(char *buf,u16 len)来讲数组里面额数据的顺序进行改变。
//接收BD910定位数据任务
void bd910_update(void *p_arg)
{
char recv5[]="$GPGGA,025156.0,4546.53228,N,12640.91457,E,1,06,8.0,142.5,M,14.3,M,,*51\r\n$GNVTG,94.61,T,-545.30,M,1.06,N,1.97,K,A*25\r\n$GNRMC,025156.00,A,4546.53228,N,12640.91457,E,1,065,94.6,200717,999.9,E,A*16\r\n
$GPGSV,4,1,10,8,68,047,35,10,16,062,48,27,32,065,49,16,14,115,47*4E\r\n$GPGSV,4,2,10,41,-44,000,,53,-44,000,,50,34,155,34,42,34,155,32*78\r\n";//$BDGSV,4,4,10,104,29,137,38*69\r\n$GLGSV,4,3,10,81,17,044,*5C\r\n";
OS_ERR err;
p_arg = p_arg;
OSTmrStart(&tmr1,&err); //开启定时器1,关闭定时器1是OSTmrStop(&tmr1,OS_OPT_TMR_NONE,0,&err);
while(1)
{
Data_rewrite(recv5,500) ;
delay_us(100);
sendCom4(Recv5Send4,500);
delay_us(100);
UBX_i=0;
strFlag=0;
LED10=~LED10;
OSTimeDlyHMSM(0,0,0,50,OS_OPT_TIME_HMSM_STRICT,&err); //延时100ms
}
}
//定时器1的回调函数
void tmr1_callback(void *p_tmr, void *p_arg)
{
LED7=~LED7; //1秒闪烁一次,系统正常运行
}
会不会调用的函数Data_rewrite(recv5,500) 写的太复杂,里面定义的东西太多导致程序执行几次就完全死机了。
|