返回首页  设为首页  加入收藏  今天是:
网站首页电脑主板电脑cpu电脑内存电脑硬盘电脑显卡电脑电源显示器电脑配件电脑维修
相关文章
 stm32的const数据位于Flash上…
 游戏崩溃不要慌可以试试这些…
 极米A3 Pro全色激光电视上线…
 性价比逆天!DDR4 3600MHz台…
 一、主板详细布局一览
 小恩教大家认识电脑主板 科技
 电脑硬件主板有哪些问题和解…
 电脑出现报警声是怎么回事?…
 常见的PC开机故障报警声
 4090显卡是台积电还是三星代…
 用拆分来止损?
 ZOL科技早餐:荣耀80GT、红魔…
 现在配电脑重点是显卡而不是…
 年末大促好时机盘点值得入手…
 300元500W电源横评:27%虚标…
 谁最配RTX 3080?750W电源横…
 4090需要多少w电源 4090显卡…
 4090需要多少w电源 4090显卡…
 最新显卡天梯图2022 有送供电…
 硬盘数据怎么恢复?推荐几种…
 机构:受PC客户端固态硬盘成…
 微星推出SPATIUM M461M45351…
 袖珍的PSSD秒传2000MB——小…
 移动固态硬盘 梵想P105PRO 3…
 华硕电脑售后维修服务网点怎…
 今日热词
 贵州华硕手机维修
 华硕笔记本电脑维修全国各地…
 华硕维修网点(华硕维修点地址…
 显卡批发厂家黄页
 工厂批发 GT450电脑显卡批发
 显卡进货技巧(卖显卡的都从哪…
 主板显卡批发厂家黄页
 显卡批发价格-显卡批发价格、…
 【更新啦】[2022年618手把手…
 GoBigger156英寸分屏便携显示…
 网吧电脑显示器32寸价格-最新…
 电脑液晶屏超薄
 闪蛇4K便携式显示器PS5XBOX笔…
 笔记本CPU升级知识大全
 i5 12400F
 联想笔记本电脑的CPU怎么对它…
 聊聊“高性能轻薄本”的开创…
 R76800H和1240p
 Kingmax推出Horizon系列DDR5…
 5MHz处理器+128MB内存:成功…
 金邦发布DDR5-8000内存套装将…
 页面崩溃了!记录一次测试中…
 vivo X90最高存储空间多大 最…
 联想电脑售后维修服务|联想…
专题栏目
网络
您现在的位置: 电脑评测网 >> 电脑内存 >> 正文
高级搜索
stm32的const数据位于Flash上Flash会比RAM大很多倍
作者:佚名 文章来源:本站原创 点击数: 更新时间:2022/12/28 2:46:44 | 【字体:

  重生之女装正太txt///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛///

  大家都知道进行单片机编程和计算机编程有个最大的差别就是单片机的资源非常的有限,并且对于大部分低端单片机而言都没有操作系统。除了一些嵌入式级的芯片用了Linux系统外,其他大部分操作都是比较简单的RTOS,可能还有一些简单的应用或者芯片根本不用系统,直接是裸机程序。

  不过,大局部单片机编程都与硬件密切的联合,这样工程师能够对当前的项目对象有更多的把控才能和了解才能。但是由于它的简略,我们平时在工作中往往须要控制一个项目标老本,对于单片机的选型和资源的评估都是非常谨慎;同样随着我们项目功能的不断扩展,也会让系统程序逐步变得庞大,这时候资源的使用就更须要节约点用了。

  所以当资源受限制(一般的单片机RAM也就Kb级别),假如说单片机RAM不够了,即便你有再牛的算法可能也没法加入到项目中来,那么有些同志们会问,那换芯片不就能够了吗?我只想说这位同志你想多了,对于不怎么热卖产品或者不规范的公司可能还允许你试一试,可是一般的公司项目卡着走的,换了主控芯片,暂且不说软件上的移植工作,换了芯片老本上必定增加,产品的测试都得重新布局,老板领导可不愿意了。

  那么主控芯片换不了我们还有什么办法呢?那我们应该从原本的程序中挤出资源来使用了,下面我总结了几种常总方法供大家参照。

  union-共联体,是C语言常用得关键字。从字面上的意思就是共有联合在一起的意思,union所有的成员共有维护一段能够内存空间,其内存的大小取决于所有成员中占用空间最大的成员。

  union构造体由于是共用同一片内存能够大大节省内存空间,那一般什么情况下使用union?又或者union还有什么特点?下面我将用几点为大家解答。

  2)union的存储模型受大小端的影响,我们能够通过下面的代码进行测试。(假如输出结果为1,表示小端模式,否则为大端模式)

  大端模式(Big_endian):一个数据的高字节存储在低地址,低字节存储在高地址。其指针指向的首地址位于低地址。小端模式(Little_endian):一个数据的高字节存储在高地址,低字节存储在低地址。其指针指向的首地址位于高地址。

  3)union不同于构造体struct,union对成员的变更可能会影响到其他成员变量,所以我们要构成一种互斥使用,假如说我们的顺序执行其实就是每个代码都是互斥的,所以我们能够用union进行函数处理缓存等。(个人觉得也能够认为是分时复用,并且是不会受内存初值影响的处理)

  位域可能对于初学者用得比较少,不过对于大局部参加工作的工程师应该屡见不鲜了,的确它也是我们省内存的神器。

  由于在我们平时编程过程中,我们使用的变量与实际情况是息息相关的,就假如说开关的状态,我们一般就是0或者是1分别表示翻开和关闭,那么我们用一个bit就能表示,假设说我们用一个char来存储就简直浪费了7个bit,假如以后也有类似的的情况,那么大局部内存都得不到有效的应用。所以C语言的位域就是用来攻克这个问题。

  1)位域是在构造体中实现的,其中位域规定的长度不能超过所定义类型,且一个位域只能定义在同一个存储单元中。

  3)由于位域与数据类型有关系,那么他的内存占用情况也与平台的位数相关。(相关内容可网络查找)

  构造体对齐问题可能大局部人关注的不是很多,可能在通讯领域进行内存的copy时候接触得比较多。构造体对齐问题也是与平台相关,CPU为了提高访问内存的效率,一次性可能读取2个字节,4个字节,8个字节等,所以编译器会自动对构造体内存进行对齐。

  算法优化其实主要是我们通过修改一些算法的实现一种效率与内存使用的一个均衡,我们都知道我们的算法都存在着复杂度的问题,我们大局部高效率的算法都是通过使用内存来换效率,也就是一种用空间换时长的概念。那么当我们内存使用有限的时候我们能够适当的用时长来换空间的方法,腾出更多的空间来实现更多的功能。

  同样,我们在进行相关设计的时候能够尽量使用局部变量来减少全局变量的使用!

  关于const的用法应该是老生常谈的知识点了,假如还有不是特别清楚的小搭档能够参照一文搞定C语言const关键字一文,bug菌就不反复造轮子了,直接以stm32单片机为例看看const变量的的存储方式。

  ?对于stm32的所有存储映像都在对应工程所编译生成的.map文件中,对.map文件(其文件在工程目录中)的熟悉度就在一定程度上彰显你对stm32单片机的熟练程度。

  ?程序编译成功以后,就能够直接在map文件中查找const修饰的数组名。

  ?从上面我们了解到其stDevParam变量位置0x080016b8数据区且位于(tdata段--只读数据段)并占用了36个字节,与我们串口输出结果是相合乎的。

  通过上面的测试程序显示了const数据的存储位置,那么我们看一下该位置位于stm32的哪块存储区域,是RAM还是FLASH?

  由于我们节省内存主要就是通过占用更小的RAM来实现相同的项目需求,那么对于MCU而言最好就是的借助Flash,通过时长来置换空间,拿出对应的数据手册看看这些存储范围是如何分配的。

  很明显前一节测试的const stDevParam变量位置0x080016b8处,正益处于FLASH存储位置,所以其并没有占用RAM资源。

  很多写单片机程序的小搭档都喜爱把一些只读的变量用全局变量来保存,然而这些变量根本上只保存一些参数,这对于单片机的RAM资源是非常浪费的。

  bug菌曾经接手过一个前同事项目,怎么说呢?可能这个项目他也是接手别人的,该项目MCU还外部扩展了一个16M的SDRAM,大家都觉得反正RAM大,变量随便定,也不去管数据范围,动不动就float,double,真的是牛。

  直到bug菌接手内存占用率已高达95%,后面稍微添加一些需求感觉RAM就要爆掉了,没办法这样下去究竟会出问题,于是申请了代码重构,通过优化代码构造、设计等RAM占用率直接降到了50%左右,能够想象一下之前的开发人员是多么的任性。

  所以,一句话说得好前人栽树,后人乘凉;前人挖坑,后人入fen。前面我们分析了stm32的const数据位于Flash上,一般Flash都会比RAM大上好几倍。

  这样对于一些预先设置好的参数等等都能够整理以后统一放到类似于前面demo中这样的构造体数组中,从而能够大大减少对RAM的占用。

  注意一点的是 :访问RAM一般来说会比访问Flash要快一些,然而大局部项目对于

