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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 讓STM32的外部SRAM操作跟內(nèi)部SRAM一樣

          讓STM32的外部SRAM操作跟內(nèi)部SRAM一樣

          作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

          我們繼續(xù)深入點(diǎn),看看testsram[]這個大數(shù)組到處編譯在到哪里去了,用IDA64來反匯編下編譯出來的AXF文件

          可以看到testsram這個大數(shù)組自動編譯到外部sram的0x68000000這個地址上。我們再試試再定義幾個大數(shù)組看看

          再來看看編譯后的結(jié)果

          可以看到每個大數(shù)組都由編譯器自己分配了內(nèi)存的地址,壓根不用我們自己去定義。

          到這里相信大家會有一個疑問,那編譯是怎么來決定把哪些變量定義在內(nèi)部SRAM,那些定義在外部SRAM。這一點(diǎn)我也研究清楚,我只知道編譯會優(yōu)先把變量都定義外部SRAM,當(dāng)外部SRAM不夠用情況才會定義在內(nèi)部SRAM上,至于怎么讓編譯優(yōu)先使用內(nèi)部SRAM,我也沒有搞明白。目前我能做到的是把已經(jīng)初始化的全局變量都放在SRAM,做法是修改散列文件,讓RW只在內(nèi)存SRAM上編譯。

          去掉小紅框的勾,然后點(diǎn)擊Edit我們來修改SRAM.sct文件,也就是編譯散列文件

          把RW_RAM1中(也就是外部SRAM)的+RW去掉,這樣已經(jīng)初始化的全局變量就只會編譯在內(nèi)部SRAM中

          重新編譯下工程,再來反匯編下看看編譯結(jié)果

          可以看到usmart_nametab[]這個已經(jīng)初始化的數(shù)組編譯在內(nèi)部SRAM上,adc2[]這個未初始化的數(shù)組,數(shù)組的大小比較而且能在內(nèi)部Sram編譯得下的,卻還是編譯在外部SRAM上。

          最后散列相關(guān)的知識,大家可以看看這里http://blog.csdn.net/lindabell/article/details/8957968#0-qzone-1-11984-d020d2d2a4e8d1a374a433f596ad1440

          前面沒有修改啟動文件,其它變量全部在內(nèi)部SRAM的時候,程序運(yùn)行是沒有問題,減小數(shù)組的時候程序運(yùn)行不起來,修改前面的紅字部分后,程序就可以運(yùn)行起來,但是LCD偶爾正常,偶爾不正常,調(diào)試下感覺是延時的問題,沒有再繼續(xù)調(diào)試了


          上一頁 1 2 下一頁

          關(guān)鍵詞: STM32外部SRAM內(nèi)部SRA

          評論


          技術(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); })();