各位大侠,小弟现在搞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函数,问题是,这样行吗?地址怎么都是奇数呢? |