首先問大家兩個(gè)問題:
- 8位單片機(jī)定義一個(gè)int型變量,占幾個(gè)字節(jié)?
- 32位單片機(jī)定義一個(gè)char型變量,占幾個(gè)字節(jié)?
Keil C51、8位單片機(jī)
這一節(jié)基于Keil C51工具,8位單片機(jī)(AT89C51)進(jìn)行測(cè)試。這是一個(gè)很簡(jiǎn)單的Demo,只針對(duì)變量占用空間大小進(jìn)行測(cè)試,主要是對(duì)比data的大小,初始值為9。(其中系統(tǒng)【啟動(dòng)文件】占用了9字節(jié)RAM空間) 1.char占1字節(jié)//char a;void main(void){while(1){}}
定義變量:
char a;
編譯結(jié)果:
Program Size: data=10.0 xdata=0 code=17
2.short占2字節(jié)定義變量:
short a;
編譯結(jié)果:
Program Size: data=11.0 xdata=0 code=17
3.int占2字節(jié)
定義變量:
int a;
編譯結(jié)果:
Program Size: data=11.0 xdata=0 code=17
4.float占4字節(jié)
定義變量:
float a
編譯結(jié)果:
Program Size: data=13.0 xdata=0 code=17
5.double占4字節(jié)
定義變量:
double
編譯結(jié)果:
Program Size: data=13.0 xdata=0 code=17
Keil MDK、32位單片機(jī)
這一節(jié)基于Keil MDK工具,32位單片機(jī)(STM32)進(jìn)行測(cè)試。這也是一個(gè)很簡(jiǎn)單的Demo,主要是對(duì)比RW-data的大小,初始值為0。(其中 ZI-data=1024 為系統(tǒng)分配的棧空間大小) 1.char占1字節(jié)//char a;int main(void){while(1){// a++;}}
定義變量:
char a;
編譯結(jié)果:
Program Size: Code=512 RO-data=436 RW-data=4 ZI-data=1028
啥?占了4個(gè)字節(jié)? 答案:只占了一個(gè)字節(jié),因?yàn)?2位機(jī)是4字節(jié)為一個(gè)“單元”,一個(gè) char 只占用了其中1字節(jié)(類似結(jié)構(gòu)體占用空間大小,這里還牽涉到大小端對(duì)齊模式)。 再舉一個(gè)例子:定義4個(gè) char型變量,還是占用4字節(jié)空間(short原理一樣)再次提示:
注意4字節(jié)為一個(gè)“單元”,超過這個(gè)單元就分配到“下一個(gè)單元”,比如:
char a;int b;char c;
這里就會(huì)占用12(3 * 4)字節(jié)空間(a、b、c各自占4字節(jié))。
2.short占2字節(jié)定義變量:
short a;
編譯結(jié)果:
ProgramSize:Code=512RO-data=436RW-data=4ZI-data=1028
這里和 char 類似,如果定義兩個(gè) short 也是占用4個(gè)字節(jié)。 3.int占4字節(jié)
定義變量:
int a;
編譯結(jié)果:
ProgramSize:Code=512RO-data=436RW-data=4ZI-data=1028
32位機(jī),int占用4字節(jié)沒什么說的。 4.float占4字節(jié)
定義變量:
float a;
編譯結(jié)果:
ProgramSize:Code=520RO-data=436RW-data=4ZI-data=1028
5.double占8字節(jié)
定義變量:
double a;
編譯結(jié)果:
ProgramSize:Code=1156RO-data=436RW-data=8ZI-data=1024
總結(jié)
上面驗(yàn)證情況在Keil C51、 8位單片機(jī)(AT89C51)中:-
char:占1字節(jié)
-
short、int:占2字節(jié)
-
float、double:占4字節(jié)
-
char:占1字節(jié)
-
short:占2字節(jié)
-
int、float:占4字節(jié)
-
double:占8字節(jié)
這里面還有很多細(xì)節(jié)內(nèi)容,可能很多人都沒有深入研究過,感興趣的朋友可以自己實(shí)驗(yàn)研究一下。struct Str{char a;short b;int c;char d;};
-
單片機(jī)
+關(guān)注
關(guān)注
6076文章
45495瀏覽量
670358 -
keil
+關(guān)注
關(guān)注
69文章
1230瀏覽量
172640
原文標(biāo)題:用Keil驗(yàn)證8位和32位單片機(jī)變量占用空間大小
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Keil編譯錯(cuò)誤匯總
單片機(jī)解密是什么?
不同位數(shù)的CPU的變量所占的內(nèi)存
變量控件實(shí)驗(yàn)
在Keil中使用J-Link attach到正在運(yùn)行的代碼中
C語言開發(fā)單片機(jī)為什么大多數(shù)都采用全局變量的形式?
請(qǐng)問rt-thread studio如何想keil一樣在線查看變量?
怎么測(cè)單片機(jī)系統(tǒng)頻率
單片機(jī)怎么驅(qū)動(dòng)電機(jī)?
單片機(jī)怎么燒程序
怎樣學(xué)會(huì)單片機(jī)?
瑞薩RA8系列教程 | 基于 Keil 開發(fā) RA8單片機(jī)
如何用Keil來驗(yàn)證單片機(jī)變量占多少字節(jié)
評(píng)論