我的项目中有以下两个结构
typedef volatile struct {
unsigned char rx_buf[MAX_UART_BUF]; //Input buffer over UART
uint8_t rx_flag; //Indicates received data over UART
uint8_t rx_length; //length of the input buffer
} UART;
UART *gUART;
typedef volatile struct {
unsigned int target_s[NR_BLDC]; //Target Position in Signals
int distance_s[NR_BLDC]; //Distance between gActual_s[NR_BLDC] and gTarget_s
unsigned int old_s[NR_BLDC]; //Position before starting to new destination
unsigned int ramp_s[NR_BLDC]; //Duration of ramp(accelerate/decelerate) in Signals
unsigned int count_dt[NR_BLDC]; //Actual nr of PWM ISR timer calls
uint8_t dc_max[NR_BLDC]; //Maximal Duty Cycle set to reach the destination
} POSITIONING;
POSITIONING *gPOS;当我在*gUART中写入rx_flag或rx_length时,它会在*gPOS结构中以某种方式更改distance_s的内容(在执行下面代码部分中的两行之一时发生错误)。我是uint8_t类型的,在限制范围内。
gUART->rx_length = i; //set receive byte length
gUART->rx_flag = 1; //Indicate that data ready for use我不知道这是如何发生的,因为即使它是溢出,这两个结构至少被bss部分中的多个字节分隔。
任何如何发现错误的技巧/想法。
提前谢谢你
发布于 2015-01-22 08:14:32
由于您没有显示更多的代码,我必须做两个假设:前缀为g的变量是全局的,并且不初始化这些指针(即使它们指向任何地方)。
未初始化的全局变量由编译器初始化为零。对于指针,这意味着它们被初始化为NULL,这意味着两个指针都指向NULL。删除NULL指针将导致http://en.wikipedia.org/wiki/Undefined_behavior。
在您的具体情况下,非常幸运的是,整个应用程序没有崩溃和烧毁,更具体地说,因为两个指针都指向NULL,因此它们都指向相同的内存,这意味着更改一种结构将同时改变两者。
要么您需要实际地使指针指向某个位置,要么根本不将它们声明为指针。
https://stackoverflow.com/questions/28083848
复制相似问题