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

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

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

3天內(nèi)不再提示

單片機RAM真的像你想的那么“單純”嗎

GReq_mcu168 ? 來源:單片機匠人 ? 作者:蔡琰老師 ? 2021-11-19 09:47 ? 次閱讀

當我們寫代碼的時候,會用到很多變量,如果隨意的定義變量,比如寫了N多個“unsigned char/int X;”那么代碼可能會顯的很亂,自己拐回頭看的時候都暈掉了,那么這個時候我們可以構造一個復雜的數(shù)據(jù)類型-結構體類型,對代碼中出現(xiàn)的變量進行類別的劃分,用構造的結構體類型定義結構體變量,在寫or看代碼的時候,只要看到這個結構體,就能大致的知道其實現(xiàn)功能,這樣看起來就神清氣爽了,可讀性大大提高。

我們定義的結構體變量,如果沒有特殊規(guī)定的話是存儲在RAM中的,單片機的RAM資源是有限的,那這個結構體變量在RAM中占的空間大小就是我們需要關注一個問題了,它真的像你想的那么“單純”嗎?接下來我們一起來看看吧!

在看下面的圖之前,我們說一個前提,在STM32單片機這個32位系統(tǒng)中,signed/unsigned int 占4個字節(jié),signed/unsigned short int 占2個字節(jié) signed/unsigned char 占1個字節(jié),我們稱這些為基本數(shù)據(jù)類型。Size = Sizeof(Test);這個函數(shù)是求取這個結構體變量Test所占內(nèi)存的大小,并返回給Size。

5b924e68-43ac-11ec-b939-dac502259ad0.jpg

圖1

5be2b010-43ac-11ec-b939-dac502259ad0.jpg

圖2

請看上圖,我們使用基本數(shù)據(jù)類型構造了3個復雜的結構體數(shù)據(jù)類型,仔細看會發(fā)現(xiàn),這3個數(shù)據(jù)類型的成員可是不大一樣的,我們來看第一個Test,這個數(shù)據(jù)類型總共占4+4=8個字節(jié),這個很好理解,那第二個Test1,占空間大小按道理來說應該是1+4 = 5個字節(jié),但是為什么還是8呢,第三個Test2,占空間大小應該是1+1+4=8,為什么還是8呢?

這個里面就涉及到了結構體對齊,所有的成員在分配內(nèi)存時都要與所有成員中占內(nèi)存最多的基本數(shù)據(jù)類型所占內(nèi)存空間的字節(jié)數(shù)對齊。假如這個字節(jié)數(shù)為N,那么對齊的原則是:理論上所有成員在分配內(nèi)存時都是緊接在前一個變量后面依次填充的,但是如果是“以 N 對齊”為原則,那么,如果一行中剩下的空間不足以填充某成員變量時,即剩下的空間小于某成員變量的數(shù)據(jù)類型所占的字節(jié)數(shù),該成員變量在分配內(nèi)存時另起一行分配。如圖3,4:

5c8ed048-43ac-11ec-b939-dac502259ad0.jpg

圖3

5cde1ff4-43ac-11ec-b939-dac502259ad0.jpg

圖4

5d1a041a-43ac-11ec-b939-dac502259ad0.jpg

圖5

通過上面的實際測試,我們得出,在構造結構體復雜數(shù)據(jù)類型的時候,成員變量的排放一定要注意順序,遵守排放原則,否則就會白白浪費你的空間,掌握好排放原理,能大大提高你的空間利用率。比如我們構造如圖5的結構體類型,它依然還是占8個字節(jié)。

文末再給大家出個問題,大家看看下面我們構造的數(shù)據(jù)類型,它們分別占的空間是多大呢?

5df404da-43ac-11ec-b939-dac502259ad0.jpg

圖6

責任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6039

    文章

    44582

    瀏覽量

    636480
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1369

    瀏覽量

    114776
  • 代碼
    +關注

    關注

    30

    文章

    4803

    瀏覽量

    68750

