找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1236|回复: 8
打印 上一主题 下一主题
收起左侧

关于单片机动态内存管理

[复制链接]
跳转到指定楼层
楼主
ID:908826 发表于 2021-11-3 20:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下,对于现在这种高性能的单片机,动态内存管理是不是不那么重要了,或者说动态内存管理我是不是可以理解为精打细算使用内存空间???
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:624769 发表于 2021-11-3 20:29 | 只看该作者
动态内存管理,很大程度上,是为了提高运行效率,而不是内存够不够用。

拿51举例子,撇开A寄存器不谈,R0~R7的存取速度,和直接地址存取不是一个等级的,而直接地址存取和间接地址存取,又不是一个等级的,即使是间接地址存取,基本存储 MOV 访问的, 和扩展存储 MOVX访问的,又不是一个等级的。 所以,为了提高某部分的运行效率,动态的管理内存,把某些数据提前移动到直接地址,甚至R0~R7,这样的动态内存管理,还是有必要的。
回复

使用道具 举报

板凳
ID:883242 发表于 2021-11-3 20:50 | 只看该作者
你说反了,越是垃圾单片机越不能用动态管理,实际上单片机就别用动态管理。

在电脑手机App上面,退出进程内存碎片自然没有了,在没有OS可以退回去,7x24小时工作的单片机上面内存碎片问题是无解的。
回复

使用道具 举报

地板
ID:908826 发表于 2021-11-3 20:56 | 只看该作者
188610329 发表于 2021-11-3 20:29
动态内存管理,很大程度上,是为了提高运行效率,而不是内存够不够用。

拿51举例子,撇开A寄存器不谈,R ...

我是不是可以理解为把某些变量划分到直接寻址区,来提高运行效率
回复

使用道具 举报

5#
ID:624769 发表于 2021-11-3 21:10 | 只看该作者
13205495918 发表于 2021-11-3 20:56
我是不是可以理解为把某些变量划分到直接寻址区,来提高运行效率

是的,当你有计划的定义变量的时候可以这样,在条件允许的前提下,这样当然最好。不过这个就是固态内存管理了。
所谓动态管理,就是运行不同的模块的时候,把这部分模块相关变量移到基本存储区,用完后放回扩展存储区。把基本存储区再腾出来。供下一个模块使用。当各种模块需要高速运算,分配基本存储区地址存放变量,而基本存储区容量不够承担所有模块给固定存放空间时,需用到动态分配。
回复

使用道具 举报

6#
ID:908826 发表于 2021-11-3 21:42 | 只看该作者
188610329 发表于 2021-11-3 21:10
是的,当你有计划的定义变量的时候可以这样,在条件允许的前提下,这样当然最好。不过这个就是固态内存管 ...

非常感谢您的回答,嘿嘿
回复

使用道具 举报

7#
ID:624769 发表于 2021-11-3 22:44 | 只看该作者
13205495918 发表于 2021-11-3 21:42
非常感谢您的回答,嘿嘿

不谢,能帮到你就行。
顺便提一下,越是垃圾的单片机,当你基本存储空间不够分配的时候,要想提高效率,其实越需要动态内存管理,我们继续拿51举例。
用C的人可能感觉不到,其实扩展存储里变量,单片机是无法直接操作的。debug会发现,先要通过 MOVX A,@DPTR 读出来,然后存放到不同 寄存器,然后才开始操作,操作完了,还要再通过MOVX @DPTR, A 存回去。而这个过程,你需要把 累加器入栈,通用寄存器入栈,DPTR指针入栈,操作完了还要一个个的出栈。而动态分配了基本存储空间的话,对该模块操作时所有变量都在基本存储里的话,不管是与或操作,还是递增递减操作等等,都是不需要通过累加器,或通用寄存器,更不需要DPTR指针的腾位子的,效率的提高根本不是一个量级的。
回复

使用道具 举报

8#
ID:401564 发表于 2021-11-3 23:01 | 只看该作者
没有必要折腾那么多
你要了解是是单片机的硬件和工作方式,还有就是C语言本身,变量正确的使用方式就可以
至于堆栈,寻址方式,直接寻址区,CY,R0,R1...那是汇编的,虽说多了解一下是有好处的,但那是没有必要的,意义不大,你只要按照C语言指导的正确方式去编写代码就可以了,如果用C还去管那么多寻址方式,那还不如直接用汇编
在8051
C语言的变量没有特定声明的,编译器都会指定为动态存储,而且优先使用256字节的RAM,如果还不够用,编译器自动使用外部XDATA,不需要人为的去规划的,不要用汇编的思维去写C程序
一个不会汇编的人,只要C语言的功底到家,一样的可以写出好的程序出来
想提高运行效率,使用C语言中提供的方法就可以,但更好的是办法是直接用带硬件加法器或者乘法器单片机

如果你只学8051,视野可能就很小,你再去学的别的指令系统的单片机的话,你就会发现,8051这方面很多知识在别的单片机上是用不到的
回复

使用道具 举报

9#
ID:491577 发表于 2021-11-4 01:04 | 只看该作者
支持8楼的说法,单片机主要功能是:1、接收信号输入;2、输出信号控制设备;这些对速度的要求很低,毫秒级就可以,大部分应用都不需要考虑速度,真正需要考虑速度时单片机大部分都不能够胜任了,需要用到手机、电脑等更快的设备了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表