经常见到嵌入式设计中,将某一程序段的入口地址转换为一个函数,我们来分析一下它的成分:
如在bootloader的0x00000020地址上的双字单元中有这样一条语句:
@Address is 0x00000020
b powerdown @Jump to the flag "powerdown"
...
...
powerdown:
...
...
然后在某一C头文件中可以见到这样的宏声明:
#define EnterPWDN(clkcon) ((void (*)(int))0x20)(clkcon)
初一看,乱七八糟的,现在,我们来整理一下。
不难看出,当我们编程调用EnterPWDN(clkcon)函数的时候,编译器在编译前首先把EnterPWDN(clkcon)转换为
((void (*)(int))0x20)(clkcon)语句。
对于这个语句,我们将之分解成3部分来看。
1:(void (*)(int)
2:0x20
3:(clkcon)
(clkcon)是函数的参数,就不用说了。0x20呢?当然就是要转换的函数的入口地址了。那对于(void (*)(int)呢??呵呵……,这一部分作为一个整体,描述了转换后的函数的类型
嵌入式中地址-函数之间的转换
最新推荐文章于 2025-02-14 14:00:57 发布