原文標題:別再說你的單片機RAM不夠用了,來看看這個吧...

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    51單片機的主要邏輯功能部件是什么

    部件的操作。它包括算術邏輯單元(ALU),用于執(zhí)行算術和邏輯運算。 2. 存儲器 程序存儲器(ROM):用于存儲程序代碼,通常是不可更改的內(nèi)存,如EPROM或閃存。 數(shù)據(jù)存儲器(RAM):用于存儲運行時數(shù)據(jù),比如變量和臨時數(shù)據(jù)。51單片機的內(nèi)置
    的頭像 發(fā)表于 10-18 12:49 ?499次閱讀

    單片機的中斷機制

    單片機的中斷機制是一種重要的處理方式,它允許單片機在執(zhí)行主程序的過程中,能夠暫停當前任務,轉而處理外部或內(nèi)部緊急事件。這種機制極大地提高了系統(tǒng)的響應速度和處理能力,使得單片機在各種應用領域中得到廣泛應用。以下是對
    的頭像 發(fā)表于 10-17 18:03 ?822次閱讀

    十天學會單片機可能嗎?單片機入門需要多久?

    一下,單片機的入門其實并沒有想象中那么難。對于那些有一定編程基礎,尤其是有C語言基礎的學習者來說,入門的過程可能僅需幾天。例如,有人可能在三天內(nèi)就掌握了單片機的基礎
    的頭像 發(fā)表于 09-05 08:00 ?1157次閱讀
    十天學會<b class='flag-5'>單片機</b>可能嗎?<b class='flag-5'>單片機</b>入門需要多久?

    單片機燒錄程序的線比單片機上的少還能燒錄嗎

    的存儲器通常分為兩類:ROM(只讀存儲器)和RAM(隨機存取存儲器)。ROM用于存儲程序代碼,而RAM用于存儲程序運行過程中的數(shù)據(jù)。燒錄過程就是將程序代碼寫入ROM中。 單片機燒錄方法 單片機
    的頭像 發(fā)表于 09-02 09:54 ?535次閱讀

    什么是虛擬?虛擬真的那么好用嗎?

    計算等多個領域。即使目前你還不了解它的應用,你應該也聽過虛擬的大名。那么虛擬到底是什么?虛擬真的
    的頭像 發(fā)表于 07-06 08:05 ?463次閱讀
    什么是虛擬<b class='flag-5'>機</b>?虛擬<b class='flag-5'>機</b><b class='flag-5'>真的</b><b class='flag-5'>那么</b>好用嗎?

    電器設備為何普遍采用單片機

    單芯片單片機是指:將CPU,ROM,RAM,振蕩電路,定時器和串行I/F等集成于一個LSI的微處理器。單芯片單片機的基礎上再配置一些系統(tǒng)的主要外圍電路,而形成的大規(guī)模集成電路稱為系統(tǒng)LSI。
    發(fā)表于 04-28 15:11 ?464次閱讀
    電器設備為何普遍采用<b class='flag-5'>單片機</b>?

    數(shù)字電路仿真軟件單片機怎么用

    數(shù)字電路仿真軟件是一種用于模擬和測試數(shù)字電路設計的工具。其中,單片機仿真軟件是一種專門針對單片機進行仿真的工具。這種軟件能夠提供一個類似真實硬件環(huán)境的仿真平臺,讓用戶在計算機上進行單片機
    的頭像 發(fā)表于 04-21 10:28 ?1095次閱讀

    單片機開發(fā)好學嗎?學習中有哪些樂趣與挑戰(zhàn)?

    一提到單片機學習大家都會覺得難學,事實真的是這樣嗎?今天就來探討一些單片機學習的那點事兒。對于許多初學者來說,剛開始接觸單片機編程可能會感到有些挑戰(zhàn),但同時也充滿了樂趣和探索的機會。讓
    的頭像 發(fā)表于 03-28 08:04 ?2036次閱讀
    <b class='flag-5'>單片機</b>開發(fā)好學嗎?學習中有哪些樂趣與挑戰(zhàn)?

    如何系統(tǒng)、科學地自學單片機

    很多初學者都會面臨這個問題,我想學習單片機、我也想學好單片機、我也想系統(tǒng)地學習單片機,但是單片機涉及到的學科多且雜根本不是三天兩天就能學完的,很多人都逃脫不了從入門到放棄的怪圈?
    的頭像 發(fā)表于 03-28 08:03 ?1120次閱讀
    如何系統(tǒng)、科學地自學<b class='flag-5'>單片機</b>?

    單片機是什么?單片機編程如何入門?

    單片機其實是一種很早的叫法了,最開始我們的前輩叫單板機或者叫單片機,因為那個時候單片機的處理能力還沒有很強,現(xiàn)在我們所用的基本都是微型處理單元,也叫為控制器也稱之為MCU
    的頭像 發(fā)表于 03-28 08:03 ?1997次閱讀
    <b class='flag-5'>單片機</b>是什么?<b class='flag-5'>單片機</b>編程如何入門?

    什么是單片機及其特性與應用領域

    單片機除具有計算機基本邏輯與數(shù)據(jù)處理功能之外,還自帶RAM、ROM、I/O口以及定時器等外設,并由芯片制造商提供完備的軟件和硬件開發(fā)工具及文檔支持,極大地方便了工程師們的開發(fā)工作。此外,單片機在實時光運行過程中,能夠通過程序改變
    發(fā)表于 02-15 15:04 ?632次閱讀

    單片機的最小系統(tǒng)由什么組成 單片機的最小系統(tǒng)包括哪些

    單片機(Microcontroller Unit,MCU)的最小系統(tǒng)包括以下幾個主要組成部分: 單片機芯片:單片機是整個最小系統(tǒng)的核心部分,它集成了中央處理器(Central Processing
    的頭像 發(fā)表于 02-02 11:27 ?1.1w次閱讀

    單片機RAM不夠用怎么解決?

    來自一位用戶的咨詢,麻煩幫忙解答。越詳細越好,有圖有真相。如有相關的視頻、文檔也可以輔助說明,謝謝。 單片機RAM不夠用怎么辦? 單片機都有RAM,如果我們一下子定義了一大堆的變量,使
    發(fā)表于 02-02 07:35

    什么是單片機? 單片機由哪幾個主要部分組成?

    )、存儲器(ROM、RAM)、輸入輸出(I/O)接口等功能的微型計算機系統(tǒng)。相比于傳統(tǒng)的多芯片電路設計,單片機具有體積小、成本低、功耗低等優(yōu)勢,因而在許多領域被廣泛使用。 二、單片機的主要組成部分 中央處理器(CPU) 中央處理
    的頭像 發(fā)表于 01-22 10:38 ?9636次閱讀

    單片機原理及應用有哪些

    單片機(Microcontroller)是一種集成電路芯片,具備中央處理器(CPU)、存儲器(RAM和ROM)、輸入/輸出(I/O)接口及定時/計數(shù)器等功能模塊。它是嵌入式系統(tǒng)的核心組成部分,被
    的頭像 發(fā)表于 01-15 16:25 ?2018次閱讀
    主站蜘蛛池模板: 久久性生活| 亚洲成人在线网站| 91av视频在线| 日韩精品毛片| 色狠狠色综合久久8狠狠色| 婷婷欧美| 日韩三级免费看| 免费三级黄色| 好爽毛片一区二区三区四区| 国产精品热久久毛片| 一级不卡毛片免费| 日日干干| 亚洲人成在线精品不卡网| 91网站在线播放| www爽| 四虎影院2022| 老司机亚洲精品影院在线| 国产精品久久在线| 婷婷色激情| 噜啪啪| brazzers在线| 免费黄色成人| free性乌克兰高清videos| 老师你好大好白好紧好硬| 五月婷婷色| 久久综合97色综合网| 97大香伊在人人线色| 九九福利视频| 视频一二三区| 四虎影城库| 河南毛片| 色图插插插| 91免费视频网站| 性欧美在线| 精品伊人久久大线蕉色首页| 午夜在线观看免费视频| a级男女性高爱潮高清试| 妇女交性大片| 免费看一毛一级毛片视频| 夜操| www.xxx欧美|