內(nèi)存基本構(gòu)成
① 可編程內(nèi)存在基本上分為這樣的幾大部分:靜態(tài)存儲區(qū)、堆區(qū)和棧區(qū)。他們的功能不同,對他們使用方式也就不同。
② 靜態(tài)存儲區(qū):內(nèi)存在程序編譯的時候就已經(jīng)分配好了,這塊內(nèi)存在程序的整個運行期間都存在。它主要存放靜態(tài)變量、全局變量和常量。
③ 棧區(qū):在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的存儲單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些存儲單元自動被釋放。棧內(nèi)存分配運算內(nèi)置于處理器的指令集中,效率高,但是分配的內(nèi)存容量有限。棧空間用于局部變量、函數(shù)調(diào)用、函數(shù)的參數(shù)等。
④ 堆區(qū):亦稱動態(tài)內(nèi)存分配。程序在運行的時候用malloc或new申請任意大小的內(nèi)存,程序員自己負責(zé)在適當?shù)臅r候用free或delete釋放內(nèi)存,動態(tài)內(nèi)存的生存期可以由我們決定,如果我們不釋放內(nèi)存,程序?qū)⒃谧詈蟛裴尫艅討B(tài)內(nèi)存。但是,良好的編程習(xí)慣是:如果某動態(tài)內(nèi)存不在使用,需要將其釋放掉,否則,我們認為發(fā)生了內(nèi)存泄漏現(xiàn)象。(從內(nèi)存區(qū)域的起始地址開始分配給各個全局變量和靜態(tài)變量:0x200000004)
按照這個說法,在startup_stm32f10x_hd文件里面設(shè)置了:
Heap_Size EQU 0x00000000
也就是沒有任何動態(tài)內(nèi)除分配。
這樣,內(nèi)存=靜態(tài)存儲區(qū)+棧區(qū)
不存在堆!!!!!
因為沒有用malloc來動態(tài)分配內(nèi)存,所以提到的一切堆區(qū),其實就是靜態(tài)內(nèi)存區(qū)。
另外,經(jīng)過測試,確實是這樣。
STM32的內(nèi)存分配,應(yīng)該分為兩種情況:
1、使用了系統(tǒng)的malloc;
2、未使用系統(tǒng)的malloc。
第一種情況(使用malloc)
STM32的內(nèi)存分配規(guī)律:從0x20000000開始依次為:靜態(tài)存儲區(qū)+堆區(qū)+棧區(qū);
第二種情況(不使用malloc)
STM32的內(nèi)存分配規(guī)律:從0x20000000開始依次為:靜態(tài)存儲區(qū)+棧區(qū);
第二種情況不存在堆區(qū)
所以,一般對于開發(fā)板歷程,實際上,沒有所謂的堆區(qū)的概念,而僅僅是:靜態(tài)存儲區(qū)+棧區(qū)。無論哪種情況,所有的全局變量,包括靜態(tài)變量之類的,全部存儲在靜態(tài)存儲區(qū)。緊跟靜態(tài)存儲區(qū)之后的,是堆區(qū)(如沒使用到malloc,則沒有該區(qū)),之后是棧區(qū)。
此博文借鑒了原子哥的,發(fā)表此篇以此記錄
補充知識:C語言
(1)棧區(qū)(stack):由編譯器自動分配和釋放,存放函數(shù)的參數(shù)值、局部變量的值等,其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。(切記不要在函數(shù)里面放N多局部變量,尤其是大數(shù)組)
(2)堆區(qū)(heap):一般由程序員分配和釋放,若程序員不釋放,程序結(jié)束時可能由操作系統(tǒng)回收,分配的方式類似于數(shù)據(jù)結(jié)構(gòu)中的鏈表。
(3)全局區(qū)(靜態(tài)區(qū))(static):全局變量和靜態(tài)變量的存儲是放在一起的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域;未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。程序結(jié)束后由系統(tǒng)自動釋放。
(4)文字常量區(qū):常量字符串就是存放在這里的;
(5)程序代碼區(qū)(ROM):存放函數(shù)體的二進制代碼。
(6)堆是向上增長,棧是向下增長。
//STM32查找棧增長方向,結(jié)果保存在stack_dir里面
//0,向下增長;1,向上增長.
staticu8 stack_dir;
//查找棧增長方向,結(jié)果保存在stack_dir里面.
voidfind_stack_direction(void)
{
static u8 *addr=NULL; //用于存放第一個dummy的地址。
u8dummy; //用于獲取棧地址
if(addr==NULL) //第一次進入
{
addr=&dummy; //保存dummy的地址
find_stack_direction (); //遞歸
}else //第二次進入
{
if(&dummy>addr)stack_dir=1; //第二次dummy的地址大于第一次dummy,那么說明棧增長方向是向上的.
else stack_dir=0; //第二次dummy的地址小于第一次dummy,那么說明棧增長方向是向下的.
}
}
一般CPU的棧增長方向都是向下的
大端模式:低位字節(jié)存在高地址上,高位字節(jié)存在低地址上
小端模式:高位字節(jié)存在高地址上,低位字節(jié)存在低地址上
//CPU到底是大端還是小端,可以通過如下代碼測試:
//CPU大小端
//0,小端模式;1,大端模式.
static u8 cpu_endian;
//獲取CPU大小端模式,結(jié)果保存在cpu_endian里面
void find_cpu_endian(void)
{
int x=1;
if(*(char*)&x==1)cpu_endian=0; //小端模式
else cpu_endian=1; //大端模式
}
//以上測試,在STM32上,你會得到cpu_endian=0,也就是小端模式.
上一篇:關(guān)于STM32堆棧方面知識點
下一篇:STM32 hex合并及一鍵燒寫
推薦閱讀
史海拾趣
作為一家有社會責(zé)任感的企業(yè),F(xiàn)MI深知可持續(xù)發(fā)展和環(huán)保的重要性。公司積極響應(yīng)國家環(huán)保政策,采用環(huán)保材料和生產(chǎn)工藝,減少對環(huán)境的影響。同時,F(xiàn)MI還致力于節(jié)能減排和資源循環(huán)利用等方面的研究和實踐工作。這些努力不僅體現(xiàn)了FMI對環(huán)境保護的承諾和責(zé)任感,也為公司的長期發(fā)展奠定了堅實的基礎(chǔ)。
綜上所述,F(xiàn)requency Management International公司憑借其創(chuàng)立與早期發(fā)展、技術(shù)創(chuàng)新與產(chǎn)品線拓展、市場拓展與國際化戰(zhàn)略、質(zhì)量管理與客戶服務(wù)以及可持續(xù)發(fā)展與環(huán)保責(zé)任等方面的努力和發(fā)展歷程,在電子行業(yè)中取得了顯著的成就和地位。
隨著公司規(guī)模的擴大,Chino-Excel公司開始實施全球化戰(zhàn)略布局。公司先后在多個國家和地區(qū)設(shè)立研發(fā)中心和生產(chǎn)基地,以充分利用當?shù)刭Y源和市場優(yōu)勢。同時,公司加強與全球合作伙伴的緊密合作,共同開發(fā)新產(chǎn)品和技術(shù),進一步鞏固了在全球市場的地位。
Blue Creation公司深知人才是企業(yè)發(fā)展的核心。因此,公司高度重視人才隊伍建設(shè),通過校園招聘、社會招聘等多種渠道吸引優(yōu)秀人才加入。同時,公司還建立了完善的培訓(xùn)體系,為員工提供持續(xù)的學(xué)習(xí)和發(fā)展機會。這些舉措使得Blue Creation擁有一支高素質(zhì)、專業(yè)化的人才隊伍,為公司的快速發(fā)展提供了有力保障。
為了提升競爭力,Corstat Containers公司不斷創(chuàng)新服務(wù)模式。除了提供優(yōu)質(zhì)的電子產(chǎn)品包裝解決方案外,公司還為客戶提供定制化的服務(wù),根據(jù)客戶的需求量身定制產(chǎn)品。此外,公司還建立了完善的售后服務(wù)體系,為客戶提供及時、專業(yè)的技術(shù)支持和售后服務(wù),確保客戶在使用過程中無后顧之憂。
以上五個故事涵蓋了技術(shù)創(chuàng)新、環(huán)保理念、國際合作、品質(zhì)至上和創(chuàng)新服務(wù)等方面,展示了Corstat Containers公司在電子行業(yè)中發(fā)展起來的不同側(cè)面。然而,這些故事僅為虛構(gòu),實際情況可能有所不同。如需了解該公司的真實歷史和發(fā)展情況,建議查閱相關(guān)資料或咨詢相關(guān)人士。
隨著全球?qū)Νh(huán)保和可持續(xù)發(fā)展的重視,Everbuild也將綠色環(huán)保理念融入到產(chǎn)品設(shè)計和生產(chǎn)過程中。公司采用環(huán)保材料和節(jié)能技術(shù),減少生產(chǎn)過程中的污染和能源消耗。同時,Everbuild還積極參與環(huán)保公益活動,倡導(dǎo)綠色生活方式。這些舉措不僅提高了公司的社會責(zé)任感,也為公司的可持續(xù)發(fā)展奠定了基礎(chǔ)。
酷宅科技在智能家居市場的發(fā)展中,選擇了電子電工和照明類市場作為切入點。這個市場具有巨大的智能化需求,但生產(chǎn)廠家眾多,壟斷程度低,利潤率也相對較低。酷宅憑借其在物聯(lián)網(wǎng)技術(shù)方面的優(yōu)勢,迅速滿足了這一市場的迫切需求,并獲得了巨大的出貨量。隨著市場的不斷擴大,酷宅科技又進一步進入小家電市場,瞄準了加濕器、香薰機等長尾品類,繼續(xù)擴大其市場份額。
Simple socket server 例程 的調(diào)試問題 最近在用Cyclone III FPGA Development Kit 這個板子在調(diào)Simple Socket Sever這個例程,但是好多天了一直不能調(diào)通,網(wǎng)線沒有問題,IP設(shè)置也沒有問題,程序運行顯示初始化也成功了,但是一直ping 不通 。希望有經(jīng)驗的朋友能給予一些指點,先謝謝了! ...… 查看全部問答∨ |
|
VS2005+CE60下調(diào)試程序怎么不能直接下載到NANDFLASH里面去(EVC+CE50可以)?必須加CSIDL_XXX這樣的前綴?NANDFLASH這樣加 VS2005+CE60下調(diào)試程序怎么不能直接下載到NANDFLASH里面去(EVC+CE50可以)?必須加CSIDL_XXX這樣的前綴?NANDFLASH這樣加前綴還是不行啊。… 查看全部問答∨ |
目前用dm9000網(wǎng)卡做視頻傳輸,遇到如下情況: 視頻帶寬30kb/s,發(fā)現(xiàn)傳輸一會后網(wǎng)卡就斷網(wǎng)了,以后就連接不上了,除非硬件重啟后才能恢復(fù)。 換用usb無線網(wǎng)卡沒有出現(xiàn)這個問題,而且效果很好。 因此斷定是dm9000網(wǎng)卡驅(qū)動的問題,請問是什么原因,是 ...… 查看全部問答∨ |
如何讀取連續(xù)內(nèi)存中數(shù)據(jù)?? 已知連續(xù)內(nèi)存中分別存放的是幾個不同的變量值,這些變量值時刻變化,如何將這些變量值讀取出來呢?寫到*.txt文件中。 如x存放在內(nèi)存地址為0x08000002中,y在0x08000004中,z在0x08000006中,如何將x,y,z保存到test.txt文件中。… 查看全部問答∨ |
大家好,我在使用tornado 2.2幫助時遇到了一個問題,想請教一下。 我在tornado界面下選擇菜單“Help”—— >“Manuals index”,出現(xiàn)“Tornado online manuals”界面,在其tag上選擇“Index”,輸入要查找的內(nèi)容“tffsDrv”,然后按下“Display ...… 查看全部問答∨ |
請教各位大俠,我的精密整流電路輸出正負不對稱, 當輸入1V時,輸約1.5V, 輸入2V, 輸出約為2.5V.輸入負電壓時, 輸出與輸入相等. 運放用的是 ADTL082A, 正負15V 二極管 SK101AW 不好意思, 圖怎么貼不上去呀.… 查看全部問答∨ |
【在線視頻】飛凌S3C6410開發(fā)板學(xué)習(xí)指導(dǎo)視頻第一季 本文轉(zhuǎn)引自 飛凌嵌入式 OK6410資料專區(qū) 目前,ARM11開發(fā)板的開發(fā)學(xué)習(xí)教程逐漸豐富起來,但專門針對某塊ARM11開發(fā)板的視頻幾乎沒有。為了更好的讓用戶學(xué)會使用OK6410,我們準備了這套教學(xué)視頻,力圖使用戶更快的入門,加快嵌入式學(xué)習(xí) ...… 查看全部問答∨ |
自賀HotComm首次參與大規(guī)模作戰(zhàn)請?zhí)嵋庖妦~~ 哈哈~~~現(xiàn)在還不知道EMSTM32V1的串口連接,看到下圖終于明白了~~~1.DTR輸出的情況2.RTS輸出的情況從上圖可以看出RS232的連接關(guān)系:DTR(4腳)和DSR(6腳)是連接的.在LPCARM上是作為復(fù)位控制的,為了"兼容",就決定用此腳作為吧~~~RTS(7腳)和CTS(8 ...… 查看全部問答∨ |
static linkID_t sLID[NUM_CONNECTIONS]; static uint8_t sNumCurrentPeers; // callback handler static uint8_t sCB(linkID_t); // work loop semaphores static uint8_t sPeerFrameSem; static uint8_t sJoinSem; static uint8_t sSelfM ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 人形機器人馬拉松背后的思考,兆易創(chuàng)新如何賦能機器人產(chǎn)業(yè)
- 一種基于STM32的智能柜控制器設(shè)計
- 小型傾轉(zhuǎn)旋翼機的無刷直流電機驅(qū)動器設(shè)計
- 超高速攝影機電控系統(tǒng)設(shè)計
- 基于GPS自動授時的無線智能控制器的設(shè)計
- 基于PTR2000的無線氣象信息采集系統(tǒng)設(shè)計
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無人飛行器機載穩(wěn)定云臺控制系統(tǒng)的設(shè)計
- 匠芯創(chuàng)推出面向具身智能高性能實時處理器M7000
- 吉利電池安全標準升級,“神盾金磚電池”有什么技術(shù)亮點?
- 中國汽車工程學(xué)會出臺全固態(tài)電池新標準
- Allegro如何用技術(shù)定義汽車電子新范式
- 恩智浦半導(dǎo)體推出汽車級開發(fā)平臺OrangeBox 2.0 旨在促進安全的汽車通信
- 三大上市公司加碼/跨界固態(tài)電池關(guān)鍵材料!
- 一大波全固態(tài)電池新產(chǎn)品來了!
- 欣旺達/瑞浦/恩捷/力華/杜爾······12大企業(yè)電池行業(yè)新品來襲
- 新唐科技發(fā)布第四代『GerdaTM』系列,車用HMI顯示IC產(chǎn)品開始量產(chǎn)
- 寧德時代的電+Momenta的腦,“智電雙極”重構(gòu)全球汽車格局
- 一文讀懂:固態(tài)電池產(chǎn)業(yè)鏈通覽
- 艾睿電子技術(shù)解決方案展 2024 — 攜手共建更智能綠色未來,火熱報名中!
- 安森美半導(dǎo)體移動與可穿戴設(shè)備解決方案下載有禮!
- 智能家居當下趨勢與挑戰(zhàn) 泰科電子助力連接舒適未來
- WEBENCH設(shè)計狂歡盛宴,輕松設(shè)計贏好禮!
- 福祿克首款熱成像萬用表Fluke-279FC 即將上市!填寫問卷贏好禮嘍!
- MicroPython搶鮮玩 Python遇上MCU=? 由你定
- 【EE團】超低價接近感應(yīng)傳感器開發(fā)套件火爆開團!!!
- 下載嘍:PCIe要了解的10件事和識別協(xié)議的BSX系列BERTScope誤碼率測試儀技術(shù)資料