首先問大家兩個問題:
- 8位單片機(jī)定義一個int型變量,占幾個字節(jié)?
- 32位單片機(jī)定義一個char型變量,占幾個字節(jié)?
Keil C51、8位單片機(jī)
這一節(jié)基于Keil C51工具,8位單片機(jī)(AT89C51)進(jìn)行測試。這是一個很簡單的Demo,只針對變量占用空間大小進(jìn)行測試,主要是對比data的大小,初始值為9。(其中系統(tǒ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)行測試。這也是一個很簡單的Demo,主要是對比RW-data的大小,初始值為0。(其中 ZI-data=1024 為系統(tǒng)分配的??臻g大小) 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個字節(jié)? 答案:只占了一個字節(jié),因?yàn)?2位機(jī)是4字節(jié)為一個“單元”,一個 char 只占用了其中1字節(jié)(類似結(jié)構(gòu)體占用空間大小,這里還牽涉到大小端對齊模式)。 再舉一個例子:定義4個 char型變量,還是占用4字節(jié)空間(short原理一樣)再次提示:
注意4字節(jié)為一個“單元”,超過這個單元就分配到“下一個單元”,比如:
char a;
int b;
char c;
這里就會占用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 類似,如果定義兩個 short 也是占用4個字節(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)注
6044文章
44628瀏覽量
639003 -
keil
+關(guān)注
關(guān)注
69文章
1214瀏覽量
167371
原文標(biāo)題:用Keil驗(yàn)證8位和32位單片機(jī)變量占用空間大小
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
單片機(jī)Debug工具性能對比 單片機(jī)調(diào)試常用命令
32位電機(jī)驅(qū)動單片機(jī)ZH521X產(chǎn)品概述
![32位電機(jī)驅(qū)動<b class='flag-5'>單片機(jī)</b>ZH521X產(chǎn)品概述](https://file1.elecfans.com/web2/M00/0C/58/wKgZomdEHwCAN98xAAAuLzgdX_A627.png)
【藍(lán)橋杯單片機(jī)】第二章 開發(fā)環(huán)境與工具的安裝
![【藍(lán)橋杯<b class='flag-5'>單片機(jī)</b>】第二章 開發(fā)環(huán)境與工具的安裝](https://file.elecfans.com/web2/M00/09/16/pYYBAGD0FvWAeWpFAAAb1Fux1oA753.jpg)
基于51單片機(jī)的手動數(shù)字時鐘
![基于51<b class='flag-5'>單片機(jī)</b>的手動數(shù)字時鐘](https://file1.elecfans.com//web1/M00/F3/4F/wKgZoWcVAq2AGPEHAAVBtNVqXVM246.png)
單片機(jī)怎么寫入程序
如何將hex文件燒錄進(jìn)單片機(jī)
keil可以讀出單片機(jī)的程序嗎
keil軟件怎么運(yùn)行寫好的程序
如何提高單片機(jī)的運(yùn)算效率之FPU
![如何提高<b class='flag-5'>單片機(jī)</b>的運(yùn)算效率之FPU](https://file.elecfans.com/web2/M00/09/16/pYYBAGD0FvWAeWpFAAAb1Fux1oA753.jpg)
Keil中變量不被初始化方法
![<b class='flag-5'>Keil</b>中<b class='flag-5'>變量</b>不被初始化方法](https://file.elecfans.com/web2/M00/09/16/pYYBAGD0FvWAeWpFAAAb1Fux1oA753.jpg)
如何用keil給單片機(jī)燒錄程序
51單片機(jī)燒錄軟件怎么用
keil 斷點(diǎn) 執(zhí)行次數(shù)設(shè)置后,出現(xiàn)非法變量的錯誤
PY32系列單片機(jī)開發(fā)板 常用型號都有 支持Keil,IAR進(jìn)行開發(fā)
![PY32系列<b class='flag-5'>單片機(jī)</b>開發(fā)板 常用型號都有 支持<b class='flag-5'>Keil</b>,IAR進(jìn)行開發(fā)](https://file1.elecfans.com//web2/M00/E8/DB/wKgaomZNlUCAZR2BAA4W9nyyvYg902.jpg)
評論