Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14512
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 32
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-07 15:38
文章分类
文章存档

2016年(7)

我的朋友
最近访客

分类: 嵌入式

2016-05-21 22:14:57

(*((void (*)(void))(*(unsigned long *)0x2c)))(); 是什么意思?
在8962的boot_demo1中 (*((void (*)(void))(*(unsigned long *)0x2c)))(); 是什么意思?是把程序引导到地址为0X2C的位置?

这个语句会执行位于bootloader的SVC(软中断)异常服务例程,还是分解一下吧:

                      (*(unsigned long *)0x2c):将0x2C强制转化为unsigned long类型指针,并指向该地址所在的数据;

                      void (*)(void)                      :函数指针,指针名为空,该函数参数为空,返回值为空

                     (void (*)(void))(*(unsigned long *)0x2c):将Flash地址0x2C中的内容强制转化为函数指针,该函数参数为空,返回值为空

                     (*((void (*)(void))(*(unsigned long *)0x2c)))();:调用函数,即开始从启动代码中的UpdateHandler标号处开始执行

 

 

阅读(1194) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~