機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
在PIC18單片機(jī)中使用BootLoader
在PIC18單片機(jī)中使用BootLoader
 更新時(shí)間:2008-8-19 13:25:04  點(diǎn)擊數(shù):96
【字體: 字體顏色
 。6) 程序配置字

  對(duì)于每個(gè)PIC單片機(jī)的芯片,都需要設(shè)置正確的程序配置字后才能正常運(yùn)行。雖然在BootLoader中是可以修改配置字的,但是這樣并不安全,也不方便。一般情況下,程序配置字設(shè)定后是不需要修改的,所以配置字在燒寫(xiě)B(tài)ootLoader程序時(shí)就一起寫(xiě)入單片機(jī)芯片,以后就只使用BootLoader來(lái)升級(jí)(燒寫(xiě))程序,這樣不會(huì)破壞芯片的配置字。

 。7) 調(diào)試用戶(hù)程序

  平時(shí),在編寫(xiě)和調(diào)試用戶(hù)程序時(shí),還是和正常方式一樣,單片機(jī)中不包含BootLoader程序,也不設(shè)置偏移量(或者設(shè)置為0),以方便使用ICD2等仿真器進(jìn)行程序仿真。等程序調(diào)試好后,再修改程序的偏移量為200H,并重新編譯程序,產(chǎn)生最終的用戶(hù)HEX代碼。這樣編譯好的程序才可以使用BootLoader進(jìn)行下載。

  (8) 下載用戶(hù)程序
    
  使用HI-TECH的BootLoader程序,在下載用戶(hù)程序到單片機(jī)中時(shí),可以不需要特殊的下載程序,只需要使用Windows自帶的超級(jí)終端程序就可以了。超級(jí)終端的通信參數(shù)需要設(shè)置成和BootLoader程序的一樣,包括波特率、校驗(yàn)、數(shù)據(jù)位、停止位等。

  首先連接好串口線(xiàn),再啟動(dòng)超級(jí)終端程序,然后復(fù)位單片機(jī)(單片機(jī)中應(yīng)當(dāng)已經(jīng)寫(xiě)入了BootLoader程序)。這時(shí),在超級(jí)終端的窗口中會(huì)顯示出一個(gè)倒計(jì)時(shí)的計(jì)數(shù)器,計(jì)數(shù)器的初始值就是上面的BOOT_TIMEOUT參數(shù)。計(jì)數(shù)器每秒鐘刷新一次。當(dāng)計(jì)數(shù)器為0時(shí),就會(huì)運(yùn)行以前的程序。如果這期間從超級(jí)終端輸入任意數(shù)據(jù)(就是隨便按一個(gè)鍵,或者說(shuō)單片機(jī)從串口上接收任意數(shù)據(jù)),計(jì)數(shù)器就會(huì)停止計(jì)數(shù),進(jìn)入升級(jí)狀態(tài)。這時(shí)BootLoader程序會(huì)首先擦除舊的程序空間,然后屏幕上會(huì)顯示出一個(gè)冒號(hào)“:”,提示等待下載用戶(hù)程序。這時(shí)就可以從超級(jí)終端的菜單中選取傳送→發(fā)送文本文件,選擇編譯好的HEX文件即可。如果下載成功,超級(jí)終端的窗口中會(huì)顯示出一個(gè)小括號(hào)“)”,提示下載已經(jīng)完成,同時(shí)用戶(hù)程序會(huì)自動(dòng)開(kāi)始運(yùn)行。使用BootLoader下載時(shí),因?yàn)榇诘乃俣认鄬?duì)比較慢(與編程器相比),所以需要等待一會(huì)兒。具體時(shí)間與用戶(hù)程序的大小有關(guān)。如果下載中出現(xiàn)錯(cuò)誤,單片機(jī)會(huì)自動(dòng)復(fù)位,進(jìn)入倒計(jì)數(shù)狀態(tài),重復(fù)上面的過(guò)程。使用超級(jí)終端比較簡(jiǎn)單,不需要特殊的下載軟件;但是缺乏交互性,沒(méi)有進(jìn)程指示,如果下載過(guò)程中出現(xiàn)錯(cuò)誤也不能停止下來(lái)。

