新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 讓單片機運行速度更快一些

        讓單片機運行速度更快一些

        作者: 時間:2016-12-02 來源:網絡 收藏


        所以,在RamApp.lnx中指定的定位規則應該在SDRAM中,如下:
          
        MEMORY
          {
          ram1: ORIGIN = 0x00003000, LENGTH = 0xf000
          ram: ORIGIN = 0x00F00000, LENGTH = 0x7000
          }
          SECTIONS
          {
          .data : {} > ram1
          .text : {} > ram
          }

        最后,在860單片機系統的地址映射規則如圖2所示。對照圖1,可以觀察到這和傳統的程序地址映射有很大不同。


        圖2地址映射表

        3.2 搬運的過程

        860T上電復位,RomTool.bin首先被執行,完成初始化工作后,運行代碼搬運函數,將RAMapp.bin搬運到SDRAM中,隨后改變PC(Program Counter)的值,無條件轉移到SDRAM中運行RAMapp.bin,如圖3所示。


        圖3從Flash到SDRAM搬運代碼的過程

        3.3 搬運代碼的驅動模塊及跳轉模塊源代碼

        (1)搬運代碼驅動模塊的代碼

        void MoveCodeF_to_RAM(UWORD *FlashCode_Add, UWORD *RamCode_Add,UWORD CodeLen) {
          do{
          *RamCode_Add++ = *FlashCode_Add++;
          CodeLen?
          } while ( CodeLen!=0)
          }

        該段代碼是將開始地址為FlashCode_Add,長度為CodeLen的Flash代碼搬運到開始地址為RamCode_Add,長度為CodeLen的SDRAM 中。

        (2)主函數及跳轉模塊

          #define FlashCode_Add_V 0x02810000
          #define RamCode_Add_V 0x00f00000
          #define CodeLen_V 0x00070000/4
          void main(){
          UWORD *I=(UWORD *) FlashCode_Add_v;
          UWORD *j= (UWORD *) RamCode_Add_v;
          UWORD *k= (UWORD *) CodeLen_V;
          MoveCodeF_to_RAM( (UWORD *) i, (UWORD *) j, (UWORD *)k );
          # 跳轉模塊
          asm(“addis r2,0,0x00f0”);
          asm(“ori r2,r2,0x0000”); # 代碼起始地址0x00f00000
          asm(“mtspr LR,r2”);
          asm(“bclr 20,0”); # 無條件轉跳到鏈接寄存器
          # (LR)中的地址
          }
          FlashCode_Add_V:被搬運代碼的首地址,在Flash中。
          RamCode_Add_V:被搬運代碼的目標地址,在RAM中。
          CodeLen_V:被搬運代碼的長度,按32位計算。

        該函數在調用代碼搬運MoveCodeF_to_RAM函數,將代碼從Flash搬運到SDRAM中后,將程序指針轉移到SDRAM中。注意跳轉的地址一定要和RamCode_Add_V一致。

        4 小 結

        可見,正確完成代碼搬運的關鍵在于:
          
        ① 確定被搬運代碼的物理地址映射規則, 物理地址一定是在SDRAM中;
        ② 被搬運代碼是被燒結在Flash中,后來又被搬運到SDRAM中;
        ③ 無條件轉移到SDRAM中,運行被搬運代碼(應用程序代碼)。

        對于其它型號的單片機,可以根據該原理類推,方法是一樣的,只是具體的代碼不同而已。相信你的單片機系統在經過這樣的處理后,效率一定會高很多。

        上一頁 1 2 下一頁

        關鍵詞: 單片機運行速

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 和田市| 略阳县| 阳山县| 玉田县| 新宁县| 平乡县| 林周县| 紫云| 鹿邑县| 同德县| 兴仁县| 乐平市| 萨嘎县| 阿拉善右旗| 樟树市| 临潭县| 胶州市| 凤翔县| 南京市| 肥西县| 江陵县| 临颍县| 都匀市| 舒城县| 北安市| 晋江市| 曲沃县| 台北市| 化州市| 宁波市| 东光县| 鄂州市| 江城| 成安县| 新乡县| 娱乐| 开封市| 平南县| 特克斯县| 仙居县| 青浦区|