吴忠躺衫网络科技有限公司

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

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

3天內不再提示

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

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

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

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

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

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

圖1

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

圖2

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

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

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

圖3

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

圖4

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

圖5

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

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

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

圖6

責任編輯:haq

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

    關注

    6043

    文章

    44621

    瀏覽量

    638628
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1369

    瀏覽量

    115028
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69063

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

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

收藏 人收藏

    評論

    相關推薦

    單片機怎么寫入程序

    單片機(Microcontroller Unit,MCU)是一種集成電路芯片,它將計算機的CPU、存儲器、輸入/輸出接口等功能集成在一個芯片上。單片機廣泛應用于嵌入式系統和物聯網設備中。編寫單片機
    的頭像 發表于 10-21 11:21 ?938次閱讀

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

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

    單片機的中斷機制

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

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

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

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

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

    單片機燒錄程序的基本步驟是什么

    單片機燒錄程序是單片機開發過程中非常重要的一步,它涉及到將編寫好的程序代碼通過一定的方式傳輸到單片機內部的存儲器中,使單片機能夠按照預定的邏輯執行任務。 一、硬件準備
    的頭像 發表于 09-02 09:47 ?1441次閱讀

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

    計算等多個領域。即使目前你還不了解它的應用,你應該也聽過虛擬的大名。那么虛擬到底是什么?虛擬真的
    的頭像 發表于 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>好用嗎?

    UCGUI單片機源碼

    UCGUI單片機源碼
    發表于 07-04 17:11 ?1次下載

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

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

    數字電路仿真軟件單片機怎么用

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

    單片機開發好學嗎?學習中有哪些樂趣與挑戰?

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

    如何系統、科學地自學單片機

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

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

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

    單片機定時器與單片機計數器分析

     從一個生活中的例程看起:一個水盆在水龍頭下,水龍沒關緊,水一滴滴地滴入盆中。水滴持續落下,盆的容量是有限的,過一段時間之后,水就會逐漸變滿。錄音機上的計數器多只計到999…。那么單片機中計數器有多大的容量呢?8031單片機中有
    發表于 02-15 16:24 ?601次閱讀

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

    單片機除具有計算機基本邏輯與數據處理功能之外,還自帶RAM、ROM、I/O口以及定時器等外設,并由芯片制造商提供完備的軟件和硬件開發工具及文檔支持,極大地方便了工程師們的開發工作。此外,單片機在實時光運行過程中,能夠通過程序改變
    發表于 02-15 15:04 ?698次閱讀
    威尼斯人娱乐场 澳门| 百家乐反缆公式| 百家乐庄闲的几率| 二八杠技巧| 甘德县| 澳门百家乐官网文章| 大三巴百家乐官网的玩法技巧和规则| E乐博百家乐现金网| 威尼斯人娱乐城会员开户| 皇冠开户网| 博彩网百家乐官网中和局| 怎么看百家乐官网走势| 黄金百家乐的玩法技巧和规则| bet365网址b365etbyty| 百家乐官网网上最好网站| G3百家乐官网的玩法技巧和规则 | 六合彩开码结果| 百家乐官网公式球打法| 百家乐官网下载| 大发888娱乐官方下载| 牙克石市| 百家乐官网开户过的路纸| 百家乐博弈指| 久盛娱乐城| 百家乐官网的各种打法| 百家乐出老千视频| 3D乐财网| 乐天堂百家乐官网娱乐| 金盾百家乐网址| 金道博彩| 柬埔寨百家乐官网的玩法技巧和规则 | 大发888官方下载安装| 百家乐官网赢钱心得| 百家乐机器昀程序| 大发888 备用6222.com| 澳门百家乐官网| 百家乐六亿财富| 郁南县| 百家乐游戏机在哪有| 博狗博彩网站,| 百家乐官网看图赢钱|