新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > C8051F130的遠程在線升級程序設計

        C8051F130的遠程在線升級程序設計

        作者: 時間:2010-06-18 來源:網絡 收藏

          3. 需要注意的問題

          3.1 項目管理問題

          下位機固件程序中實際包含兩個獨立的部分,Bootloader 程序和主程序。我們在KEIL 中分別為這兩部分的建立獨立的項目文件,分別編譯。燒寫編譯后產生的HEX 文件時,應該先擦除FLASH 后,燒寫Bootloader 程序,然后在不擦除之前內容的情況下燒寫主程序。

          3.2 Bootloader 的存儲位置

          Bootloader 程序必須保證在上電過程后立即運行,而51 單片機的中斷向量存放在低地址處。所以Bootloader 程序不能存儲在低地址處,必須存放到高地址處,本例中,留出0xF000~0xFFFF 4KB 的FLASH 空間作為Bootloader 程序存儲區。在KEIL 開發環境中,默認會為項目文件提供初始化文件STARTUP.A51 來清空RAM 空間,以及調用初始化全局變量代碼段。其默認起始地址安排在0x0000處。為保證上電過程后立即運行Bootloader,我們在起始處還必須要手動修改匯編指令如下:

        程序

          以上代碼編譯時強制在0x0000 處放置一條跳轉到 0xF000 處的指令,這就保證了保證在上電過程后立即跳轉到Bootloader 程序運行。為了將Bootloader 程序的所有代碼定位在0xF000~0xFFFF 范圍內,要對KEIL 的BL51 定位選項設置如下:

        C8051F130的遠程在線升級程序設計

          主程序同樣有代碼定位的問題。為保證程序升級后能正常工作,修改主程序的STARTUP.A51 文件如下:

        C8051F130的遠程在線升級程序設計

          這里保證執行主程序也是先跳轉到Bootloader 程序,而將0x0006 設為了主程序的起始地址,避免了對中斷向量表的占用。

          另外還要將主程序的編譯代碼進行定位。設置和圖4 中類似,只是將Code Ranger 設為主程序的代碼空間:0x0000~0xEFFF。

          3.3 程序跳轉時的PLL 設置

           內部帶有PLL,最高主頻可達100MHz。在本系統設計中,外部晶振頻率為11.0592MHz,在Bootloader 程序和主程序中都通過使能PLL,倍頻至99.5328MHz 作為系統時鐘。在上電后, 默認是以內部時鐘作為系統時鐘的,通過執行初始化程序,系統再切換到以PLL 輸出為系統時鐘的工作環境上來。如果通過Silicon Labs 公司提供的初始化軟件CONFIG2 來配置初始化 的代碼的話,在初始化PLL 的過程中,會關閉PLL 模塊。

          // 一個由 CONFIG2 生成的系統時鐘初始化程序,

          // 注意:在調用此函數時,系統時鐘是由內部振蕩器產生。

        程序

          如果使用這段代碼初始化PLL 模塊,在主程序跳轉到Bootloader 程序,或者由Bootloader 程序跳轉到主程序時,必須考慮PLL 的設置問題。因為原工作時鐘是PLL 的輸出,而直接切換到另外一個程序中時,執行以上代碼會關閉PLL 系統時鐘,導致系統時鐘丟失,工作不正常。一個更安全的做法是在程序間互相跳轉之前,將系統時鐘切換到上電后默認的內部時鐘上。代碼如下所示:

        程序

          3.4 寄存器頁的切換

          C8051F130 內部功能模塊多,其控制寄存器也多,為了合理安排控制寄存器位置,采用了寄存器頁控制寄存器SFRPAGE 來將相同的地址切換到不同的控制寄存器。除了中斷函數自動切換到對應的寄存器頁外,當在程序中對某個寄存器操作前,需要設置SFRPAGE 切換到對應的寄存器頁。因此,在C51 語言編寫的程序中,涉及到寄存器操作的模塊函數中,需要在執行之前保存SFRPAGE 寄存器值,處理完畢后再恢復先前的SFRPAGE 寄存器值。相當于對SFRPAGE 寄存器值做一次出入棧。示例代碼如下:

        程序

          4. 總結

          通過在系統工作過程中接收程序升級數據,存入內部FLASH,全部接收完成后再集中升級主程序的方法,充分利用了C8051F130 的內部FLASH 空間,對系統的實時工作影響小,僅在Bootloader 程序運行期間不能正常工作,減小了通訊網絡通訊狀況差時對遠程在線更新程序造成的風險。

          基于以上方法,已經成功設計出可遠程程序的直放站系統,使用情況表明,該系統能穩定可靠工作,且為系統的維護節省了大量的工作量。本文介紹的在線程序升級設計方案,雖然是基于C8051F130 單片機的,但對其他類型的在線程序升級設計都有很好的參考作用。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 平顶山市| 武川县| 景谷| 镇坪县| 深圳市| 阜新市| 兰西县| 寻甸| 景德镇市| 读书| 丹东市| 中江县| 剑河县| 竹北市| 庆元县| 永州市| 龙山县| 九龙坡区| 十堰市| 英山县| 上杭县| 上饶市| 盐城市| 清徐县| 皋兰县| 淄博市| 精河县| 连江县| 东乡| 石棉县| 五寨县| 南雄市| 乌拉特后旗| 延边| 镇雄县| 新巴尔虎左旗| 武冈市| 通江县| 延川县| 汽车| 张北县|