搜索
bottom↓
回复: 37

请教芯片RAM能否用尽?

[复制链接]

出0入0汤圆

发表于 2022-8-12 11:05:30 | 显示全部楼层 |阅读模式
请教各位技术达人:芯片裸跑,能否把RAM用尽或剩几十字节?会不会像window内存耗尽,卡成狗。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出235入235汤圆

发表于 2022-8-12 11:08:36 | 显示全部楼层
我的理解是不会的,裸跑应该是编译的时候提前就分配好了,不想windows一样启动程序动态分配内存。

出0入0汤圆

发表于 2022-8-12 11:27:10 | 显示全部楼层
我现在越来越喜欢使用动态内存申请,不知道是不是不好的习惯

出0入4汤圆

发表于 2022-8-12 11:34:52 | 显示全部楼层
以前51的时候,才256,512字节,榨的干干净净。

出0入18汤圆

发表于 2022-8-12 11:35:51 | 显示全部楼层
huangguimina4 发表于 2022-8-12 11:27
我现在越来越喜欢使用动态内存申请,不知道是不是不好的习惯
(引用自3楼)

相当危险, 带安全认证的rtos都是用的静态内存分配

出0入224汤圆

发表于 2022-8-12 11:36:32 | 显示全部楼层
本帖最后由 yyts 于 2022-8-12 12:15 编辑

只要保证预留的堆栈空间的够用的,肯定可以用尽啊,不用尽留着也没人能用得到了。

出0入17汤圆

发表于 2022-8-12 11:40:45 来自手机 | 显示全部楼层
栈区留足,其他用尽没关系。

出0入91汤圆

发表于 2022-8-12 12:40:09 | 显示全部楼层
堆栈够用的情况下  压榨完也够用

出0入0汤圆

发表于 2022-8-12 15:41:25 | 显示全部楼层
本帖最后由 vuo50z 于 2022-8-12 15:44 编辑

win内存小就卡是因为,winy
不小心发出来了。。。

出0入0汤圆

发表于 2022-8-12 15:43:52 | 显示全部楼层
win内存小就卡是因为win用硬盘虚拟了内存,物理内存不够用时就会频繁的读写硬盘,所以卡。嵌入式系统不会卡,只有系统崩溃和不崩溃两种情况。

出0入16汤圆

发表于 2022-8-12 18:02:12 | 显示全部楼层
不会,堆栈配置上都已经留好了,只要不越界就没事,而且单片机的任务都是固定的,消耗都是定死的,Windows程序都是动态的,内存超出就会启用虚拟内存以及内存调度就会卡慢

出200入2554汤圆

发表于 2022-8-12 18:17:17 | 显示全部楼层
曾经用 M328 写过一个虚拟示波器,片上 2KB 内存全部用于 FIFO 缓存,没给堆栈留一个字节。

当然代价是:
① 需要重写 startup,
② 不能调用任何函数,全靠宏,
③ 不能使用任何库,全靠 C 模拟,
④ 不够用内存,全靠没用的片上设备寄存器来补
⑤ 编译结果需要手动确认,任何 CALL 指令都不能有

出0入25汤圆

发表于 2022-8-12 18:36:57 | 显示全部楼层
t3486784401 发表于 2022-8-12 18:17
曾经用 M328 写过一个虚拟示波器,片上 2KB 内存全部用于 FIFO 缓存,没给堆栈留一个字节。

当然代价是:
(引用自12楼)

你这也太强了。。。 有这个时间,不如换个大片子啊

出0入131汤圆

发表于 2022-8-12 20:35:08 | 显示全部楼层
t3486784401 发表于 2022-8-12 18:17
曾经用 M328 写过一个虚拟示波器,片上 2KB 内存全部用于 FIFO 缓存,没给堆栈留一个字节。

当然代价是:
(引用自12楼)

对啊  那你为啥不换一个大容量的芯片

出0入4汤圆

