我的项目中有以下两个结构
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 [0]的内容(在执行下面代码部分中的两行之一时会发生错误)。我的类型为uint8_t且在限制范围内。
gUART->rx_length = i; //set receive byte length
gUART->rx_flag = 1; //Indicate that data ready for use
我不知道这是怎么发生的,因为即使它是溢出,两个结构也至少在bss部分中被多个字节隔开。
如何找到错误的任何技巧/想法。
提前谢谢
答案 0 :(得分:0)
由于您不会显示更多代码,因此我必须做出两个假设:前缀为g
的变量是全局的,并且您不会初始化这些指针(即让它们指向任何地方。)
未初始化的全局变量由编译器零初始化。对于指针,这意味着它们被初始化为NULL
,这意味着两个指针都指向NULL
。取消引用NULL
指针会导致undefined behavior。
在您的特定情况下,您非常幸运整个应用程序不会崩溃和刻录,更具体地说,因为两个指针都指向NULL
,它们都指向相同的内存,这意味着改变一个结构将改变两者。
要么你需要实际指向某个指针,要么根本不将它们声明为指针。