美文网首页程序员我爱编程AVR单片机开...
智能复位——程序控制MCU复位

智能复位——程序控制MCU复位

作者: 禾灮 | 来源:发表于2018-08-07 01:11 被阅读0次

    微处理器复位方法:

    硬件引脚RESET复位;
    用看门狗复位;
    程序控制复位。
    

    软件复位实现方法

    首先声明一个函数指针,指向复位后要开始执行指令的位置:

      void (*app_start)(void) = 0x0000;
    

    之后,在自己的程序中想复位的地方调用app_start();也就是跳到0x0000位置执行指令。

    可以根据不同MCU复位的地址,修改上边的地址(0x0000)。

    实际上你可以跳到任何位置执行或调用相应指令或函数。
    

    实例测试

    老套路,发烟测试:以Arduino为开发环境来测试。

    注意:在AVR微处理器中,为了使Arduino复位时不再进入引导区,使AVR将BOOTRST设置为1。


    使用函数指针进行软件复位的代码如下,你能想象到下边的程序会使LED灯闪亮吗?

    // 0. 引脚定义
    const int LED_PIN   13    //  定义LED引脚为13号数据引脚(DIG13)
    static void (*reset_this_CPU)(void) = 0x0000;   //   复位本CPU函数指针
    // 1. 初始化
    void setup() {
          pinMode(LED_PIN, OUTPUT);   //  初始化D13为输出  
          digitalWrite(LED_PIN, HIGH);   //  D13输出高电平
          delay(1000);                 //  延时1秒
          digitalWrite(LED_PIN, LOW);    //  D13输出低电平
          delay(1000);                 //  延时1秒  
          reset_this_CPU();   //  跳到0x0000地址指针,也就是复位
    }
    // 2. 循环
    void loop() {
          //  此处什么也没有啊!
    }
    

    结论

    通过本方法,可以通过软件方式进行复位,也可以用这个函数指针的方法调用任何函数。(实在不理解,请翻一下《微机原理》,谢谢。。。)


        感谢一直关注着禾灮成长进步的朋友们。你们的信任、支持和鼓励,鞭策着我们一路走到了今天。
        
        感谢所有的合作伙伴,我们相互促进,共同见证了彼此的成长。
    
        感谢所有曾经在禾灮彼此倚靠、相互鼓励、携手同心、砥砺同行的兄弟姐妹。这里承载了我们的青春与热血。
    
                    禾灮,感谢有你。
    
        未来,我们将一如既往,砥砺前行。
    
                                            禾灮·小楊
                                           2018.08.06
    

    相关文章

      网友评论

        本文标题:智能复位——程序控制MCU复位

        本文链接:https://www.haomeiwen.com/subject/nzmnmftx.html