在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

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

Q4MP_gh_c472c21 ? 來源:strongerHuang ? 作者:strongerHuang ? 2021-10-29 10:20 ? 次閱讀

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

Keil C51、8位單片機

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

定義變量:

char a;

編譯結果:

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

定義變量:

short a;

編譯結果:

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

3.int占2字節

定義變量:

int a;

編譯結果:

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

4.float占4字節

定義變量:

float a

編譯結果:

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

5.double占4字節

定義變量:

double

編譯結果:

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

Keil MDK、32位單片機

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

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

定義變量:

char a;

編譯結果:

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

啥?占了4個字節? 答案:只占了一個字節,因為32位機是4字節為一個“單元”,一個 char 只占用了其中1字節(類似結構體占用空間大小,這里還牽涉到大小端對齊模式)。 再舉一個例子:定義4個 char型變量,還是占用4字節空間(short原理一樣)再次提示:

注意4字節為一個“單元”,超過這個單元就分配到“下一個單元”,比如:

char a;int b;char c;

這里就會占用12(3 * 4)字節空間(a、b、c各自占4字節)。

2.short占2字節

定義變量:

short a;

編譯結果:

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

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

定義變量:

int a;

編譯結果:

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

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

定義變量:

float a;

編譯結果:

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

5.double占8字節

定義變量:

double a;

編譯結果:

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

總結

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

  • short、int:占2字節

  • float、double:占4字節

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

  • short:占2字節

  • int、float:占4字節

  • double:占8字節

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

    關注

    6043

    文章

    44621

    瀏覽量

    638583
  • keil
    +關注

    關注

    69

    文章

    1214

    瀏覽量

    167284

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

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

