【发布时间】:2015-01-22 08:05:48
【问题描述】:
我的项目中有以下两个结构
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] 的内容(执行下面代码部分中的两行之一时会发生错误)。 i 属于 uint8_t 类型并且在限制范围内。
gUART->rx_length = i; //set receive byte length
gUART->rx_flag = 1; //Indicate that data ready for use
我不知道这是怎么发生的,因为即使是溢出,这两个结构也至少在 bss 部分中被多个字节隔开。
如何找到错误的任何技巧/想法。
提前谢谢你
【问题讨论】:
-
你在某处初始化
gUART? -
您之前可能已经释放了该对象,并且该空间已重新分配给另一个对象。
-
这是静态变量,因此应该默认初始化为零,对吧?无论如何,我不阅读未初始化的变量,它不会解释行为
-
您是否为 *gUART 分配了内存?您不应该像这样直接将值写入指针:gUART->rx_length = i;
-
在结构中写入值的正确方法是什么?