新手入门
- 积分
- 14
- 金钱
- 14
- 注册时间
- 2017-7-28
- 在线时间
- 2 小时
|
3金钱
大侠好:
我遇到一个问题,有如下结构体定义
typedef struct _A
{
char first[150];
char second[150];
char third;
}A;
由于结构体中的元素 second未4字节对齐,(因为和first相差150个字节)所以用标准库的时候(比如strcmp会出现hard fault 错误,因为strcmp里面可能是转换成int判断了)会出现错误。
我的问题是如何让结构体内部的元素也能4字节对齐,因为代码量很大,无法对代码中的所有结构体的元素类型及数组大小都一一调整。
我用了 #pragma pack 及 __align 和 --no_unaligned_access(编译器选项)都无法解决这个问题。
我查了一些资料,因为我用的是SDRAM(地址空间是从0XD0000000开始的,说的是有可能这个空间是 device memory type,必须4字节对齐,因为cpu对这样的地址空间访问不会进行转换,必然出现错误。
那我如何能简单的进行全局的配置成所有代码都4字节对齐呢?
感谢各位!!!
|
最佳答案
查看完整内容[请看2#楼]
声明结构体变量的时候最好就是2的多少次方数,如果确实不方便,结构体成员可以搞成指针,然后在使用前malloc,使用后free
|