发表于 2022-8-12 21:47:12 来自手机 | 显示全部楼层
t3486784401 发表于 2022-8-12 18:17
曾经用 M328 写过一个虚拟示波器,片上 2KB 内存全部用于 FIFO 缓存,没给堆栈留一个字节。

当然代价是:

(引用自12楼)

用汇编写的吧

出200入2554汤圆

发表于 2022-8-12 21:51:52 | 显示全部楼层
rei1984 发表于 2022-8-12 18:36
你这也太强了。。。 有这个时间,不如换个大片子啊
(引用自13楼)

因为 M328 的硬件比较多,尤其是 Arduino UNO

不过这个是适配 7.3728M 主频的,有空了改适配下 UNO-16M

出0入475汤圆

发表于 2022-8-12 21:54:50 来自手机 | 显示全部楼层
以前51时代用汇编,倒是可以用的一bit都没有空余的。因为代码运行每一条指令用了哪些资源都是清清楚楚的,包括中断啊函数调用啊,所以不会有任何的冲突地方,任何程序要执行到的情景都是早就考虑到了的,

出200入2554汤圆

发表于 2022-8-12 21:54:56 | 显示全部楼层
asj1989 发表于 2022-8-12 20:35
对啊  那你为啥不换一个大容量的芯片
(引用自14楼)

现在有了高速的 STM32 了,就算 STC 也不差,但就是没那个移植的心情。

Arduino UNO 价格又降下来了,在通用的底板上移植示波器,比一个高端的专用板来的划算:因为硬件遍地都是

出0入0汤圆

发表于 2022-8-12 21:57:28 | 显示全部楼层
有中断都不敢用,随时蹦掉

出200入2554汤圆

发表于 2022-8-12 22:01:38 | 显示全部楼层
laujc 发表于 2022-8-12 21:47
用汇编写的吧
(引用自15楼)

C 写的,编译环境 ICCAVR,但是人肉检查了生成的 lst、map 文件,附上源码:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入4汤圆

发表于 2022-8-14 09:57:01 | 显示全部楼层
t3486784401 发表于 2022-8-12 22:01
C 写的,编译环境 ICCAVR,但是人肉检查了生成的 lst、map 文件,附上源码:
(引用自20楼)

您是前辈,我08年毕业,主要从事家电开发,慢慢的芯片Flash就越来越便宜了
再加上芯片资源对家电的控制需求来说,都是过剩的,所以不是很在意优化。

出0入0汤圆

发表于 2022-8-14 11:09:05 | 显示全部楼层
如果用动态内存,会,不会卡成狗,会失败。

出200入2554汤圆

发表于 2022-8-14 11:46:07 | 显示全部楼层
laujc 发表于 2022-8-14 09:57
您是前辈,我08年毕业,主要从事家电开发,慢慢的芯片Flash就越来越便宜了
再加上芯片资源对家电的控制需 ...
(引用自21楼)

前辈不敢当,我这只是代码写的多罢了。

出0入42汤圆

发表于 2022-8-14 12:29:05 | 显示全部楼层
t3486784401 发表于 2022-8-12 18:17
曾经用 M328 写过一个虚拟示波器,片上 2KB 内存全部用于 FIFO 缓存,没给堆栈留一个字节。

当然代价是:
(引用自12楼)

大神这操作,想都不敢想啊,佩服

出0入71汤圆

发表于 2022-8-14 12:58:06 | 显示全部楼层
代码中永远不要有不可预测的内存分配,全静态分配是嵌入式程序员的职业操守,就是剩一个字节也不会卡死。

出0入475汤圆

发表于 2022-8-14 13:02:33 来自手机 | 显示全部楼层
dellric 发表于 2022-8-14 12:58
代码中永远不要有不可预测的内存分配,全静态分配是嵌入式程序员的职业操守,就是剩一个字节也不会卡死。 ...
(引用自25楼)

那我还很庆幸自己以前是写汇编的,没有任何的不知道的内存消耗,
所以导致我学着写几句c后,也从来不会用啥动态分配,压根搞不懂是啥意思:)

