開發環境:CS+ for CA,CX
MCU:RL78系列
仿真器:SF3000E1
程序的內存分配
一個由C/C++編譯的程序占用的內存分為以下幾個部分:
棧區(stack)由編譯器自動分配釋放,存放函數的參數值,局部變量的值等。
堆區(heap)一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收。
全局區(靜態區)(static)全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。程序結束后有系統釋放。
文字常量區—常量字符串就是放在這里的。程序結束后由系統釋放。
程序代碼區—存放函數體的二進制代碼。
棧溢出的危害
棧溢出就是緩沖區溢出的一種。由于緩沖區溢出而使得有用的存儲單元被改寫,往往會引發不可預料的后果。程序在運行過程中,為了臨時存取數據的需要,一般都要分配一些內存空間,通常稱這些空間為緩沖區。如果向緩沖區中寫入超過其本身長度的數據,以致于緩沖區無法容納,就會造成緩沖區以外的存儲單元被改寫,這種現象就稱為緩沖區溢出。緩沖區長度一般與用戶自己定義的緩沖變量的類型有關。
如何查看程序棧的使用情況
針對瑞薩的RL78系列MCU去查看代碼中使用了多少??臻g,可以按照如下步驟進行操作。
步驟一
請參照圖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,將工程項目進行編譯。
圖3
步驟四
請參照圖4,打開Tool-->Startup Stack Usage Tracer,打開后會彈出如圖5和圖6的窗口。會顯示我們每個源文件與每個函數所占用的??臻g大小。
圖4
圖5
圖6
如圖6棧空間使用情況例子說明
main函數使用的占空間為18個字節,計算是根據其調用的所有的函數的占空間使用的總和。其中調用的各個函數R_FDL_Write用到8個字節??臻g,R_FDL_Write用到8個字節棧空間,以及所有可以中斷的??臻g。
審核編輯:湯梓紅
-
mcu
+關注
關注
146文章
17148瀏覽量
351198 -
程序
+關注
關注
117文章
3787瀏覽量
81044 -
編譯器
+關注
關注
1文章
1634瀏覽量
49132
原文標題:CS+ for CA,CX查看RL78程序棧的使用
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論