keil环境下定义数组到绝对地址怎么实现

[复制链接]
8304|2
 楼主| andiwxz 发表于 2013-1-11 10:02 | 显示全部楼层 |阅读模式
本帖最后由 andiwxz 于 2013-1-11 11:41 编辑

我使用的是st的芯片,用的是MDK4.3的编译环境。现在有两个byte类型的数组,想转成int类型的然后进行或运算。主要是想验证int进行运算快还是byte运算快。
byte                testa[512];
byte                testb[512];
u32          testc[128];
testc=(*(int *)(& testa)|(*(int *) (&testa));
得出的结果不是对齐的,不知道是我的运算有问题还是因为地址不是4字节的整数倍的关系,有一个数组地址的起始地址是0xe0035;
想请大家帮助,现在我已经不关心怎么运算快了,只关心以下两点。
1,我的转换对不对?不对应该怎么转换。
2,我想讲数组定义到指定的地址。例如0xe0030;请问怎么定义。


补充一下,刚刚做了测试,同样的数据量,int类型做运算比byte做运算快了将近4倍。因为我这个是现成的程序,定义什么的都不能改,现在只能想办法运算的时候强转数据类型。各位有什么好办法吗?强转后的数据是对齐正确的。
xinzha 发表于 2013-1-11 10:29 | 显示全部楼层
testa和testb定义成byte,其中的元素当然不会保证四字节对齐,楼主还是考虑修改实现机制吧。数组定义到绝对地址跟你出现的问题没有任何关系,你这么定义的数组,只要你的编译选项中没有定义packed选项,数组首地址一定是四字节对齐的。如果你想尝试怎么去做,可以去查阅arm的编译链接文档,可以通过scatter文件的配合来实现。
另外楼主需要搞明白对齐的含义。
huangxz 发表于 2013-1-11 12:11 | 显示全部楼层
2.

int variable1[100] __attribute__((at(0xe0030)));
就定义到绝对地址了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

166

主题

258

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部