<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 讓單片機(jī)運(yùn)行速度更快一些

          讓單片機(jī)運(yùn)行速度更快一些

          作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏


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

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


          圖2地址映射表

          3.2 搬運(yùn)的過程

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


          圖3從Flash到SDRAM搬運(yùn)代碼的過程

          3.3 搬運(yùn)代碼的驅(qū)動(dòng)模塊及跳轉(zhuǎn)模塊源代碼

          (1)搬運(yùn)代碼驅(qū)動(dòng)模塊的代碼

          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代碼搬運(yùn)到開始地址為RamCode_Add,長度為CodeLen的SDRAM 中。

          (2)主函數(shù)及跳轉(zhuǎn)模塊

            #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 );
            # 跳轉(zhuǎn)模塊
            asm(“addis r2,0,0x00f0”);
            asm(“ori r2,r2,0x0000”); # 代碼起始地址0x00f00000
            asm(“mtspr LR,r2”);
            asm(“bclr 20,0”); # 無條件轉(zhuǎn)跳到鏈接寄存器
            # (LR)中的地址
            }
            FlashCode_Add_V:被搬運(yùn)代碼的首地址,在Flash中。
            RamCode_Add_V:被搬運(yùn)代碼的目標(biāo)地址,在RAM中。
            CodeLen_V:被搬運(yùn)代碼的長度,按32位計(jì)算。

          該函數(shù)在調(diào)用代碼搬運(yùn)MoveCodeF_to_RAM函數(shù),將代碼從Flash搬運(yùn)到SDRAM中后,將程序指針轉(zhuǎn)移到SDRAM中。注意跳轉(zhuǎn)的地址一定要和RamCode_Add_V一致。

          4 小 結(jié)

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

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

          上一頁 1 2 下一頁

          關(guān)鍵詞: 單片機(jī)運(yùn)行速

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();