單片機(jī)嵌入式系統(tǒng)軟件復(fù)位的幾種方式
出處:gxbgxb 發(fā)布于:2009-03-13 09:19:29
飛思系列的8位單片機(jī)沒(méi)有特定的控制寄存器可以實(shí)現(xiàn)軟件復(fù)位,當(dāng)程序運(yùn)行過(guò)程中代碼需要強(qiáng)行產(chǎn)生一個(gè)復(fù)位時(shí)必須通過(guò)一些軟件技巧實(shí)現(xiàn):
軟復(fù)位,程序從頭運(yùn)行,硬件不復(fù)位。復(fù)位腳無(wú)復(fù)位脈沖輸出
這可以通過(guò)直接獲取復(fù)位向量的方式來(lái)實(shí)現(xiàn):
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
}
硬復(fù)位,程序從頭運(yùn)行,內(nèi)部所有硬件模塊和寄存器同時(shí)復(fù)位,復(fù)位腳有復(fù)位脈沖輸出
這必須結(jié)合FSL 8位單片機(jī)內(nèi)部的架構(gòu)特點(diǎn)來(lái)實(shí)現(xiàn):
1)COP(看門(mén)狗)復(fù)位
這是簡(jiǎn)單的一種方式。程序死循環(huán)然后等看門(mén)狗作用產(chǎn)生復(fù)位。你必須事先啟動(dòng)看門(mén)狗功能,復(fù)位過(guò)程將有少許延時(shí)。
void ForceReset(void)
{
DisableInterrupts; //disable all interrupt
for(;;); //wait for watch-dog reset
}
2)非法尋址復(fù)位
當(dāng)指令對(duì)某一個(gè)不存在的內(nèi)存空間進(jìn)行尋址操作時(shí)單片機(jī)會(huì)產(chǎn)生硬件復(fù)位。
void ForceReset(void)
{
asm JMP 0xD000; //jump to illegal address will result a RESET
}
注意不同芯片其有效內(nèi)存空間配置不同,具體地址需參考芯片數(shù)據(jù)手冊(cè)做適當(dāng)調(diào)整。
3)非法指令復(fù)位
當(dāng)執(zhí)行一條不存在的指令編碼時(shí)單片機(jī)會(huì)產(chǎn)生硬件復(fù)位。這里又可以分兩種手段:
a) 利用“合法”指令在特定配置模式下的“非法性”,例如STOP指令。
如果在芯片的配置寄存器SOPT中設(shè)定STOPE位為0禁止STOP指令,你若再執(zhí)行STOP就會(huì)認(rèn)為是非法指令從而立即產(chǎn)生復(fù)位。
void ForceReset(void)
{
asm STOP; //illegal STOP will result a RESET, note SOPT_STOPE must be 0
}
如果你的應(yīng)用中正常情況下不會(huì)用到STOP,就可以用這種方式。如果你本來(lái)就要用STOP指令就不能用這種方式產(chǎn)生復(fù)位,因?yàn)镾OPT寄存器在復(fù)位后只能被寫(xiě)。
b) 人為制造非法指令然后強(qiáng)行運(yùn)行。
這是比較通用的一種方法,這個(gè)S08內(nèi)核系列均可適用。在單片機(jī)的指令表中確認(rèn)一條不可能出現(xiàn)的指令編碼,例如0x9E10,將其填入RAM中然后強(qiáng)制運(yùn)行,即可立即產(chǎn)生復(fù)位。
void ForceReset(void)
{
byte illegalCode[2];
illegalCode[0] = 0x9e;
illegalCode[1] = 0x10; //illegal instruction
((void (*)(void))illegalCode)(); //execute illegal instruction will result a RESET
}
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- ARM技術(shù)架構(gòu)與應(yīng)用開(kāi)發(fā)實(shí)踐指南2026/1/6 10:40:19
- 嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)選型與移植技術(shù)指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術(shù)選型與抗干擾設(shè)計(jì)實(shí)踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開(kāi)啟異核通信新時(shí)代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎(chǔ)知識(shí)2025/7/14 16:59:04
- 編碼器的工作原理及作用1
- 超強(qiáng)整理!PCB設(shè)計(jì)之電流與線寬的關(guān)系2
- 三星(SAMSUNG)貼片電容規(guī)格對(duì)照表3
- 電腦藍(lán)屏代碼大全4
- 國(guó)標(biāo)委發(fā)布《電動(dòng)汽車(chē)安全要求第3部分:人員觸電防護(hù)》第1號(hào)修改單5
- 通俗易懂談上拉電阻與下拉電阻6
- 繼電器的工作原理以及驅(qū)動(dòng)電路7
- 電容單位8
- 跟我學(xué)51單片機(jī)(三):?jiǎn)纹瑱C(jī)串口通信實(shí)例9
- 一種三極管開(kāi)關(guān)電路設(shè)計(jì)10
- PCB焊盤(pán)與過(guò)孔設(shè)計(jì)核心實(shí)操規(guī)范(含可焊性與可靠性保障)
- 汽車(chē)電子常用電子元器件選型指南
- MOSFET驅(qū)動(dòng)與隔離方案設(shè)計(jì)
- 高溫環(huán)境下電源IC選型建議
- 安防監(jiān)控設(shè)備連接器應(yīng)用分析
- 高速PCB信號(hào)完整性(SI)設(shè)計(jì)核心實(shí)操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計(jì)算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對(duì)系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護(hù)設(shè)計(jì)
- 連接器耐腐蝕性能測(cè)試方法









