chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用Keil來驗證單片機變量占多少字節(jié)

Q4MP_gh_c472c21 ? 來源:strongerHuang ? 作者:strongerHuang ? 2021-10-29 10:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

首先問大家兩個問題:
  • 8位單片機定義一個int型變量,占幾個字節(jié)?
  • 32位單片機定義一個char型變量,占幾個字節(jié)?
我敢說很多人都不知道,或者存在疑惑。具體占多少字節(jié),其實通過手動驗證一下就知道了。 今天結合Keil C51(AT89C51),以及Keil MDK(STM32)為大家驗證一下 char、short、int、float、double 到底占幾字節(jié)空間。

Keil C51、8位單片機

這一節(jié)基于Keil C51工具,8位單片機(AT89C51)進行測試。
//char a;
void main(void){  while(1)  {  }}
這是一個很簡單的Demo,只針對變量占用空間大小進行測試,主要是對比data的大小,初始值為9。(其中系統(tǒng)【啟動文件占用了9字節(jié)RAM空間) 1.char占1字節(jié)

定義變量:

char a;

編譯結果:

Program Size: data=10.0 xdata=0 code=17
2.short占2字節(jié)

定義變量:

short a;

編譯結果:

Program Size: data=11.0 xdata=0 code=17

3.int占2字節(jié)

定義變量:

int a;

編譯結果:

Program Size: data=11.0 xdata=0 code=17

4.float占4字節(jié)

定義變量:

float a

編譯結果:

Program Size: data=13.0 xdata=0 code=17

5.double占4字節(jié)

定義變量:

double

編譯結果:

Program Size: data=13.0 xdata=0 code=17

Keil MDK、32位單片機

這一節(jié)基于Keil MDK工具,32位單片機(STM32)進行測試。
//char a;

