91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

GReq_mcu168 ? 來(lái)源:?jiǎn)纹瑱C(jī)匠人 ? 作者:蔡琰老師 ? 2021-11-19 09:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

當(dāng)我們寫(xiě)代碼的時(shí)候,會(huì)用到很多變量,如果隨意的定義變量,比如寫(xiě)了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)體變量,在寫(xiě)or看代碼的時(shí)候,只要看到這個(gè)結(jié)構(gòu)體,就能大致的知道其實(shí)現(xiàn)功能,這樣看起來(lái)就神清氣爽了,可讀性大大提高。

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

在看下面的圖之前,我們說(shuō)一個(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ù)類型的成員可是不大一樣的,我們來(lái)看第一個(gè)Test,這個(gè)數(shù)據(jù)類型總共占4+4=8個(gè)字節(jié),這個(gè)很好理解,那第二個(gè)Test1,占空間大小按道理來(lái)說(shuō)應(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

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

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

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

圖6

責(zé)任編輯:haq

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

    關(guān)注

    6077

    文章

    45510

    瀏覽量

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

    關(guān)注

    8

    文章

    1399

    瀏覽量

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

    關(guān)注

    30

    文章

    4971

    瀏覽量

    74069

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    單片機(jī)中有FLASH為啥還需要EEROM?

    單片機(jī)里明明有FLASH,為啥還要再塞個(gè)EEPROM?不少剛接觸嵌入式的小伙伴估計(jì)都有過(guò)這樣的疑惑:FLASH能存程序,容量大,讀取又快,干嘛還要加個(gè)讀寫(xiě)慢、容量小的EEPROM?這不是多此一舉嘛。其實(shí),這倆兄弟各有所長(zhǎng),分工明確,就像你電腦里的固態(tài)硬盤(pán)和內(nèi)存條,誰(shuí)也替不
    的頭像 發(fā)表于 03-05 13:39 ?109次閱讀
    <b class='flag-5'>單片機(jī)</b>中有FLASH為啥還需要EEROM?

    單片機(jī)里的程序運(yùn)行方式

    我們想要理解單片機(jī)是如何運(yùn)行程序的,我們首先需要了解單片機(jī)的組成,我們這里以80C51單片機(jī)為例來(lái)理解程序在單片機(jī)中是如何運(yùn)行的。 單片機(jī)
    發(fā)表于 01-16 06:57

    學(xué)習(xí)單片機(jī)快速方法

    使用開(kāi)發(fā)軟件,比如KEIL。建議大家用C言語(yǔ)編程,匯編語(yǔ)言有時(shí)間可以學(xué)習(xí)一下。 畢竟C語(yǔ)言一目了然,移植性較好。雖然匯編效率高,但是難懂。況且現(xiàn)在單片機(jī)集成度越來(lái)越高,不必要那么高效率的代碼。你想想,花
    發(fā)表于 01-14 07:42

    這幾個(gè)單片機(jī)技巧如果不了解,真的很難再進(jìn)階

    功能模塊的操作上。所以如果對(duì)這些特性不了解,那么調(diào)試起來(lái)問(wèn)題就會(huì)很多,反而導(dǎo)致執(zhí)行效率低于匯編語(yǔ)言。如何解決單片機(jī)的抗干擾性問(wèn)題? 防止干擾最有效的方法是去除干擾源、隔斷干擾路徑,但往往很難做到,所以只能看單片機(jī)
    發(fā)表于 01-05 07:22

    單片機(jī)堆棧解析

    什么是單片機(jī)堆棧? 在片內(nèi)RAM中,常常要指定一個(gè)專門的區(qū)域來(lái)存放某些特別的數(shù)據(jù),它遵循順序存取和后進(jìn)先出(LIFO/FILO)的原則,這個(gè)RAM區(qū)叫堆棧。 它的作用 子程序調(diào)用和中斷服務(wù)時(shí)CPU
    發(fā)表于 12-09 06:52

    單片機(jī)程序的執(zhí)行

    單片機(jī)RAM對(duì)應(yīng)于DDR RAM,那Flash是不是就對(duì)應(yīng)于硬盤(pán)了呢?在CSAPP上明白了,PC上之所以都在DDR RAM上,是速度的因素。 硬盤(pán)的速度太慢,即使是即將到來(lái)的SS
    發(fā)表于 12-04 06:20

    請(qǐng)問(wèn)單片機(jī)RAM空間不夠用了怎么辦?

    單片機(jī)RAM空間不夠用了怎么辦?
    發(fā)表于 11-25 08:09

    第1章 如何學(xué)習(xí)單片機(jī)

    路在何方;也因?yàn)樽髡呙^(guò)燒紅的鐵塊,燙了手,所以也可以告訴讀者教訓(xùn)和代價(jià)是什么。希望各位都能站在作者的肩膀上,看得更遠(yuǎn)! 1.1學(xué)什么類型的單片機(jī) 單片機(jī)的型號(hào)那么多,如何選取一款合適的進(jìn)行學(xué)習(xí)?如果沒(méi)有任何
    的頭像 發(fā)表于 10-10 10:32 ?552次閱讀

    單片機(jī)原理及應(yīng)用詳解

    單片機(jī)(Microcontroller Unit, MCC) ?是一種集成計(jì)算機(jī)核心功能(CPU、存儲(chǔ)器、I/O接口等)的微型芯片,廣泛應(yīng)用于嵌入式系統(tǒng)中。以下是其原理及應(yīng)用的詳細(xì)介紹: 一、單片機(jī)
    的頭像 發(fā)表于 08-11 13:57 ?2415次閱讀

    什么單片機(jī)比較耐用

    ? ? ? ? 在工業(yè)控制、戶外設(shè)備、醫(yī)療儀器等場(chǎng)景中,單片機(jī)的耐用性直接決定了設(shè)備的穩(wěn)定運(yùn)行與維護(hù)成本。耐用的單片機(jī)通常具備寬溫工作范圍、強(qiáng)抗干擾能力、穩(wěn)定的電源適應(yīng)性和長(zhǎng)壽命的硬件設(shè)計(jì)。深圳市安
    的頭像 發(fā)表于 07-31 13:48 ?805次閱讀

    單片機(jī)的儲(chǔ)存優(yōu)點(diǎn)是什么

    場(chǎng)景。深圳市安凱星科技有限公司在單片機(jī)應(yīng)用開(kāi)發(fā)中,充分利用這些儲(chǔ)存優(yōu)點(diǎn),為拓邦、朗科、安徽龍多等客戶打造了高效穩(wěn)定的解決方案。 1.集成度高,節(jié)省硬件空間 單片機(jī)將程序存儲(chǔ)器(ROM)、數(shù)據(jù)存儲(chǔ)器(RAM)與 CPU、I/O 接
    的頭像 發(fā)表于 07-31 10:09 ?718次閱讀

    怎么測(cè)單片機(jī)系統(tǒng)頻率

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

    單片機(jī)怎么驅(qū)動(dòng)電機(jī)?

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

    單片機(jī)怎么燒程序

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

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

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