開發(fā)環(huán)境:CS+ for CA,CX
MCU:RL78系列
仿真器:SF3000E1
程序的內(nèi)存分配
一個由C/C++編譯的程序占用的內(nèi)存分為以下幾個部分:
棧區(qū)(stack)由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。
堆區(qū)(heap)一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時可能由OS回收。
全局區(qū)(靜態(tài)區(qū))(static)全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。程序結(jié)束后有系統(tǒng)釋放。
文字常量區(qū)—常量字符串就是放在這里的。程序結(jié)束后由系統(tǒng)釋放。
程序代碼區(qū)—存放函數(shù)體的二進(jìn)制代碼。
棧溢出的危害
棧溢出就是緩沖區(qū)溢出的一種。由于緩沖區(qū)溢出而使得有用的存儲單元被改寫,往往會引發(fā)不可預(yù)料的后果。程序在運(yùn)行過程中,為了臨時存取數(shù)據(jù)的需要,一般都要分配一些內(nèi)存空間,通常稱這些空間為緩沖區(qū)。如果向緩沖區(qū)中寫入超過其本身長度的數(shù)據(jù),以致于緩沖區(qū)無法容納,就會造成緩沖區(qū)以外的存儲單元被改寫,這種現(xiàn)象就稱為緩沖區(qū)溢出。緩沖區(qū)長度一般與用戶自己定義的緩沖變量的類型有關(guān)。
如何查看程序棧的使用情況
針對瑞薩的RL78系列MCU去查看代碼中使用了多少棧空間,可以按照如下步驟進(jìn)行操作。
步驟一
請參照圖1,打開CA78K0R(Build Tool)-->Compile options-->Debug Information選擇Yes(Add to both assembly and object file)(-g2)
圖1
步驟二
請參照圖2,打開CA78K0R(Build Tool)-->Compile options-->Assembly file選擇Yes(With no C source info)(-a)。
圖2
步驟三
請參照圖3,將工程項目進(jìn)行編譯。
圖3
步驟四
請參照圖4,打開Tool-->Startup Stack Usage Tracer,打開后會彈出如圖5和圖6的窗口。會顯示我們每個源文件與每個函數(shù)所占用的棧空間大小。
圖4
圖5
圖6
如圖6棧空間使用情況例子說明
main函數(shù)使用的占空間為18個字節(jié),計算是根據(jù)其調(diào)用的所有的函數(shù)的占空間使用的總和。其中調(diào)用的各個函數(shù)R_FDL_Write用到8個字節(jié)棧空間,R_FDL_Write用到8個字節(jié)棧空間,以及所有可以中斷的棧空間。
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
146文章
17317瀏覽量
352643 -
程序
+關(guān)注
關(guān)注
117文章
3795瀏覽量
81411 -
編譯器
+關(guān)注
關(guān)注
1文章
1642瀏覽量
49286
原文標(biāo)題:CS+ for CA,CX查看RL78程序棧的使用
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論