找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4665|回复: 6
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
ID:279847 发表于 2018-2-2 15:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
((void(code *)(void))0x0000)();这句是什么意思?怎么理解的?  
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
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强制类型转换成某个东西。
然后再去括 ...

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

使用道具 举报

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

评分

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

查看全部评分

回复

使用道具 举报

6#
ID:346748 发表于 2019-7-24 13:27 | 只看该作者
mcu重启的
回复

使用道具 举报

7#
ID:384252 发表于 2019-7-24 16:27 | 只看该作者
这个语句的出处应该是STC芯片里面参考代码,用于读取芯片ID号的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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