昨天偶然看到了一道c语言的面试题:如何跳转到绝对地址0x200000处执行代码。感觉很有意思。这和绝对地址内存进行操作有异曲同工之妙。在嵌入式中,如果有个寄存rTCON地址是0x4000000 ,为了方便对该寄存器进行读写操作,我们一般都是这样定义
#define rTCON *((volatile unsigned*)0x40000000)
这样当我们对rTCON进行读写操作数时,其实是对地址为0x40000000的内存进行操作。同样的如果要跳转到绝对地址执行代码我们可以这样做
*((void (*)())0x200000)()
把0x200000强制转换为函数指针void (*)()(函数地址)然后执行它。最外面的*加不加无影响。