出0入71汤圆

发表于 2022-8-14 14:49:07 | 显示全部楼层
1a2b3c 发表于 2022-8-14 13:02
那我还很庆幸自己以前是写汇编的,没有任何的不知道的内存消耗,
所以导致我学着写几句c后,也从来不会用 ...
(引用自26楼)

没关系,需要把它搞懂, 然后更需要把它忘掉, 在脑袋里面留下一个坑, 让未来的自己不跳下去

出0入4汤圆

发表于 2022-8-15 16:46:57 | 显示全部楼层
1a2b3c 发表于 2022-8-14 13:02
那我还很庆幸自己以前是写汇编的,没有任何的不知道的内存消耗,
所以导致我学着写几句c后,也从来不会用 ...
(引用自26楼)

上系统,多任务时需要这样操作

不上系统的项目,基本不用考虑这些

出0入0汤圆

 楼主| 发表于 2022-9-3 09:09:34 | 显示全部楼层
感谢各方留言

出0入0汤圆

发表于 2022-9-3 11:25:30 | 显示全部楼层
楼学习一下内存的分配吧,能用尽的只有STACK,HEAP,那不是卡,是飞

出0入0汤圆

发表于 2022-9-3 11:54:59 | 显示全部楼层
dog 发表于 2022-9-3 11:25
楼学习一下内存的分配吧,能用尽的只有STACK,HEAP,那不是卡,是飞
(引用自30楼)

这两个形容词(动词)对比很鲜明

出0入31汤圆

发表于 2022-9-3 13:54:29 来自手机 | 显示全部楼层
卡不成狗就嗝屁了
要么呼呼跑,要么带你飞

出0入0汤圆

发表于 2022-9-5 10:47:23 | 显示全部楼层
动态内存是可以节省RAM的,很多业务之间是不共存的,如果用静态,就一直占用资源。

出0入309汤圆

发表于 2022-9-6 09:16:39 | 显示全部楼层
t3486784401 发表于 2022-8-12 18:17
曾经用 M328 写过一个虚拟示波器,片上 2KB 内存全部用于 FIFO 缓存,没给堆栈留一个字节。

当然代价是:
(引用自12楼)

感觉类似的办法也可以强制给没内存的tiny15之类用。
比如这位楼主:https://www.amobbs.com/thread-5760208-1-1.html (您回过贴)

出0入0汤圆

发表于 2022-9-6 09:37:11 | 显示全部楼层
看了以上的评论 总结一下:楼主说先说裸跑 和win操作系统本来就是矛盾的
裸跑是静态分配内存的 前期开发过程中内存是够用的(固定的) 后续运行过程中也是固定的, 就不会出现内存耗尽的问题。
所谓内存耗尽出现在跑操作系统的项目中,运行过程中动态申请/释放内存,就会出现内存耗尽的情况。

出0入309汤圆

发表于 2022-9-6 10:10:26 | 显示全部楼层
磊磊映画 发表于 2022-9-6 09:37
看了以上的评论 总结一下:楼主说先说裸跑 和win操作系统本来就是矛盾的
裸跑是静态分配内存的 前期开发过 ...
(引用自35楼)

"前期开发过程中内存是够用的(固定的) 后续运行过程中也是固定的" 那可未必。堆的大小栈的大小在后续运行过程中都未必和开发一样。如果调用或者申请内存过多。。。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2022-9-6 10:40:28 | 显示全部楼层
iamseer 发表于 2022-9-6 10:10
"前期开发过程中内存是够用的(固定的) 后续运行过程中也是固定的" 那可未必。堆的大小栈的大小在后续运 ...
(引用自36楼)

这个图不错赞 收藏了,得把前提加上  裸跑的情况   在 一般裸跑 不申请动态内存情况下 。

出0入0汤圆

发表于 2022-9-10 21:21:08 | 显示全部楼层
估计楼主没用过430,它的ram基本都很小,所以,几乎肯定要把ram榨取干净!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-18 23:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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