新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機嵌入式系統軟件復位的幾種方式

        單片機嵌入式系統軟件復位的幾種方式

        作者: 時間:2012-08-28 來源:網絡 收藏

        飛思系列的8位沒有特定的控制寄存器可以實現,當程序運行過程中代碼需要強行產生一個時必須通過一些技巧實現:

        本文引用地址:http://www.104case.com/article/148513.htm

        ,程序從頭運行,硬件不復位。復位腳無復位脈沖輸出

        這可以通過直接獲取復位向量的來實現:

        void ForceReset(void)

        {

        uniON {

        void (*vector)(void);

        byte c[2];

        } softReset;

        softReset.c[0] = *(byte*)0xFFFE; //get the reset vector

        softReset.c[1] = *(byte*)0xFFFF;

        softReset.vector(); //re-STart the code flow

        }

        硬復位,程序從頭運行,內部所有硬件模塊和寄存器同時復位,復位腳有復位脈沖輸出

        這必須結合FSL 8位內部的架構特點來實現:

        1)COP(看門狗)復位

        這是最簡單的一種。程序死循環然后等看門狗作用產生復位。你必須事先啟動看門狗功能,復位過程將有少許延時。

        void ForceReset(void)

        {

        DisableInterrupts; //disable all interrupt

        for(;;); //wait for watch-dog reset

        }

        2)非法尋址復位

        當指令對某一個不存在的內存空間進行尋址操作時會產生硬件復位。

        void ForceReset(void)

        {

        asm JMP 0xD000; //jump to illegal address will result a RESET

        }

        注意不同芯片其有效內存空間配置不同,具體地址需參考芯片數據手冊做適當調整。

        3)非法指令復位

        當執行一條不存在的指令編碼時單片機會產生硬件復位。這里又可以分兩種手段:

        a) 利用“合法”指令在特定配置模式下的“非法性”,例如STOP指令。

        如果在芯片的配置寄存器SOPT中設定STOPE位為0禁止STOP指令,你若再執行STOP就會認為是非法指令從而立即產生復位。

        void ForceReset(void)

        {

        asm STOP; //illegal STOP will result a RESET, note SOPT_STOPE must be 0

        }

        如果你的應用中正常情況下不會用到STOP,就可以用這種。如果你本來就要用STOP指令就不能用這種方式產生復位,因為SOPT寄存器在復位后只能被寫一次。

        b) 人為制造非法指令然后強行運行。

        這是比較通用的一種方法,這個S08內核系列均可適用。在單片機的指令表中確認一條不可能出現的指令編碼,例如0x9E10,將其填入RAM中然后強制運行,即可立即產生復位。

        void ForceReset(void)

        {

        byte illegalCode[2];

        illegalCode[0] = 0x9e;

        illegalCode[1] = 0x10; //illegal instruction

        ((void (*)(void))illegalCode)(); //execute illegal instruction will result a RESET

        }

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 渭源县| 于田县| 礼泉县| 保德县| 鄂伦春自治旗| 南充市| 阜新市| 剑河县| 巴马| 牙克石市| 天长市| 华宁县| 禄丰县| 临城县| 卓尼县| 同德县| 衡水市| 永靖县| 五台县| 双柏县| 汶上县| 怀柔区| 遵义县| 光山县| 台中县| 轮台县| 凤阳县| 左贡县| 南皮县| 通城县| 玉溪市| 杭锦旗| 汝阳县| 甘谷县| 富裕县| 胶州市| 郁南县| 丽江市| 壶关县| 女性| 富裕县|