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

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

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

3天內不再提示

單片機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所占內存的大小,并返回給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呢?

這個里面就涉及到了結構體對齊,所有的成員在分配內存時都要與所有成員中占內存最多的基本數(shù)據(jù)類型所占內存空間的字節(jié)數(shù)對齊。假如這個字節(jié)數(shù)為N,那么對齊的原則是:理論上所有成員在分配內存時都是緊接在前一個變量后面依次填充的,但是如果是“以 N 對齊”為原則,那么,如果一行中剩下的空間不足以填充某成員變量時,即剩下的空間小于某成員變量的數(shù)據(jù)類型所占的字節(jié)數(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ù)據(jù)類型的時候,成員變量的排放一定要注意順序,遵守排放原則,否則就會白白浪費你的空間,掌握好排放原理,能大大提高你的空間利用率。比如我們構造如圖5的結構體類型,它依然還是占8個字節(jié)。

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

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

圖6

責任編輯:haq

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

    關注

    6077

    文章

    45509

    瀏覽量

    671259
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1399

    瀏覽量

    120708
  • 代碼
    +關注

    關注

    30

    文章

    4971

    瀏覽量

    74061

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    單片機中有FLASH為啥還需要EEROM?

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

    單片機里的程序運行方式

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

    學習單片機快速方法

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

    這幾個單片機技巧如果不了解,真的很難再進階

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

    單片機堆棧解析

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

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

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

    請問單片機RAM空間不夠用了怎么辦?

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

    第1章 如何學習單片機

    路在何方;也因為作者摸過燒紅的鐵塊,燙了手,所以也可以告訴讀者教訓和代價是什么。希望各位都能站在作者的肩膀上,看得更遠! 1.1學什么類型的單片機 單片機的型號那么多,如何選取一款合適的進行學習?如果沒有任何
    的頭像 發(fā)表于 10-10 10:32 ?550次閱讀

    單片機原理及應用詳解

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

    什么單片機比較耐用

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

    單片機的儲存優(yōu)點是什么

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

    怎么測單片機系統(tǒng)頻率

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

    單片機怎么驅動電機?

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

    單片機怎么燒程序

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

    單片機科普總結,建議收藏!

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