搜索
bottom↓
回复: 7

Eclipse下用GCC 3.1开发单片机,如何实现几个RAM不清零?

[复制链接]

出90入0汤圆

发表于 2022-11-8 17:02:37 | 显示全部楼层 |阅读模式
单片机可以判断 2种情况:上电、睡眠后唤醒。
1、上电时RAM都清零,
2、睡眠后唤醒,几个RAM不清零,保持原来睡眠前的值,

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

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

出0入0汤圆

发表于 2022-11-8 17:07:32 | 显示全部楼层
自己写start.s就行了,不要清零的变量单独放一个段。

出90入0汤圆

 楼主| 发表于 2022-11-8 19:01:22 | 显示全部楼层
https://www.amobbs.com/thread-5592044-1-1.html   

的8楼说:
IAR中可以在定义的时候加 __no_init使全局变量不会在启动时清零。

有没有同类的

出90入0汤圆

 楼主| 发表于 2022-11-9 10:47:28 | 显示全部楼层
Eclipse用的人少吗?

出40入45汤圆

发表于 2022-11-9 10:54:56 | 显示全部楼层
睡眠唤醒之后 RAM 是否清零,这不是由单片机本身决定的吗?
有些单片机有好几种睡眠状态的低功耗模式,最低功耗的那种,大概是保持特定地址的 RAM 不被清零

出0入0汤圆

发表于 2022-11-9 16:05:35 | 显示全部楼层
矩阵时间 发表于 2022-11-9 10:54
睡眠唤醒之后 RAM 是否清零,这不是由单片机本身决定的吗?
有些单片机有好几种睡眠状态的低功耗模式,最低 ...
(引用自5楼)

RAM清零是上电后由指令干的。
从语言角度讲就是cpu复位后到main之前是汇编,这段汇编建立了C的运行环境。包括data段搬移,bss段清零,设置堆栈,中断向量表等。
这段汇编自己写可以叫start.s,编译器自带的专业叫法是crt0.s

出0入4汤圆

发表于 2022-11-10 08:41:59 来自手机 | 显示全部楼层
楼上说的这么详细了,楼主还是去认真啃汇编然后改写启动代码吧。哈哈

出0入0汤圆

发表于 2024-3-11 17:50:27 | 显示全部楼层
简单的方法就是。直接ld脚本把ram大小砍 掉你要的字节数。然后最后末尾的那些字节数就不会清零了。用指针去读写。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-17 21:10

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

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