stm32在UCOS下定义数组问题
我在ucos下,在gps.h下定义如下数组用来接收串口数据#ifdefGPS_GLOBALS
#define GPS_EXT
#else
#define GPS_EXT extern
#endif
GPS_EXTINT8UgpsRevData【90】;
然后我调试时发现即使我没发数据,也意味着没对gpsRevData进行操作,但是watch里面可以看到数组的第一个字节数据一直在变化,查看memmory框如下图。然后如果串口传入数据后就出现了段错误。求解啊!!!!!!万能的论坛!!!!
串口接收:
if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
{
gpsRevData = (INT8U)(USART_ReceiveData(USART1));
if((gpsRevData == 0x0d ) &&(gpsRevData == 0x0a));
{
//printf("%s",gpsRevData);
gpsRevDataSub = 0;
}
}
你的串口接收判断中断产生,如果有就进行接收数据,是不是别的地方产生了中断,导致你提前接收到了数据,等到真正接收数据时,中断标志复位了呢? wambob 发表于 2014-12-22 13:08
你的串口接收判断中断产生,如果有就进行接收数据,是不是别的地方产生了中断,导致你提前接收到了数据,等到真 ...
我使能的中断就两个,一个UART0口,一个外部中断用于按键触发的,按键中断处理函数并未对数组进行操作。然后我尝试着只定义这样一个数组,程序运行中不对其做任何操作,也就是没有任何函数调用这个数组,它的值还是会变,是不是操作系统中某些指针会指向那里然后又赋值之类的操作,裸机下是不会这样的 楼主可以把gpsRevData添加到watch窗口看看到底这个数组里面的数值是否发生变化! 晓枫VS枯叶 发表于 2014-12-22 16:40
楼主可以把gpsRevData添加到watch窗口看看到底这个数组里面的数值是否发生变化! ...
添加了,一直在变,即使没对它进行赋值 晓枫VS枯叶 发表于 2014-12-22 16:40
楼主可以把gpsRevData添加到watch窗口看看到底这个数组里面的数值是否发生变化! ...
而且是只有gpsRevData【0】在两个值(具体哪两个忘了)之间重复转变,然后gpsRevData【1】为2,gpsRevData【3】为8一直不变,除非进入中断进行赋值了 给数组赋值0试试 gpsRevData = (INT8U)(USART_ReceiveData(USART1));
你这个gpsRevDataSub++,岂不是每执行一次,gpsRevDataSub都要自加1?
还有 (INT8U)(USART_ReceiveData(USART1));没接收到数据,那么返回值是什么?是0吗? 奔跑小蜗牛 发表于 2014-12-23 08:42
gpsRevData = (INT8U)(USART_ReceiveData(USART1));
你这个gpsRevDataSub++,岂不是每 ...
当然要自加1啊,不然要数组干嘛,不加接收一个覆盖一个啊,接收的不是0,一串gps数据有近500个字节 晓枫VS枯叶 发表于 2014-12-22 16:40
楼主可以把gpsRevData添加到watch窗口看看到底这个数组里面的数值是否发生变化! ...
我昨天试了下用ucos内存管理的内存申请方式定义了一个二维数组,然后再去get一个内存块,发现跟之前一样会自己变化,然后接收到数据就段错误,但是我发现之前定义的一维数组正常了,地址跟之前的不一样,之前的那块地址会变,现在被二维数组占用了,所以它有新的地址,然后新的地址正常。那块地址到底是怎么回事?如果复位后,那个一维数组会不会可能申请到那块会变的地址?那这样的话程序不就有时好有时坏,难道要我指定地址才行?谁来解释一下为什么
页:
[1]
2