b******a 发帖数: 215 | 1 嵌入式系统的CPU,对aligment要求很严。编译器是gcc。
函数要求传入一个(void *str)进去,然后函数里面会每2个byte读到一个local的变量
里面。
现在的问题是如果设一个变量如: char *mystr="this is my str"; 然后把mystr传入
函数,有时间mystr不是按照2或者4来对齐的,这样函数内部就会出错,导致系统崩溃。
因为一般情况下,char是没法对齐的。请问gcc下面有没有什么编译选项可以强制每个
变量都是按照 2或者4来对齐的?程序要求不能用pragma之类的语句来对齐。
谢谢了。 |
X****r 发帖数: 3557 | 2 Have you tried __attribute__ ((aligned (2))) ?
http://gcc.gnu.org/onlinedocs/gcc-3.1.1/gcc/Type-Attributes.html
BTW, it is 'alignment', not 'aligment'.
溃。
【在 b******a 的大作中提到】 : 嵌入式系统的CPU,对aligment要求很严。编译器是gcc。 : 函数要求传入一个(void *str)进去,然后函数里面会每2个byte读到一个local的变量 : 里面。 : 现在的问题是如果设一个变量如: char *mystr="this is my str"; 然后把mystr传入 : 函数,有时间mystr不是按照2或者4来对齐的,这样函数内部就会出错,导致系统崩溃。 : 因为一般情况下,char是没法对齐的。请问gcc下面有没有什么编译选项可以强制每个 : 变量都是按照 2或者4来对齐的?程序要求不能用pragma之类的语句来对齐。 : 谢谢了。
|
b******a 发帖数: 215 | 3 谢谢。 问题是我们是给用户提供API接口的。不可能要求用户在他们自己的代码里用
attribute或者pragma的。如果是单单的几个API还可以改API,现在可能有几千个API都
存在这样的问题,所以只能从编译器的角度来改了。
【在 X****r 的大作中提到】 : Have you tried __attribute__ ((aligned (2))) ? : http://gcc.gnu.org/onlinedocs/gcc-3.1.1/gcc/Type-Attributes.html : BTW, it is 'alignment', not 'aligment'. : : 溃。
|
X****r 发帖数: 3557 | 4 gcc 的这类编译开关多半是目标体系结构相关的,你得查gcc 手册里有关你这个体系结
构的部分了。
【在 b******a 的大作中提到】 : 谢谢。 问题是我们是给用户提供API接口的。不可能要求用户在他们自己的代码里用 : attribute或者pragma的。如果是单单的几个API还可以改API,现在可能有几千个API都 : 存在这样的问题,所以只能从编译器的角度来改了。
|
p****s 发帖数: 32405 | 5 稍微顶一下, 我想知道楼主有没有下文?
最后在compiler lvl怎么搞的?
【在 X****r 的大作中提到】 : gcc 的这类编译开关多半是目标体系结构相关的,你得查gcc 手册里有关你这个体系结 : 构的部分了。
|
b******a 发帖数: 215 | 6 没法弄。先修改用户手册,告诉用户自己要确保 data alignment,不然的话系统就罢工
,报出错信息了。
【在 p****s 的大作中提到】 : 稍微顶一下, 我想知道楼主有没有下文? : 最后在compiler lvl怎么搞的?
|