打印

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

[复制链接]
7856|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

粉丝