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

rtthread編譯后如何查看堆棧空間使用情況?
CUBEIDE運(yùn)行完可以看RAM的使用情況,運(yùn)行中可以實(shí)時(shí)查看RAM的使用情況嗎?
如何查看RAM使用情況?
STM32H7的FLASH,RAM和棧使用情況
怎樣使用Windows自帶的東西查看電源使用情況
SoC如何查看內(nèi)存使用情況
Windows查看電源使用情況

評(píng)論