亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種快速響應(yīng)9s12x系列單片機(jī)程序跑飛的方法

文檔序號(hào):10612191閱讀:380來源:國知局
一種快速響應(yīng)9s12x系列單片機(jī)程序跑飛的方法
【專利摘要】本發(fā)明提供一種快速響應(yīng)9S12X系列單片機(jī)程序跑飛的處理方法,用于程序到錯(cuò)誤內(nèi)存地址中取指令的跑飛處理。針對(duì)單片機(jī)程序運(yùn)行的機(jī)制,通過在單片機(jī)未使用的內(nèi)存中填充TRAP指令,使單片機(jī)在陷阱區(qū)域取指令后,能夠落入到陷阱中從而使程序回到陷阱處理程序的入口地址處執(zhí)行預(yù)先設(shè)定的代碼。本發(fā)明采用在Flash內(nèi)填充TRAP指令,通過對(duì)每個(gè)運(yùn)行函數(shù)地址的主動(dòng)校驗(yàn),在程序跑飛后,通過中轉(zhuǎn)跳轉(zhuǎn)至程序的某一確定位置,使得微控制器在受到外界干擾導(dǎo)致程序出錯(cuò)或跑飛后的恢復(fù)時(shí)間優(yōu)于1ms,提升了系統(tǒng)的安全性和可靠性。普適于9S12X系列單片機(jī)程序跑飛處理。
【專利說明】
一種快速響應(yīng)9S12X系列單片機(jī)程序跑飛的方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及單片機(jī)軟件編程領(lǐng)域,提供一種快速響應(yīng)9S12X系列單片機(jī)程序跑飛的處理方法。
[0002]
【背景技術(shù)】
[0003]單片機(jī)程序“跑飛”分為兩種情況,一種是程序代碼中存在while、f0r構(gòu)成的死循環(huán)語句塊或由于干擾等原因而進(jìn)入死循環(huán),導(dǎo)致單片機(jī)無法響應(yīng)除中斷之外的任務(wù);第二種是單片機(jī)運(yùn)行到錯(cuò)誤的內(nèi)存地址,導(dǎo)致單片機(jī)取指令錯(cuò)誤。
[0004]第一種情況,嚴(yán)格意義講這不是跑飛,只是循環(huán)塊的程序占用CPU,這種情況下可以采用“看門狗”監(jiān)視技術(shù)。看門狗的原理是不斷監(jiān)測程序循環(huán)運(yùn)行的時(shí)間,一旦發(fā)現(xiàn)程序運(yùn)行時(shí)間超過循環(huán)設(shè)定的時(shí)間,就認(rèn)為系統(tǒng)已陷入死循環(huán),然后強(qiáng)迫程序返回到已安排了出錯(cuò)處理程序的入口地址處,使系統(tǒng)回到正常運(yùn)行。這種技術(shù)存在的不足之處是程序異常后,需要等待設(shè)定的時(shí)間才能得到響應(yīng)。針對(duì)第二種情況,除了可以采用“看門狗”技術(shù)進(jìn)行監(jiān)測外,還可以采用TRAP(陷阱)指令實(shí)現(xiàn)錯(cuò)誤指令的糾錯(cuò)。目前,TRAP指令通常運(yùn)用到操作系統(tǒng)中實(shí)現(xiàn)用戶模式轉(zhuǎn)換為內(nèi)核模式的系統(tǒng)調(diào)用中,在單片機(jī)編程中鮮有TRAP指令的運(yùn)用。

【發(fā)明內(nèi)容】

