flash复位语句
来源:互联网 发布:阿里云拍照专用幕布 编辑:程序博客网 时间:2024/05/19 22:07
((void(code *)(void))0x0000)();
例如:
int(*p)();
定义了一个指向函数的指针变量p,它可以存放一类整型函数的入口地址,程序中把哪一个函数的入口地址赋给它,它就指向哪一个函数。
在这里定义的时候直接就把地址0x0000赋值给了p,所以执行这条语句的时候就直接指向了初始化入口(自己的理解)
void(*)() 这是一个函数指针
那么(*(void(*)())就是调用它,
后面跟的地址为指向函数指针的指针地址。
这样的话执行上面程序就会自动跑到PC(0x0000)的地址开始执行程序,也就实现了软件复位功能与看门狗复位差不多。
也能实现任意地址跳转功能。(注意复位地址自己查看各单片机的main函数入口地址或复位的起始地址)
概念补充:
定义一个返回值是空函数指针的定义形式如下:
void (*p) ( )
当把函数指针赋值后,就能通过函数指针调用函数,调用形式如下,
(*p) ( );
或等价的简化形式:
p ( );
假设rst就是函数指针(),则如下调用形式就可以令单片机复位再起。
(*rst ) ( );
如同把char型变量a赋值给int型变量b,(int) 表示强制类型转换:
b = (int) a
(C语言的哲学是定义形式和使用一致):
( (void (*)() ) rst
,简单的调用形式如下:
#define K ( (void (*)( ) ) rst
(*K) ( )
或:
( * ( void (*)( ) )rst ) ( );
这样的语句就完成复位再启功能了。,所以上述语句就能完成复位功能了。保险起见有些程序员常
常喜欢再加个括号:
#define K ( ( (void (*)( ) ) rst )
(*K) ( )
或
( *( ( void (*)( ) )rst ) ) ( );
由于没有输入参数,上述复位代码更严谨的写法是:
#define K ( ( (void (*)(void ) ) rst )
(*K) ( )
或
( *( ( void (*)(void ) )rst ) ) ( );
- flash复位语句
- nand flash 的初始化和复位操作
- flash 条件语句
- 复位与复位电路
- 复位和复位流程
- 软件复位
- 复位电路图
- 复位路由器
- 复位模块
- 芯片复位
- 复位电路
- 复位电路
- 同步复位和异步复位
- Verilog同步复位,异步复位
- 同步复位与异步复位
- 异步复位和同步复位
- 系统复位和内核复位
- Flash之Action语句中文全解
- 123
- [译文]如何用Axure RP7创建响应式原型
- Libevent:0异步IO简介
- 每个 C 程序员都应知道的关于未定义行为的那点事(中篇)
- php get_magic_quotes_gpc()
- flash复位语句
- Could not validate ASMSNMP password due to following error- "ORA-01031: insufficient privileges"
- 杭电1001 - Sum Problem
- ceph osd full 解决方法
- 职责链模式
- Respond.js
- 文本溢出用css定义省略号显示的方法
- 一个程序员的创业历程
- 每个 C 程序员都应知道的关于未定义行为的那点事(下篇)