最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

STM32 內(nèi)存分布探究

出處:中國電子網(wǎng) 發(fā)布于:2018-07-04 14:30:30

  本人在運(yùn)行ucos時(shí)遇到一個(gè)非常奇怪的問題,運(yùn)行一段時(shí)間后就會(huì)莫名進(jìn)入hardfault函數(shù),導(dǎo)致系統(tǒng)死機(jī)。后來根據(jù)對(duì)堆棧調(diào)試,發(fā)現(xiàn)每次調(diào)用的函數(shù)都不一樣,甚是費(fèi)解。通過map文件得出結(jié)論,原來在系統(tǒng)初始化的時(shí)候在flash里面讀出了系統(tǒng)配置參數(shù),在系統(tǒng)運(yùn)行過程中會(huì)寫flash,而flash定義的地址與程序代碼存儲(chǔ)的位置發(fā)生了重疊,一寫數(shù)據(jù)就擦掉了一些函數(shù),當(dāng)調(diào)用到這些函數(shù)的時(shí)候就會(huì)發(fā)生未知指令的錯(cuò)誤。把這個(gè)參數(shù)存儲(chǔ)地址定義的分開些就會(huì)解決這個(gè)問題。可是,開始這個(gè)地址寫好了,隨著程序代碼不斷增多,消耗的片上flash也會(huì)增大,是個(gè)動(dòng)態(tài)增長的過程,不注意很有可能發(fā)生沖突。所以在項(xiàng)目開發(fā)過程中定期檢查定義的參數(shù)存儲(chǔ)地址,或者干脆把參數(shù)存儲(chǔ)地址定義在程序地址之前。
    今天詳細(xì)了解一下編譯后的STM32工程,堆棧內(nèi)存分布情況,有助于對(duì)堆棧大小分配的理解。打開一個(gè)基于STM32f103RET6的工程,具有512KB內(nèi)置flash,以及64KBSRAM,通過map文件可以看出:
  名稱
  位置
  地址
  備注
  RESET復(fù)位向量
  Flash
  0x08000000
  上電執(zhí)行的條代碼
  庫函數(shù)代碼段
  Flash
  0x08000144
  在程序中調(diào)用的庫函數(shù),例如字符串處理函數(shù)、內(nèi)存分配函數(shù)等
  用戶自定義函數(shù)代碼段
  Flash
  0x08001110
  工程模板函數(shù)庫、用戶自定義函數(shù)編譯后的代碼,以函數(shù)名首字母排
  .constdata
  Flash
  0x0800d07c-0x0800d680
  用戶定義的常量
  剩余空間
  Flash
  名稱
  位置
  地址
  備注
  .data
  SRAM
  0x20000000
  數(shù)據(jù)段,以及初始化的全局變量
  .bss
  SRAM
  0x20000268
  未初始化的全局變量
  HEAP(堆)
  SRAM
  0x200033e8
  啟動(dòng)文件定義的堆空間開始,程序調(diào)用malloc自由分配的內(nèi)存在堆上
  STACK(棧)
  SRAM
  0x200073e8
  啟動(dòng)文件定義的棧空間開始,各個(gè)函數(shù)中的局部變量空間分配到棧上
  剩余空間
  SRAM
  例如在這個(gè)工程中,flash自定義參數(shù)存儲(chǔ)地址,不要定義在0x0800d680之前。
  另外,還可以看出在SRAM里,分配存儲(chǔ)的是全局變量區(qū),未初始化變量區(qū),堆以及棧。要注意的是,如果堆和棧定義的過小,程序默認(rèn)定義都不大,一旦使用了一個(gè)較大的局部變量,有可能造成??臻g溢出,覆蓋掉堆空間甚至上面的全局變量區(qū),造成系統(tǒng)出錯(cuò)的問題。例如在做IAP的過程中,每當(dāng)向flash寫入512個(gè)字節(jié)時(shí),由于大容量STM32片上flash塊大小為2K,寫之前要先讀出,調(diào)用寫函數(shù)的時(shí)候就自動(dòng)創(chuàng)建一個(gè)2K大小的局部變量,由于棧是向上增長的,自然會(huì)覆蓋堆以及全局變量區(qū),造成未知的錯(cuò)誤。根據(jù)片上SRAM的資源,將堆和棧適當(dāng)調(diào)大一些為好,比如各設(shè)置為4K大小。
關(guān)鍵詞:STM32 內(nèi)存分布探究STM32

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫電子市場(chǎng)網(wǎng),http://www.udpf.com.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

STM32工控板常用的8MHz晶振有何妙用?
廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號(hào),
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動(dòng)力!意見一經(jīng)采納,將有感恩紅包奉上哦!