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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44554

    浏览量

    634681
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1368

    浏览量

    114647
  • 代码
    +关注

    关注

    30

    文章

    4780

    浏览量

    68527

原文标题:别再说你的单片机RAM不够用了,来看看这个吧...

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    51单片机的主要逻辑功能部件是什么

    部件的操作。它包括算术逻辑单元(ALU),用于执行算术和逻辑运算。 2. 存储器 程序存储器(ROM):用于存储程序代码,通常是不可更改的内存,如EPROM或闪存。 数据存储器(RAM):用于存储运行时数据,比如变量和临时数据。51单片机的内置
    的头像 发表于 10-18 12:49 394次阅读

    单片机的中断机制

    单片机的中断机制是一种重要的处理方式,它允许单片机在执行主程序的过程中,能够暂停当前任务,转而处理外部或内部紧急事件。这种机制极大地提高了系统的响应速度和处理能力,使得单片机在各种应用领域中得到广泛应用。以下是对
    的头像 发表于 10-17 18:03 620次阅读

    十天学会单片机可能吗?单片机入门需要多久?

    一下,单片机的入门其实并没有想象中那么难。对于那些有一定编程基础,尤其是有C语言基础的学习者来说,入门的过程可能仅需几天。例如,有人可能在三天内就掌握了单片机的基础
    的头像 发表于 09-05 08:00 1006次阅读
    十天学会<b class='flag-5'>单片机</b>可能吗?<b class='flag-5'>单片机</b>入门需要多久?

    单片机烧录程序的线比单片机上的少还能烧录吗

    的存储器通常分为两类:ROM(只读存储器)和RAM(随机存取存储器)。ROM用于存储程序代码,而RAM用于存储程序运行过程中的数据。烧录过程就是将程序代码写入ROM中。 单片机烧录方法 单片机
    的头像 发表于 09-02 09:54 482次阅读

    什么是虚拟?虚拟真的那么好用吗?

    计算等多个领域。即使目前你还不了解它的应用,你应该也听过虚拟的大名。那么虚拟到底是什么?虚拟真的
    的头像 发表于 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的微处理器。单芯片单片机的基础上再配置一些系统的主要外围电路,而形成的大规模集成电路称为系统LSI。
    发表于 04-28 15:11 442次阅读
    电器设备为何普遍采用<b class='flag-5'>单片机</b>?

    数字电路仿真软件单片机怎么用

    数字电路仿真软件是一种用于模拟和测试数字电路设计的工具。其中,单片机仿真软件是一种专门针对单片机进行仿真的工具。这种软件能够提供一个类似真实硬件环境的仿真平台,让用户在计算机上进行单片机
    的头像 发表于 04-21 10:28 1047次阅读

    单片机开发好学吗?学习中有哪些乐趣与挑战?

    一提到单片机学习大家都会觉得难学,事实真的是这样吗?今天就来探讨一些单片机学习的那点事儿。对于许多初学者来说,刚开始接触单片机编程可能会感到有些挑战,但同时也充满了乐趣和探索的机会。让
    的头像 发表于 03-28 08:04 1908次阅读
    <b class='flag-5'>单片机</b>开发好学吗?学习中有哪些乐趣与挑战?

    如何系统、科学地自学单片机

    很多初学者都会面临这个问题,我想学习单片机、我也想学好单片机、我也想系统地学习单片机,但是单片机涉及到的学科多且杂根本不是三天两天就能学完的,很多人都逃脱不了从入门到放弃的怪圈?
    的头像 发表于 03-28 08:03 1070次阅读
    如何系统、科学地自学<b class='flag-5'>单片机</b>?

    单片机是什么?单片机编程如何入门?

    单片机其实是一种很早的叫法了,最开始我们的前辈叫单板机或者叫单片机,因为那个时候单片机的处理能力还没有很强,现在我们所用的基本都是微型处理单元,也叫为控制器也称之为MCU
    的头像 发表于 03-28 08:03 1882次阅读
    <b class='flag-5'>单片机</b>是什么?<b class='flag-5'>单片机</b>编程如何入门?

    什么是单片机及其特性与应用领域

    单片机除具有计算机基本逻辑与数据处理功能之外,还自带RAM、ROM、I/O口以及定时器等外设,并由芯片制造商提供完备的软件和硬件开发工具及文档支持,极大地方便了工程师们的开发工作。此外,单片机在实时光运行过程中,能够通过程序改变
    发表于 02-15 15:04 600次阅读

    单片机的最小系统由什么组成 单片机的最小系统包括哪些

    单片机(Microcontroller Unit,MCU)的最小系统包括以下几个主要组成部分: 单片机芯片:单片机是整个最小系统的核心部分,它集成了中央处理器(Central Processing
    的头像 发表于 02-02 11:27 1.1w次阅读

    单片机RAM不够用怎么解决?

    来自一位用户的咨询,麻烦帮忙解答。越详细越好,有图有真相。如有相关的视频、文档也可以辅助说明,谢谢。 单片机RAM不够用怎么办? 单片机都有RAM,如果我们一下子定义了一大堆的变量,使
    发表于 02-02 07:35

    什么是单片机? 单片机由哪几个主要部分组成?

    )、存储器(ROM、RAM)、输入输出(I/O)接口等功能的微型计算机系统。相比于传统的多芯片电路设计,单片机具有体积小、成本低、功耗低等优势,因而在许多领域被广泛使用。 二、单片机的主要组成部分 中央处理器(CPU) 中央处理
    的头像 发表于 01-22 10:38 9172次阅读

    单片机原理及应用有哪些

    单片机(Microcontroller)是一种集成电路芯片,具备中央处理器(CPU)、存储器(RAM和ROM)、输入/输出(I/O)接口及定时/计数器等功能模块。它是嵌入式系统的核心组成部分,被
    的头像 发表于 01-15 16:25 1966次阅读