收藏 人收藏

    評論

    相關推薦

    單片機Debug工具性能對比 單片機調試常用命令

    。以下是對單片機調試工具性能的簡要對比以及一些常用的調試命令。 單片機Debug工具性能對比 Keil uVision 性能 :Keil uVision 是一款功能強大的集成開發環境(
    的頭像 發表于 12-19 09:56 ?478次閱讀

    32位電機驅動單片機ZH521X產品概述

    ZH521X系列類單片機是一款低功耗,高性能,資源豐富,M0內核的電機控制專用單片機。集成32k字節代碼存儲器EFLASH、4k字節SRAM。
    的頭像 發表于 11-25 14:49 ?429次閱讀
    32位電機驅動<b class='flag-5'>單片機</b>ZH521X產品概述

    【藍橋杯單片機】第二章 開發環境與工具的安裝

    本章介紹單片機設計與開發項目的開發環境與工具。以下是所需要安裝的軟件以及附加的強力卸載軟件:下面跟著教程進行開發環境的配置與安裝:第一節keil5安裝該步驟為下載keil5官方安裝包
    的頭像 發表于 10-30 08:00 ?571次閱讀
    【藍橋杯<b class='flag-5'>單片機</b>】第二章 開發環境與工具的安裝

    基于51單片機的手動數字時鐘

    具體實現功能由51單片機+8位共陰數碼管+獨立按鍵構成。具體功能:(1)利用數碼管顯示時分秒,顯示格式為“時-分-秒”;(2)利用6個按鍵控制時、分、秒,設定好后自動開始時鐘顯示;(3)設置秒復位
    的頭像 發表于 10-22 14:12 ?300次閱讀
    基于51<b class='flag-5'>單片機</b>的手動數字時鐘

    單片機怎么寫入程序

    程序通常涉及以下幾個步驟: 選擇單片機和開發環境 : 確定項目需求,選擇合適的單片機型號。 安裝相應的開發環境,如Keil、IAR、MPLAB等。 硬件連接 : 將單片機連接到開發板或
    的頭像 發表于 10-21 11:21 ?934次閱讀

    如何將hex文件燒錄進單片機

    :確保你的計算機上安裝了適用于你單片機型號的開發環境,如Keil、IAR Embedded Workbench等。以Keil為例,你需要從Keil官網下載并安裝適合你
    的頭像 發表于 09-02 10:34 ?2571次閱讀

    keil可以讀出單片機的程序嗎

    Keil是一款廣泛應用于單片機程序開發的軟件,它提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調試器等在內的完整開發方案。然而,關于Keil是否能直接“讀出”單片機的程
    的頭像 發表于 09-02 10:32 ?1248次閱讀

    keil軟件怎么運行寫好的程序

    Keil軟件是一款功能強大的嵌入式開發工具,廣泛應用于單片機、ARM、DSP等嵌入式系統的開發。本文將介紹如何使用Keil軟件運行寫好的程序。 安裝Keil軟件 首先,需要從
    的頭像 發表于 09-02 10:29 ?2379次閱讀

    如何提高單片機的運算效率之FPU

    只要STM32或者其他32位單片機,自帶FPU功能,就可以加速float類型數據的加減乘除運算。在STM32中要啟用FPU,需要啟動滿足兩個宏:(__FPU_PRESENT==1)&&
    的頭像 發表于 08-30 11:47 ?778次閱讀
    如何提高<b class='flag-5'>單片機</b>的運算效率之FPU

    Keil變量不被初始化方法

    有些時候在我們的應用過程中要求變量有連續性,或者現場保留,例如Bootloader跳轉,某種原因的復位過程中我們有些關鍵變量不能被初始化,在不同的編譯環境下有不同的設置,本文就這個操作做總結,分別
    的頭像 發表于 08-30 11:47 ?816次閱讀
    <b class='flag-5'>Keil</b>中<b class='flag-5'>變量</b>不被初始化方法

    何用keil單片機燒錄程序

    以下是詳細的步驟: 安裝Keil軟件 : 首先,您需要從Keil官網下載適合您單片機型號的MDK-ARM軟件。 安裝過程中,請按照提示操作,選擇適合您的開發板和單片機型號。 創建新項目
    的頭像 發表于 08-22 09:28 ?4004次閱讀

    51單片機燒錄軟件怎么用

    準備工作 確保您已經安裝了51單片機燒錄軟件,如Keil、IAR等。 準備好51單片機開發板和燒錄器,如STC-ISP等。 確保您的計算機已經安裝了相應的驅動程序。 安裝燒錄軟件 從官方網站或可
    的頭像 發表于 08-22 09:26 ?1499次閱讀

    keil 斷點 執行次數設置后,出現非法變量的錯誤

    keil 斷點 執行次數設置后,出現非法變量的錯誤。希望大家幫幫忙。
    發表于 06-02 19:25

    PY32系列單片機開發板 常用型號都有 支持Keil,IAR進行開發

    、IOT、傳感器、電動工具、電機控制等領域。 PY32系列單片機與大部份國產通用型MCU一樣,支持Keil,IAR進行開發。芯嶺技術提供目前PY32系列主流單片機開發板和PY32 link仿真工具,目前有PY32F002A/00
    的頭像 發表于 05-22 14:48 ?1248次閱讀
    PY32系列<b class='flag-5'>單片機</b>開發板 常用型號都有 支持<b class='flag-5'>Keil</b>,IAR進行開發

    何用IAR軟件把程序下載到stm8s單片機里?

    各位大神,如何用IAR軟件把程序下載到stm8s單片機里,把步驟說的詳細一點
    發表于 05-15 07:18
    主站蜘蛛池模板: 国产高清一区二区三区 | 很狠操| 在线观看免费黄视频 | 韩国三级hd中文字幕 | 亚洲美女激情视频 | 天天襙| 与子乱刺激对白在线播放 | 1024国产基地永久免费 | 午夜在线视频国产 | 精品国产香港三级 | 久久99免费 | 国产夜夜操 | 天天爽夜夜爽人人爽免费 | 在线观看你懂的网址 | 99热久 | 免费观看黄a一级视频日本 免费观看黄色网页 | 久久天天躁狠狠躁夜夜爽 | 99久久亚洲国产高清观看 | 亚洲色图综合网 | 欧美成人高清性色生活 | 五月激情久久 | 久久精品国产亚洲婷婷 | 欧美成人免费观看bbb | 中文4480yy私人免费影院 | 400部大量精品情侣网站 | 免费黄色欧美 | 三级精品在线观看 | 黄色录像视频网站 | 亚洲国产婷婷香蕉久久久久久 | 成年女人色费视频免费 | 狠狠色噜噜狠狠狠狠2021天天 | 欧美综合成人网 | 天天插天天干天天操 | 免费大片黄国产在线观看 | 激情都市亚洲 | 久久人人澡 | 在线视频 亚洲 | 久久婷五月综合 | 国产一区中文字幕在线观看 | 亚洲一级毛片中文字幕 | 特级免费毛片 |