新闻中心

EEPW首页>嵌入式系统>设计应用> (*(void(*)())0) ()讲解-单片机另类的复位

(*(void(*)())0) ()讲解-单片机另类的复位

作者: 时间:2016-11-30 来源:网络 收藏
硬件地址跳到0处

(*(void(*)())0)();

本文引用地址://m.amcfsurvey.com/article/201611/323698.htm

预备知识

float (*h)();

表示h是一个指向返回值float类型的函数的指针

(float(*)())

表示一个"指向返回值float类型的函数的指针"的类型转换符

假设fp是一个函数指针,那么如何调用fp所指向的函数,调用方法如下:

(*fp)();

按照人们的惯性思维,那么我们可以这样写

(*0)();

上式不能生效,因为运算符*必须要一个指针来做操作数,而且这个指针还必须是个函数指针。所以我们必须要把0强制转换成一个函数指针(指向返回值为void类型的函数的指针)

假设fp是个float指针,声明如下

float * fp;

把0强制转换成一个float指针(把变量fp去掉就可以了)

(float *)0;

类似:

假设fp是函数指针为void类型的函数的指针),声明如下:

void (*fp)();

把0强制转换成该函数指针(变量fp去掉就可以了)

(void(*)())0

最后用(void(*)())0代替fp,从而得到调用的用法

(*(void(*)())0)();

可用typedef简化函数指针

例如:

typedef char * string;

string test="hello";

类似

typedef void(*func)(); //这样func就表示一个函数指针的类型

(*(func)0)();

例子

方法一:

typedef void (*pfunction)(void);

void FMI_Jump(void)
{
pfunction jump;
jump=(pfunction)(0x80000);
jump();

}

方法二:

((void(code *)(void))0xF400)();



关键词:void单片机的复

评论


技术专区

关闭