MCU C语言存储的一些理解

初学MCU,C语言等知识的时候,对总线地址,ROM、RAM,flash,特殊寄存器等等都只是表面理解。突然想总结一下这几年的理解。

RAM:

首先RAM是我们常人理解的运行内存。存储在这里面的内容断电以后就没了,再次上点以后就要重新开始了。
那么我们思考再写单片机程序的时候,哪些东西是掉电以后就没了呢。
自然是我们的变量,但要只是是可以读写的变量哦,如果是只读变量也就是常量是存储在ROM空间的。

那我们再分一下可以读写的变量包含哪些;
不同的关键字修饰它可能就会不太一样。
常用的static变量,全局变量,局部变量这些都是再RAM内,但是RAM可以分为三个区域。堆、栈、静态存储区;

1、堆 由程序员自动分配(malloc)以及释放,这里的释放很关键,一定要在使用完成后释放内存(free)!!!
2、栈 编译器自动分配的,我们的局部变量,函数的一些形参都会存储在这个区域
3、静态存储区:这里存放的就是初始化的全局变量和static修饰的变量,这里注意只要是static修饰的变量都是存放在静态存储区的。

ROM/FLASH

关于ROM和flash,flash是ROM的一种;
所有的常量,只读变量,还有代码都是存储在flash的。

大师匈碰到的问题:

前段时间在用一家国产的MCU,RAM空间比较小。大师兄在做一个加密算法的时候碰到了空间不够用的情况。
通过计算代码的RAM占用情况,应该是够用的,但是结果却不够用。
是因为原厂把flash分为了俩个区域,编译器不能自动分配这俩个地址池。需要加关键字bank去修饰,程序员自己去分配。

还有就是因为编译器做的不好,所以在C语言的情况下,有很多比较方便的写法,但是涉及到直接寻址和间接寻址的关系,需要比较啰嗦,分开去写,效率会更高。印象很深的是要注意不能多次传参,受到他们堆栈级数的约束。

所以要参考他们给到的一些示意例程去写。提高效率合理使用。

国产MCU或者是芯片这方面还需要加油。。。。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大师匈

来,用钱侮辱我吧!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值