找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4678|回复: 6
收起左侧

((void(code *)(void))0x0000)();这句是什么意思?怎么理解的?

[复制链接]
ID:279847 发表于 2018-2-2 15:58 | 显示全部楼层 |阅读模式
((void(code *)(void))0x0000)();这句是什么意思?怎么理解的?  
回复

使用道具 举报

ID:267377 发表于 2018-2-3 04:37 | 显示全部楼层
这是什么呀  看着像函数指针 又不像
回复

使用道具 举报

ID:232585 发表于 2018-2-3 09:24 | 显示全部楼层
首先去括号得到(void(code *)(void))0x0000,这句话很明显是把0x0000强制类型转换成某个东西。
然后再去括号得到void(code *)(void),这句话的意思是一个函数指针类型,无参数,无返回值。
整体的意思是把0x0000当做一个无参数无返回值的函数指针,再对这个函数进行调用。
其作用就是调用0x0000位置处存放的某个函数代码

评分

参与人数 1黑币 +90 收起 理由
admin + 90 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:279847 发表于 2018-2-5 08:41 | 显示全部楼层
无线电菜虫 发表于 2018-2-3 09:24
首先去括号得到(void(code *)(void))0x0000,这句话很明显是把0x0000强制类型转换成某个东西。
然后再去括 ...

嗯,执行这个可以回到程序一开始的位置,但是我看不明白这句话的意思
回复

使用道具 举报

ID:284230 发表于 2018-2-16 21:47 | 显示全部楼层
把0x0000地址强行转换成函数指针,并执行。
对于51,0x0000放的是复位中断向量。就是单片机上电后最开始执行的代码。
你的这个指令相当于MCU重新开始执行。

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:346748 发表于 2019-7-24 13:27 | 显示全部楼层
mcu重启的
回复

使用道具 举报

ID:384252 发表于 2019-7-24 16:27 | 显示全部楼层
这个语句的出处应该是STC芯片里面参考代码,用于读取芯片ID号的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表