第一种出现错误的现象:访问某一个结构体变量时出现LoadStoreAlignment错误。
原因:如果其他头文件设置的字节对齐方式是1字节对齐,然后本结构对应的头文件没有设置或者设置了别的对齐方式,则会出现该错误。
解决方式:整个工程设置统一的字节对齐方式,红色代码表示设置该范围内的结构体1字节对齐。
#pragma pack(push,1)
typedef struct tag_ARRAY{
uint8_t size; //当前数据个数
uint8_t max_limit; //最大个数限制
}GEN_ARRAY, *P_GEN_ARRAY;
#pragma pack(pop)
第二种出现错误的现象:强制转换时
int gen_array_get_average(P_GEN_ARRAY p_array, int16_t *data, int number){
float data_temp = 2.0;
*data = (int16_t)(data_temp + 0.5); //当data的地址不是4字节整数时,这里会出问题
return 0;
}
修改如下:
float data_temp = ((float)sum)/max;
int16_t tmp1 = (int16_t)(data_temp + 0.5);
memcpy(data, &tmp1, 2); //使用地址拷贝