int main(void){  while(1)  {//    a++;  }}
這也是一個很簡單的Demo,主要是對比RW-data的大小,初始值為0。(其中 ZI-data=1024 為系統(tǒng)分配的??臻g大小 1.char占1字節(jié)

定義變量:

char a;

編譯結果:

Program Size: Code=512 RO-data=436 RW-data=4 ZI-data=1028

啥?占了4個字節(jié)? 答案:只占了一個字節(jié),因為32位機是4字節(jié)為一個“單元”,一個 char 只占用了其中1字節(jié)(類似結構體占用空間大小,這里還牽涉到大小端對齊模式)。 再舉一個例子:定義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;

編譯結果:

ProgramSize:Code=512RO-data=436RW-data=4ZI-data=1028

這里和 char 類似,如果定義兩個 short 也是占用4個字節(jié)。 3.int占4字節(jié)

定義變量:

int a;

編譯結果:

ProgramSize:Code=512RO-data=436RW-data=4ZI-data=1028

32位機,int占用4字節(jié)沒什么說的。 4.float占4字節(jié)

定義變量:

float a;

編譯結果:

ProgramSize:Code=520RO-data=436RW-data=4ZI-data=1028

5.double占8字節(jié)

定義變量:

double a;

編譯結果:

ProgramSize:Code=1156RO-data=436RW-data=8ZI-data=1024

總結

上面驗證情況在Keil C51、 8位單片機(AT89C51)中:
  • char:占1字節(jié)

  • short、int:占2字節(jié)

  • float、double:占4字節(jié)

在Keil MDK、 32位單片機(STM32)中:
  • char:占1字節(jié)

  • short:占2字節(jié)

  • int、float:占4字節(jié)

  • double:占8字節(jié)

通過對比上面幾個變量,以及編譯結果,得出一些結論。 1.變量占多少字節(jié),與處理器(以及編譯器)有關; 2.浮點數運算更占代碼空間,且double比float更占空間。上面基于32位機中進行了a++;運算,明顯float、double打碼量(code)更大。 3.變量數據對齊規(guī)則和結構體一樣。經典的面試題:計算下面結構體占用多少字節(jié)?
struct Str{  char a;  short b;  int c;  char d;};
這里面還有很多細節(jié)內容,可能很多人都沒有深入研究過,感興趣的朋友可以自己實驗研究一下。
責任編輯:haq
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6076

    文章

    45476

    瀏覽量

    669505
  • keil
    +關注

    關注

    69

    文章

    1229

    瀏覽量

    172521

原文標題:用Keil驗證8位和32位單片機變量占用空間大小

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Keil編譯錯誤匯總

    出現多重定義,而全局變量的定義一般在.c文件中,在對應的.h文件中用extern引用。 3. keil在調試退出時,經常出現“Encountered an improper argument
    發(fā)表于 01-21 07:40

    單片機解密是什么?

    芯片的其中一個類。 單片機(MCU)一般都有內部程序區(qū)和數據區(qū)(或者其一)供用戶存放程序和工作數據(或者其一)。為了防止未經授訪問或拷貝單片機的機內程序,大部分單片機都帶有加密鎖定位或者加密
    發(fā)表于 12-30 08:19

    Keil中如何調試程序中變量的值變化呢?

    Keil中,如何調試程序中變量的值變化呢
    發(fā)表于 12-22 16:16

    不同位數的CPU的變量所占的內存

    不同位數的CPU(單片機)的變量所占的內存也不盡相同,具體如下表所示。 8位16位32位64位 char1 Byte1 Byte1 Byte1 Byte short int2 Byte2 Byte2
    發(fā)表于 12-09 07:30

    變量控件實驗

    目錄1、實驗目的2、實驗設備3、實驗步驟3.1新建工程3.2新建畫面3.3添加控件3.4模擬工程3.5硬件驗證1、實驗目的單片機或PLC的串口與智能顯示卡相連驅動大尺寸VGA顯示器或電視機進行
    的頭像 發(fā)表于 11-20 15:04 ?1579次閱讀
    <b class='flag-5'>變量</b>控件實驗

    Keil中使用J-Link attach到正在運行的代碼中

    一、設置驗證變量 使用 SDK 例程 igpio_led_output,為了便于驗證,定義全局變量 count,在 while(1) 中累加。 圖 1 二、設置
    發(fā)表于 11-19 06:54

    C語言開發(fā)單片機為什么大多數都采用全局變量的形式?

    單片機的芯片資源從來都是 “精打細算” 的級別,CPU 主頻普遍不高,RAM 總容量本就緊張,分給??臻g的更是少得可憐。要是像普通軟件那樣,依賴函數返回值傳遞數據、頻繁用局部變量周轉,一二去占用
    的頭像 發(fā)表于 11-12 14:29 ?405次閱讀
    C語言開發(fā)<b class='flag-5'>單片機</b>為什么大多數都采用全局<b class='flag-5'>變量</b>的形式?

    請問rt-thread studio如何想keil一樣在線查看變量?

    rt-thread studio如何想keil一樣在線查看變量?是我操作不對嗎?還是本來就沒有這個功能?
    發(fā)表于 09-17 06:07

    怎么測單片機系統(tǒng)頻率

    單片機系統(tǒng)頻率是指單片機工作時的時鐘頻率,它直接影響單片機的運行速度和處理能力,準確測量系統(tǒng)頻率對單片機應用開發(fā)、程序調試和性能優(yōu)化具有重要意義。測量
    的頭像 發(fā)表于 07-25 11:39 ?744次閱讀

    單片機怎么驅動電機?

    在各類自動化設備和智能裝置中,電機是重要的執(zhí)行部件,而單片機作為控制核心,需要通過特定的方式驅動電機運轉。單片機驅動電機并非直接連接即可,而是要根據電機類型和功率,搭配合適的驅動電路,才能實現穩(wěn)定
    的頭像 發(fā)表于 07-25 09:31 ?858次閱讀

    單片機怎么燒程序

    單片機燒程序是將編寫好的程序代碼寫入單片機內部存儲單元,讓單片機按照預設邏輯工作的過程,是單片機應用開發(fā)中不可或缺的環(huán)節(jié)。無論是簡單的燈光控制程序,還是復雜的工業(yè)控制算法,都需要通過燒
    的頭像 發(fā)表于 07-23 11:47 ?1161次閱讀

    怎樣學會單片機?

    想學會單片機其實沒那么復雜,先把心態(tài)放平穩(wěn),別被那些五花八門的名詞嚇住。一開始就得把 C 語言基礎打扎實,位操作、指針、函數這些概念必須吃透,尤其是指針,單片機里操作寄存器、外設經常要用到,搞不懂
    的頭像 發(fā)表于 07-23 10:23 ?643次閱讀
    怎樣學會<b class='flag-5'>單片機</b>?

    基于Keil開發(fā)瑞薩RA8單片機

    這兩年單片機行業(yè)也開始卷起來了,各大廠商紛紛推出各種高性能的單片機。
    的頭像 發(fā)表于 05-07 10:33 ?1438次閱讀
    基于<b class='flag-5'>Keil</b>開發(fā)瑞薩RA8<b class='flag-5'>單片機</b>

    瑞薩RA8系列教程 | 基于 Keil 開發(fā) RA8單片機

    本文結合瑞薩Cortext-M85單片機RA8D1、Keil MDK,以及瑞薩自家的代碼初始化工具(Smart Configurator)給大家描述一下,快速在Keil MDK上點亮Cortext-M85
    的頭像 發(fā)表于 04-22 17:41 ?1293次閱讀
    瑞薩RA8系列教程 | 基于 <b class='flag-5'>Keil</b> 開發(fā) RA8<b class='flag-5'>單片機</b>

    如何使用PN7制作具有5180字節(jié)UID的身份驗證mifare plus?

    我正在開發(fā)的讀卡器使用 PN5180。 我想讀取 7 字節(jié) UID 的 Mifare Plus ev1 卡 但 PN5180數據表僅解釋了4字節(jié) UID 卡。 如何使用 PN7 制作具有 5180 字節(jié) UID 的身份
    發(fā)表于 04-01 06:37