[0005]本發(fā)明提供一種快速響應(yīng)9S12X系列單片機(jī)程序跑飛的處理方法,用于程序到錯(cuò)誤內(nèi)存地址中取指令的跑飛處理。單片機(jī)程序運(yùn)行的機(jī)制是:程序執(zhí)行到某一內(nèi)存地址后,需要到該內(nèi)存地址中進(jìn)行取指令的操作,然后根據(jù)指令執(zhí)行相應(yīng)的動(dòng)作。針對(duì)單片機(jī)的這種特點(diǎn),通過在單片機(jī)未使用的內(nèi)存中填充TRAP指令,使單片機(jī)在陷阱區(qū)域取指令后,能夠落入到陷阱中從而使程序回到陷阱處理程序的入口地址處執(zhí)行預(yù)先設(shè)定的代碼。
[0006]912X系列單片機(jī)有兩頁指令對(duì)比表,每一頁有256個(gè)指令。第一頁中指令0x18表示單片機(jī)需要到內(nèi)存中取出下一個(gè)指令,并與第二頁進(jìn)行指令對(duì)照從而確定指令類型;第二頁中定義了227個(gè)指令,29個(gè)未定義的指令。這29個(gè)未定義的指令擁有同一個(gè)中斷向量即未定義指令陷阱。如果9S12X單片機(jī)試圖執(zhí)行第二頁中剩余的未使用指令,將發(fā)生非法指令陷阱。程序正常進(jìn)入未定義指令陷阱的順序是:取出第一頁中的0x18后,獲取下一個(gè)內(nèi)存地址的指令,并對(duì)照第二頁中的指令進(jìn)行對(duì)照。如果下一個(gè)指令是27個(gè)未定義的陷阱指令,那么發(fā)生TRAP指令異常,跳轉(zhuǎn)到異常向量的處理入口。
[0007]因此,陷阱區(qū)域由“0x18與第二頁中的某個(gè)指令”兩個(gè)字節(jié)填充形成。為了選取合適的第二頁指令,需要考慮進(jìn)入陷阱時(shí)取第一指令的值。假設(shè)第一指令是0x18,則按照正常陷阱程序,在下一個(gè)地址中取出未定義的指令,從而落入陷阱;假設(shè)第一指令不是0xl8,SP當(dāng)前Flash地址填充的值不是0x18,說明下一個(gè)地址存放的是0x18,那么為保證程序忽略當(dāng)前指令,采用NOP指令,實(shí)現(xiàn)當(dāng)前指令的跳過,從而保證執(zhí)行下一條指令時(shí),進(jìn)入到TRAP陷阱中。因此,在選用第二頁的操作碼時(shí),采用與NOP指令相應(yīng)位置的指令即0xA7。最終確定在未使用的內(nèi)存區(qū)域填充的TRAP指令為0xl8A7或0xA718,確保異常程序在3個(gè)指令周期內(nèi)被中斷系統(tǒng)捕捉。
[0008]本發(fā)明具體步驟如下:
I)選取TRAP指令:將0xA718選定為填充的TRAP指令。
[0009]2)填充TRAP指令:在所有的Flash區(qū)域用FILL命令進(jìn)行TRAP指令的填充,實(shí)現(xiàn)Flash存儲(chǔ)空間的初始化。應(yīng)用程序經(jīng)過編譯后,程序使用的Flash區(qū)域,其相鄰兩個(gè)字節(jié)分別填充數(shù)值0xA7和0x18。
[0010]3)程序跑飛處理:程序落入TRAP陷阱后,將被強(qiáng)制返回到陷阱處理的入口函數(shù)中。在該入口函數(shù)中進(jìn)行系統(tǒng)的復(fù)位或啟動(dòng)系統(tǒng)異常保護(hù)程序。
[0011]本發(fā)明的有益效果是采用在Flash內(nèi)填充TRAP指令,通過對(duì)每個(gè)運(yùn)行函數(shù)地址的主動(dòng)校驗(yàn),在程序跑飛后,通過中轉(zhuǎn)跳轉(zhuǎn)至程序的某一確定位置,使得微控制器在受到外界干擾導(dǎo)致程序出錯(cuò)或跑飛后的恢復(fù)時(shí)間優(yōu)于lms,提升了系統(tǒng)的安全性和可靠性。
[0012]
【附圖說明】
[0013]圖1是程序落入陷阱區(qū)域后執(zhí)行過程的流程圖。
[0014]
【具體實(shí)施方式】
[0015]為了使本發(fā)明目的、技術(shù)方案更加清晰,以下結(jié)合附圖對(duì)本發(fā)明進(jìn)行詳細(xì)說明。應(yīng)當(dāng)理解,此處描述的【具體實(shí)施方式】僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0016]以Freescale的MC9S12XET256為例,該單片機(jī)具有兩頁指令碼,分別為pagel和page2,每個(gè)page具有256個(gè)指令碼。其中,page I中的指令0xA7表示匯編指令NOP,指令Ox 18表示取出單片機(jī)Flash區(qū)域的下一條指令并與page2進(jìn)行對(duì)照。在page2中的指令0xA7表示系統(tǒng)陷阱指令。因此采用陷阱指令0xA718,并用FILL命令填充到Flash區(qū)。
[0017]當(dāng)程序落入陷阱后,按照?qǐng)D1所示的方法實(shí)現(xiàn)異常捕捉和處理,捕捉的方法由單片機(jī)的中斷系統(tǒng)完成。在中斷處理函數(shù)中,可以采用復(fù)位的方法實(shí)現(xiàn)單片機(jī)重啟,實(shí)現(xiàn)系統(tǒng)的快速恢復(fù);也可以將異常情況通過通信總線通知系統(tǒng)中的其它單片機(jī)或控制器,從而確保程序異常后系統(tǒng)能夠緊急處理,提升系統(tǒng)的安全性和可靠性。
【主權(quán)項(xiàng)】
1.一種快速響應(yīng)9S12X系列單片機(jī)程序跑飛的方法,其特征在于:通過在未使用的單片機(jī)內(nèi)存中填充TRAP陷阱指令0xl8A7或0xA718,使落入到陷阱區(qū)域的異常程序在3個(gè)指令周期內(nèi)被單片機(jī)中斷系統(tǒng)捕捉,具體步驟如下: (1)選取TRAP指令:將0xA718選定為填充的TRAP指令; (2)填充TRAP指令:在所有的Flash區(qū)域用FILL命令進(jìn)行TRAP指令的填充,實(shí)現(xiàn)Flash存儲(chǔ)空間的初始化,應(yīng)用程序經(jīng)過編譯后,程序使用的Flash區(qū)域,其相鄰兩個(gè)字節(jié)分別填充數(shù)值0xA7和0x18; (3)程序跑飛處理:程序落入TRAP陷阱后,將被強(qiáng)制返回到陷阱處理的入口函數(shù)中,在該入口函數(shù)中進(jìn)行系統(tǒng)的復(fù)位或啟動(dòng)系統(tǒng)異常保護(hù)程序。
【文檔編號(hào)】G05B19/042GK105974838SQ201610302992
【公開日】2016年9月28日
【申請(qǐng)日】2016年5月10日
【發(fā)明人】張悅誠, 史昇, 朱國雷
【申請(qǐng)人】鎮(zhèn)江恒馳科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1