一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

單片機(jī)RAM真的像你想的那么“單純”嗎

GReq_mcu168 ? 來源:單片機(jī)匠人 ? 作者:蔡琰老師 ? 2021-11-19 09:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

圖1

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

圖2

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

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

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

圖3

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

圖4

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

圖5

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

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

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

圖6

責(zé)任編輯:haq

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

    關(guān)注

    6067

    文章

    44992

    瀏覽量

    650492
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1392

    瀏覽量

    117532
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70743

原文標(biāo)題:別再說你的單片機(jī)RAM不夠用了,來看看這個(gè)吧...

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    單片機(jī)科普總結(jié),建議收藏!

    單片機(jī)(MicrocontrollerUnit,MCU)作為嵌入式系統(tǒng)的核心之一,在現(xiàn)代電子產(chǎn)品中無處不在。從智能家居、汽車電子,到工業(yè)控制、醫(yī)療設(shè)備,單片機(jī)支撐著無數(shù)智能化應(yīng)用的發(fā)展。對(duì)于初學(xué)者
    的頭像 發(fā)表于 04-07 11:58 ?2063次閱讀
    <b class='flag-5'>單片機(jī)</b>科普總結(jié),建議收藏!

    單片機(jī)Debug工具性能對(duì)比 單片機(jī)調(diào)試常用命令

    單片機(jī)(Microcontroller Unit, MCU)調(diào)試是嵌入式開發(fā)中的一個(gè)重要環(huán)節(jié),它幫助開發(fā)者發(fā)現(xiàn)和修復(fù)代碼中的錯(cuò)誤,優(yōu)化程序性能。不同的單片機(jī)和開發(fā)環(huán)境可能使用不同的調(diào)試工具和命令
    的頭像 發(fā)表于 12-19 09:56 ?1419次閱讀

    如何優(yōu)化單片機(jī)項(xiàng)目的功耗

    在現(xiàn)代電子設(shè)計(jì)中,功耗優(yōu)化已成為一個(gè)不可忽視的重要議題。對(duì)于單片機(jī)(MCU)項(xiàng)目而言,功耗不僅關(guān)系到產(chǎn)品的能效比,還直接影響到電池壽命和熱管理。 硬件層面的功耗優(yōu)化 1. 選擇合適的單片機(jī) 選擇一個(gè)
    的頭像 發(fā)表于 11-01 14:16 ?1296次閱讀

    單片機(jī)編程語言有哪些選擇

    單片機(jī)(Microcontroller Unit,MCU)編程是指為單片機(jī)編寫程序的過程,這些程序控制單片機(jī)的行為和功能。單片機(jī)廣泛應(yīng)用于嵌入式系統(tǒng),如家用電器、汽車電子、工業(yè)控制等領(lǐng)
    的頭像 發(fā)表于 11-01 14:13 ?2427次閱讀

    單片機(jī)怎么寫入程序

    單片機(jī)(Microcontroller Unit,MCU)是一種集成電路芯片,它將計(jì)算機(jī)的CPU、存儲(chǔ)器、輸入/輸出接口等功能集成在一個(gè)芯片上。單片機(jī)廣泛應(yīng)用于嵌入式系統(tǒng)和物聯(lián)網(wǎng)設(shè)備中。編寫單片機(jī)
    的頭像 發(fā)表于 10-21 11:21 ?2439次閱讀

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

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

    單片機(jī)的中斷機(jī)制

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

    單片機(jī)出現(xiàn)故障怎么維修

    單片機(jī)出現(xiàn)故障時(shí),維修過程需要系統(tǒng)地檢查和診斷,以確定故障的根本原因,并采取相應(yīng)的修復(fù)措施。以下是一個(gè)詳細(xì)的單片機(jī)維修指南,旨在幫助技術(shù)人員或愛好者有效地解決單片機(jī)故障問題。
    的頭像 發(fā)表于 10-17 17:57 ?3652次閱讀

    十天學(xué)會(huì)單片機(jī)可能嗎?單片機(jī)入門需要多久?

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

    單片機(jī)燒錄程序用什么軟件

    單片機(jī)燒錄程序是單片機(jī)開發(fā)過程中的一個(gè)重要環(huán)節(jié),涉及到將編寫好的程序代碼通過燒錄器寫入單片機(jī)的ROM中,以實(shí)現(xiàn)對(duì)單片機(jī)的控制。 燒錄器的類型 燒錄器是用于將程序代碼寫入
    的頭像 發(fā)表于 09-02 10:05 ?3445次閱讀

    單片機(jī)燒錄程序的線比單片機(jī)上的少還能燒錄嗎

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

    單片機(jī)燒錄程序的基本步驟是什么

    單片機(jī)燒錄程序是單片機(jī)開發(fā)過程中非常重要的一步,它涉及到將編寫好的程序代碼通過一定的方式傳輸?shù)?b class='flag-5'>單片機(jī)內(nèi)部的存儲(chǔ)器中,使單片機(jī)能夠按照預(yù)定的邏輯執(zhí)行任務(wù)。 一、硬件準(zhǔn)備
    的頭像 發(fā)表于 09-02 09:47 ?2765次閱讀

    單片機(jī)引腳懸空是什么電平

    單片機(jī)引腳懸空是指單片機(jī)的I/O引腳在沒有連接任何外部電路的情況下,引腳的電平狀態(tài)。懸空引腳的電平狀態(tài)取決于單片機(jī)的內(nèi)部結(jié)構(gòu)和外部環(huán)境因素。 單片機(jī)引腳懸空的電平狀態(tài)
    的頭像 發(fā)表于 08-28 09:51 ?4850次閱讀

    國產(chǎn)單片機(jī)(MCU)崛起 —— 51系列

    一、51系列單片機(jī)的命名由來51系列單片機(jī)的命名由來與它的設(shè)計(jì)和開發(fā)歷史相關(guān)。這個(gè)系列的單片機(jī)主要由Intel的8051微控制器發(fā)展而來,后來被多個(gè)公司采用和改進(jìn),形成了一個(gè)廣泛使用的微控制器平臺(tái)
    的頭像 發(fā)表于 08-14 08:39 ?7544次閱讀
    國產(chǎn)<b class='flag-5'>單片機(jī)</b>(MCU)崛起 —— 51系列

    一文讀懂什么單片機(jī):組成結(jié)構(gòu)與應(yīng)用

    歡迎來到單片機(jī)的世界,這是一種微小(但功能強(qiáng)大)的設(shè)備,改變了嵌入式系統(tǒng)的面貌。在本文中,您將了解單片機(jī)的一些基本知識(shí)、單片機(jī)的結(jié)構(gòu)以及微處理器與單片機(jī)之間的一些區(qū)別。在深入
    的頭像 發(fā)表于 08-09 11:49 ?2407次閱讀
    一文讀懂什么<b class='flag-5'>單片機(jī)</b>:組成結(jié)構(gòu)與應(yīng)用