打印
[STM32F1]

关于keil mdk编译STM32,函数地址是奇数,不是字对齐或半字对齐问题

[复制链接]
3785|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hailee1985|  楼主 | 2015-4-10 14:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

各位大侠,小弟现在搞STM32,之前看过一下ARM的书,经常看到说地址需要字对齐或者半字对齐。现在小弟在用keil mdk编译一个STM32的工程,查看MAP文件后发现所有函数的地址都是奇数。

比如:
    UartTxData  0x20002c17   Thumb Code   172  main.o(.text)
    CopyData    0x20002d2d   Thumb Code    24  main.o(.text)
    RadioMain   0x20002ed9   Thumb Code   640  main.o(.text)
    main        0x20003159   Thumb Code     4  main.o(.text)

因为小弟把代码的ROM地址空间定位在RAM中,所以上面的地址都在0x20000000附近。

上面的函数地址,都是奇数,比如main函数,地址是0x20003159,是个奇数,也就是地址的最低位为1。

小弟现在要做一个这样的工作,就是在另一个函数中,通过强制给PC指针赋值的方式跳转到指定的函数,比如上面的main函数,我使用类似:
    ldr pc, 0x20003159
指令强制跳转到main函数,问题是,这样行吗?地址怎么都是奇数呢?
沙发
hailee1985|  楼主 | 2015-4-13 16:56 | 只看该作者
怎么没人回复啊,高人们出来啊,小弟急啊,帮帮忙啊!!!

使用特权

评论回复
板凳
tj1986513| | 2016-4-15 19:00 | 只看该作者
大概是这个原因:cortex-m3内核要求所有指令的地址lsb均为1用以表明指令集,比如0x10000001地址指的其实是0x10000000

使用特权

评论回复
地板
苏山人家| | 2016-4-16 10:20 | 只看该作者
如果强制跳转需要自己考虑进出栈,干嘛不做一个函数指针呢。直接调用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

1

粉丝