本發(fā)明涉及一種基于hcs12單片機(jī)的bootloader程序調(diào)試方法及系統(tǒng)。
背景技術(shù):
bootloader程序提供了一種不通過(guò)仿真器下載程序的方式。bootloader程序負(fù)責(zé)初始化硬件,在不拆開機(jī)殼的情況下實(shí)現(xiàn)應(yīng)用程序遠(yuǎn)程加載。
程序下載過(guò)程為:
1)bootloader程序通過(guò)仿真器下載到單片機(jī);
2)應(yīng)用程序根據(jù)特定的接口通過(guò)bootloader程序加載到單片機(jī);
bootloader程序與應(yīng)用程序共用一張中斷向量表,中斷服務(wù)程序在bootloader程序中偏移到應(yīng)用程序位置,造成應(yīng)用程序中斷向量不完整無(wú)法直接獨(dú)立仿真;同時(shí)添加中斷服務(wù)程序需要先在bootloader程序添加中斷偏移代碼,造成升級(jí)應(yīng)用程序時(shí)不斷修改bootloader程序,發(fā)揮不出bootloader程序的優(yōu)勢(shì)。
上述方案存在以下問(wèn)題:
方案中應(yīng)用程序不能直接調(diào)試,需要更改中斷服務(wù)程序地址才能仿真調(diào)試;當(dāng)需要升級(jí)應(yīng)用程序的中斷服務(wù)程序時(shí)需要同時(shí)更改bootloader程序。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的就是為了解決上述問(wèn)題,提供一種基于hcs12單片機(jī)的bootloader程序調(diào)試方法及系統(tǒng),它具有應(yīng)用程序與bootloader程序可以直接仿真調(diào)試,應(yīng)用程序調(diào)試完以后不需做任何修改直接通過(guò)bootloader方式下載的優(yōu)點(diǎn)。
為了實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
基于hcs12單片機(jī)的bootloader程序調(diào)試方法,包括:
步驟(1):bootloader程序的中斷向量表作為第一中斷向量表,應(yīng)用程序的中斷向量表作為第二中斷向量表;
步驟(2):通過(guò)bootloader程序?qū)?yīng)用程序加載到單片機(jī),將兩張中斷向量表根據(jù)地址整合形成新的中斷向量表,從而實(shí)現(xiàn)兩張中斷向量表的地址覆蓋;
步驟(3):hcs12單片機(jī)上電運(yùn)行,運(yùn)行bootloader程序的啟動(dòng)程序;
步驟(4):bootloader程序判斷自身是否需要加載新的應(yīng)用程序;然后,運(yùn)行新的應(yīng)用程序的主程序;
步驟(5):如果外部硬件中斷到來(lái),則直接運(yùn)行應(yīng)用程序的中斷服務(wù)程序。
進(jìn)一步的,所述步驟(2)的步驟為:
步驟(21):第二中斷向量表指向地址為第一偏移地址,第一偏移地址在hcs12單片機(jī)的的flash未分頁(yè)區(qū);
步驟(22):第一中斷向量表指向第一偏移地址加上n個(gè)字節(jié)的地址;從第一偏移地址加上n個(gè)字節(jié)的地址開始;其中,n≥4;
步驟(23):通過(guò)bootloader程序?qū)?yīng)用程序加載到單片機(jī)時(shí),實(shí)現(xiàn)兩張中斷向量表的地址覆蓋,新的中斷向量表指向應(yīng)用程序的中斷服務(wù)程序。
進(jìn)一步的,步驟(2)應(yīng)用程序可以獨(dú)立仿真調(diào)試,仿真調(diào)試成功后,不需更改,直接通過(guò)bootloader程序加載到單片機(jī)即可運(yùn)行。
進(jìn)一步的,所述步驟(4)的步驟為:bootloader程序的啟動(dòng)程序判斷自身是否需要加載新的應(yīng)用程序;若需要進(jìn)入步驟(41);若不需要進(jìn)入步驟(42);
步驟(41):?jiǎn)?dòng)程序自動(dòng)運(yùn)行,完成新的應(yīng)用程序的下載,然后,運(yùn)行新的應(yīng)用程序的主程序;
步驟(42):跳轉(zhuǎn)到應(yīng)用程序的啟動(dòng)程序,然后開始啟動(dòng)應(yīng)用程序的主程序。
進(jìn)一步的,所述步驟(41)的啟動(dòng)程序自動(dòng)運(yùn)行,完成新的應(yīng)用程序的下載之后,運(yùn)行新的應(yīng)用程序的主程序之前,需要執(zhí)行如下步驟:
應(yīng)用程序編譯后生成的s19文件在通過(guò)bootloader程序加載時(shí),將s19文件中的程序加載地址為ff80、ffa0、ffc0、ffe0的四行程序刪除。
基于hcs12單片機(jī)的bootloader程序調(diào)試系統(tǒng),包括:
初始化單元:bootloader程序的中斷向量表作為第一中斷向量表,應(yīng)用程序的中斷向量表作為第二中斷向量表;
整合單元:通過(guò)bootloader程序?qū)?yīng)用程序加載到單片機(jī),將兩張中斷向量表根據(jù)地址整合形成新的中斷向量表,從而實(shí)現(xiàn)兩張中斷向量表的地址覆蓋;
上電運(yùn)行單元:hcs12單片機(jī)上電運(yùn)行,運(yùn)行bootloader程序的啟動(dòng)程序;
判斷單元:bootloader程序判斷自身是否需要加載新的應(yīng)用程序;然后,運(yùn)行新的應(yīng)用程序的主程序
中斷執(zhí)行單元:如果外部硬件中斷到來(lái),則直接運(yùn)行應(yīng)用程序的中斷服務(wù)程序。
進(jìn)一步的,所述整合單元包括:
第一地址指向模塊:第二中斷向量表指向地址為第一偏移地址,第一偏移地址在hcs12單片機(jī)的的flash未分頁(yè)區(qū);
第二地址指向模塊:第一中斷向量表指向第一偏移地址加上n(n>=4)個(gè)字節(jié)的地址;從第一偏移地址加上n個(gè)字節(jié)的地址開始;
地址覆蓋模塊:通過(guò)bootloader程序?qū)?yīng)用程序加載到單片機(jī)時(shí),實(shí)現(xiàn)兩張中斷向量表的地址覆蓋,新的中斷向量表指向應(yīng)用程序的中斷服務(wù)程序。
進(jìn)一步的,所述整合單元應(yīng)用程序可以獨(dú)立仿真調(diào)試,仿真調(diào)試成功后,不需更改,直接通過(guò)bootloader程序加載到單片機(jī)即可運(yùn)行。
進(jìn)一步的,所述判斷單元:bootloader程序的啟動(dòng)程序判斷自身是否需要加載新的應(yīng)用程序;若需要,則啟動(dòng)程序自動(dòng)運(yùn)行,完成新的應(yīng)用程序的下載,然后,運(yùn)行新的應(yīng)用程序的主程序;若不需要,則跳轉(zhuǎn)到應(yīng)用程序的啟動(dòng)程序,然后開始啟動(dòng)應(yīng)用程序的主程序。
進(jìn)一步的,啟動(dòng)程序自動(dòng)運(yùn)行,完成新的應(yīng)用程序的下載之后,運(yùn)行新的應(yīng)用程序的主程序之前,需要執(zhí)行如下步驟:
應(yīng)用程序編譯后生成的s19文件在通過(guò)bootloader程序加載時(shí),將s19文件中的程序加載地址為ff80、ffa0、ffc0、ffe0的四行程序刪除。
本發(fā)明的有益效果:
1)應(yīng)用程序與bootloader程序可以直接仿真調(diào)試,應(yīng)用程序調(diào)試完以后不需做任何修改直接通過(guò)bootloader方式下載。
2)應(yīng)用程序可以直接添加中斷服務(wù)程序,不需要在bootloader程序中進(jìn)行地址偏移,以后程序升級(jí)只需修改應(yīng)用程序,bootloader程序不再修改。
hcs12單片機(jī)bootloader程序與應(yīng)用程序的中斷地址覆蓋到flash未分頁(yè)區(qū),實(shí)現(xiàn)應(yīng)用程序獨(dú)立仿真和隨意添加中斷服務(wù)程序。
附圖說(shuō)明
圖1為bootloader中斷向量表;
圖2為應(yīng)用程序中斷向量表;
圖3為加載應(yīng)用程序后的中斷;
圖4為復(fù)位后程序運(yùn)行流程圖。
具體實(shí)施方式
下面結(jié)合附圖與實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
本方法中,bootloader程序與應(yīng)用程序各用一張完整的中斷向量表,這樣兩個(gè)程序都能獨(dú)立仿真;同時(shí)通過(guò)bootloader程序?qū)?yīng)用程序加載到單片機(jī)中時(shí),兩張中斷向量表實(shí)現(xiàn)地址覆蓋,整合成一張完整的中斷向量表。
應(yīng)用程序中斷向量表指向地址從0x4000開始,為hcs12單片機(jī)flash未分頁(yè)區(qū),
bootloader中斷向量表指向地址0x4000處空出4個(gè)字節(jié),從0x4004開始;
通過(guò)bootloader加載應(yīng)用程序時(shí),實(shí)現(xiàn)地址覆蓋,中斷向量表直接指向應(yīng)用程序中斷服務(wù)程序。
應(yīng)用程序編譯后生成的s19文件在通過(guò)bootloader程序加載時(shí),將s19文件中的程序加載地址為ff80、ffa0、ffc0、ffe0的四行程序刪除。
兩張獨(dú)立的中斷向量表如圖1,圖2所示。加載應(yīng)用程序后的中斷向量表如圖3所示。
當(dāng)用bootloader方式下載程序時(shí),兩張獨(dú)立的中斷向量表通過(guò)地址覆蓋會(huì)合為一張,如圖3所示,整個(gè)程序運(yùn)行流程圖如圖4所示。
上述雖然結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式進(jìn)行了描述,但并非對(duì)本發(fā)明保護(hù)范圍的限制,所屬領(lǐng)域技術(shù)人員應(yīng)該明白,在本發(fā)明的技術(shù)方案的基礎(chǔ)上,本領(lǐng)域技術(shù)人員不需要付出創(chuàng)造性勞動(dòng)即可做出的各種修改或變形仍在本發(fā)明的保護(hù)范圍以內(nèi)。