电脑内存录入:admin    责任编辑:admin 
  • 上一个电脑内存:

  • 下一个电脑内存: 没有了
  •  
     栏目文章
    普通电脑内存 stm32的const数据位于Flash上Flash会比RAM大很… (12-28)
    普通电脑内存 游戏崩溃不要慌可以试试这些方法! (12-28)
    普通电脑内存 极米A3 Pro全色激光电视上线亮度内存大升级 (12-28)
    普通电脑内存 性价比逆天!DDR4 3600MHz台式机内存条8GB仅需… (12-28)
    普通电脑内存 Kingmax推出Horizon系列DDR5内存:最高至6000… (12-27)
    普通电脑内存 5MHz处理器+128MB内存:成功运行Win7旗舰版 (12-27)
    普通电脑内存 金邦发布DDR5-8000内存套装将于明年第一季度上… (12-27)
    普通电脑内存 页面崩溃了!记录一次测试中出现的前端内存溢… (12-27)
    普通电脑内存 vivo X90最高存储空间多大 最大内存是多少? (12-27)
    普通电脑内存 电脑内存容量指什么 (12-27)
    普通电脑内存 什么是电脑内存 好不好把内存空出来啊啊 (12-27)
    普通电脑内存 电脑内存条有哪些作用 电脑内存有什么用【详细… (12-27)
    普通电脑内存 电脑中的内存是什么意思? (12-27)
    普通电脑内存 电脑的安装内存是什么? (12-27)
    普通电脑内存 微软Edge浏览器神优化:28天内帮玩家节省27亿… (12-27)
    普通电脑内存 iPhone系统无故占用几十G存教你如何快速清理-… (12-27)
    普通电脑内存 手机删除软件垃圾仍然占用很大内存教你一招这… (12-27)
    普通电脑内存 苹果承认M1芯片翻车:一天死机10多次 内存BUG (12-27)
    普通电脑内存 雷军英语很差?当真你就输了只能说他是运营高… (12-27)
    普通电脑内存 iPhone12运存容量确定!有惊喜有遗憾! (12-26)