3 BootLoader程序的改進(jìn)

 。1) HI-TECH的BootLoader程序中存在的缺陷

  雖然HI-TECH版本的BootLoader程序已經(jīng)很方便了,具備了所有必需的基本要素;但是程序中存在著一些缺陷,甚至是很重大的隱患,不太適合于直接使用在實(shí)際工程中。下面是主要存在的幾個(gè)問(wèn)題

  ①BootLoader是以從串口上接收任何數(shù)據(jù)為標(biāo)志進(jìn)入BootLoader狀態(tài)的。進(jìn)入BootLoader狀態(tài)后,BootLoader程序做的第一件事情就是擦除以前程序的空間。如果在實(shí)際使用中,單片機(jī)因?yàn)槟撤N意外原因被復(fù)位,而且復(fù)位后運(yùn)行BootLoader時(shí)在串口上有任何數(shù)據(jù)(如干擾信號(hào)或者系統(tǒng)正處于串口通信狀態(tài)),就會(huì)造成用戶(hù)程序的丟失。

 、 BootLoader程序中沒(méi)有使用看門(mén)狗。如果升級(jí)失敗或者升級(jí)過(guò)程中程序死機(jī),將不能恢復(fù)到初始的升級(jí)狀態(tài)。這對(duì)于直接串口連接的方式問(wèn)題不大,但是需要使用遠(yuǎn)程升級(jí)時(shí)是一個(gè)致命的問(wèn)題。
  ③ 在寫(xiě)入用戶(hù)程序過(guò)程中如果出現(xiàn)數(shù)據(jù)錯(cuò)誤,就會(huì)復(fù)位,而這時(shí)用戶(hù)程序已經(jīng)被部分寫(xiě)入了。如果復(fù)位后運(yùn)行BootLoader程序沒(méi)有收到信號(hào)時(shí),會(huì)啟動(dòng)用戶(hù)程序。這樣殘缺的用戶(hù)程序就可能會(huì)造成運(yùn)行故障和不可預(yù)料的結(jié)果。如果看門(mén)狗是在用戶(hù)程序中打開(kāi)的,這時(shí)就有可能出現(xiàn)看門(mén)狗沒(méi)有被啟動(dòng)而死機(jī)的現(xiàn)象,這是遠(yuǎn)程升級(jí)中一個(gè)嚴(yán)重的問(wèn)題。
  
   ④ BootLoader程序中允許寫(xiě)EEPROM和芯片配置字。雖然這樣增加了靈活性,但是這樣是不安全的。如果配置字不小心設(shè)置錯(cuò)了,下載后會(huì)使整個(gè)芯片不能正常運(yùn)行。這時(shí)需要重新用編程器修改配置字才行。

  只有設(shè)法克服上面提到的缺陷,才能將BootLoader程序應(yīng)用到實(shí)際系統(tǒng)中。

  (2) 對(duì)HI-TECH的BootLoader程序的改進(jìn)

  針對(duì)上面提到的問(wèn)題,對(duì)HI-TECH的BootLoader作了一些修改,刪除了部分很少用到的功能和不安全的功能,同時(shí)修改了進(jìn)入BootLoader狀態(tài)的判斷條件。除了使用增強(qiáng)的串口數(shù)據(jù)識(shí)別方式外,還增加了電平檢測(cè)的方式,用來(lái)判斷是否進(jìn)入BootLoader狀態(tài)。

   ① 針對(duì)上面第一項(xiàng)中的問(wèn)題,修改為識(shí)別特定字符串才可以進(jìn)入BootLoader的升級(jí)狀態(tài)。特定字符串的內(nèi)容和長(zhǎng)度可以由用戶(hù)自己定義(長(zhǎng)度不能超過(guò)12字節(jié)。在一般情況下,12字節(jié)的識(shí)別字符串應(yīng)當(dāng)足夠長(zhǎng)了)。可以使用任何數(shù)據(jù)(包括0)。

   ② 增加了特定引腳電平判斷方式,在BootLoader程序運(yùn)行后,判斷某個(gè)特定的引腳上的電壓是否是預(yù)定的電壓,由此決定是否需要進(jìn)入BootLoader升級(jí)狀態(tài)。引腳和預(yù)定電壓(高/低)可以自由設(shè)置。這種方式比較安全,但是不太適合于遠(yuǎn)程升級(jí)。

   ③ 增加了看門(mén)狗選項(xiàng),可以設(shè)置使用/不使用看門(mén)狗。一般設(shè)置看門(mén)狗的溢出時(shí)間在0.5~2s比較合適。

   ④ 增加了編程響應(yīng)。在每成功接收到一行HEX數(shù)據(jù)后,發(fā)出一個(gè)回應(yīng)字節(jié),用于編程時(shí)的錯(cuò)誤檢測(cè)。PC端的下載程序可以根據(jù)這個(gè)字節(jié)來(lái)判斷下載過(guò)程中是否出錯(cuò)。

   ⑤ 針對(duì)上面3(1)中③的問(wèn)題,可以這樣解決。將編譯后的HEX文件手工稍作修改,將0x200~0x220(假設(shè)用戶(hù)程序是從0x200開(kāi)始的)地址段的數(shù)據(jù)從文件的開(kāi)頭移動(dòng)到文件的結(jié)尾。這樣0x200處的代碼會(huì)在最后才寫(xiě)入單片機(jī)中。如果寫(xiě)入過(guò)程中出現(xiàn)故障,復(fù)位后即使BootLoader啟動(dòng)了用戶(hù)程序,也會(huì)因?yàn)檫@段區(qū)域沒(méi)有代碼而重新復(fù)位,而不會(huì)去運(yùn)行部分被寫(xiě)入的用戶(hù)程序。不過(guò)這種方法需要對(duì)HEX文件的結(jié)構(gòu)有一定的了解才行。一個(gè)簡(jiǎn)單判斷HEX數(shù)據(jù)地址的方法是,HEX文件的每一行第一個(gè)字符是冒號(hào)“:”,冒號(hào)后的第3、4、5、6這四個(gè)數(shù)字就表示這一行數(shù)據(jù)的地址,是以十六進(jìn)制表示的。如:“:100200...”就表示地址是0x200。在正常情況下,編譯后的HEX文件數(shù)據(jù)是地址從低到高的順序排列的。

  改進(jìn)后的程序增加了一部分參數(shù),它們是:
  BOOT_SIGNAL——使用單片機(jī)引腳電平觸發(fā)方
  • 上一篇: 基于ADuC841的膜片鉗放大器的設(shè)計(jì)
  • 下一篇: Proteus軟件調(diào)試實(shí)現(xiàn)的數(shù)字式指針溫度計(jì)
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話(huà):0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1