嵌入式中地址-函数之间的转换
来源:互联网 发布:sql替换某个字符 编辑:程序博客网 时间:2024/06/05 16:34
经常见到嵌入式设计中,将某一程序段的入口地址转换为一个函数,我们来分析一下它的成分:
如在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)呢??呵呵……,这一部分作为一个整体,描述了转换后的函数的类型,即无返回值,带一个整形参数。而中间那个”(*)“,就表示要转换成一个函数(或者说把0x20转换为一个地址,因为在ARM汇编中,就把C语言的函数名当作一个地址标号看待了)。就像我们平常用的强制类型转换一样,(int)temp,只不过这里是将一个数转换为另一类型,而那是将一个地址转换为一个函数罢了。
至于编译器内部是如何实现这个转换的,这就要看编译器对函数的实现机制了。我也不懂了。
纯属个人理解,如有错误,或者您对这个转换机制有更深的理解,请不吝赐教!
- 嵌入式中地址-函数之间的转换
- Xen空间中各种地址之间的转换关系
- Mac地址和字符串之间的转换
- IP地址与整数之间的转换
- IP地址与整数之间的转换
- IP地址与整数之间的转换
- IP地址与整数之间的转换
- ip地址与整数之间的转换
- ip地址与整数之间的转换
- Mac地址和字符串之间的转换
- 整数与ip地址之间的转换
- 套接字编程中常用的地址转换函数
- 嵌入式中 固化函数接口,并通过函数的入口地址来调用
- kernel地址转换的函数
- 【OS】逻辑地址、线性地址和物理地址之间的转换
- 【OS】逻辑地址、线性地址和物理地址之间的转换
- ASP.NET2.0中IP地址和域名之间的转换
- Javascript中IP地址和无符号整数之间的相互转换
- Mac OS X 下配置android环境变量
- 出现ASP_NET用户无法登陆的状况
- 使用事务时应该避免的陷井
- EJB3.0获取JNDI上下文的两种方法
- 用jQuery合并表格中相同文本的相邻单元格
- 嵌入式中地址-函数之间的转换
- Hibernate Open-Session-In-View Pattern
- CMM3和CMMI4的差别--过程域
- CMMI4过程域之“过程和产品质量保证”
- ASP.NET2.0文件上传以及图片处理总结篇 [转]
- CMMI4过程域之“配置管理”
- Citrix XVA文件格式
- CMMI4过程域之“组织培训”
- CMMI4过程域之“风险管理”