
1.Arduino板上重新编写代码时,Arduino将重新设置。
2.将Arduino板连接到计算机,打开串行终端时,Arduino会自动重置恢复出厂按下复位按钮。
3.按下复位按钮。
有两种方法:(1) 外接线 - 找任何一个IO口与复位脚连接,在程式内设定那IO为低电平,那便达到软件控制硬件复位。
(2) 纯软件 - 定义一个function
void(* resetFunc) (void) = 0 //declare reset function at address 0
任何时候想要复位就call function
resetFunc() // call reset
程序控制的软件复位方法微处理器复位方法:
用硬件引脚RESET的复位方法;
用看门狗的复位方法;
自己程序控制的复位方法(本文方法,叫软件复位)。
软件复位实现方法
首先声明一个函数指针,指向复位后要开始执行指令的位置:
void (*app_start)(void) = 0x0000
可以根据具体微处理器复位后的位置,修改后边的地址。
之后,在自己的程序中想复位的地方调用app_start()也就是跳到0x0000位置执行指令。
可以根据不同微处理器复位的地址,修改上边的地址(0x0000)。实现上你可以跳到任何位置执行,或调用函数执行。
实例测试
以下以Arduino为开发环境来测试。注意:在AVR微处理器中,为了使Arduino复位时不再进入引导区,使AVR设置BOOTRST设置为1。
使用函数指针复位方法如下,你能想象到下边的程序会使LED灯闪亮吗?
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
///0. 引脚定义
#define LED_PIN 13 //定义LED引脚为13号数据引脚(DIG13)
static void (*reset_this_CPU)(void) = 0x0000// ***复位本CPU函数指针
///1. 初始化
void setup() {
pinMode(LED_PIN, OUTPUT)// 初始化DIG13为输出
digitalWrite(LED_PIN, HIGH)//DIG13输出高电平
delay(1000)//延时1秒
digitalWrite(LED_PIN, LOW) //DIG13输出低电平
delay(1000)//延时1秒
reset_this_CPU()//***跳到0x0000地址指针,也就是复位
}
///2. 循环
void loop() {
//此处什么也没有啊!
}
结论
用本方法,可以用软件方式进行复位,也可以用这个函数指针的方法调用任何函数。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)