打印
[通用PIC核OTP系列]

用C编程,怎么样节约RAM啊,芯片是SQ013L

[复制链接]
12101|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gdam999|  楼主 | 2021-9-22 10:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 芯圣电子官方QQ 于 2023-7-25 09:46 编辑

我程序比较简单,用了数组占了 20个字节,再用了几个字节作为循环计数,算了算总共就占用了24个字节,但是编译器编译的时候就已经满了,我现在还差3个字节RAM不够用,又不想换IC,请问编译器那里如何抠出几个字节出来?(SQ013L 总共49个字节RAM)

使用特权

评论回复
沙发
gdam999|  楼主 | 2021-9-22 12:50 | 只看该作者
程序我优化了一下,合并了一些函数,现在还差1个字节的RAM不够用,怎么办

使用特权

评论回复
板凳
LcwSwust| | 2021-9-22 13:04 | 只看该作者
程序发上来看看

使用特权

评论回复
地板
m564522634| | 2021-9-22 13:46 | 只看该作者
因为编译器要为你函数切换之类的也要做开销呀, 你数组是固定数值的话建议你存放到flash中去,把程序优化等级开到最大, 这东西要汇编也不难呀,这种单片机就没多少指令

使用特权

评论回复
5
gx_huang| | 2021-9-22 13:52 | 只看该作者
主要是有些MCU的C编译器太垃圾了,只要用到中断,啥功能都没有,就占用了几十个RAM。

使用特权

评论回复
6
叶春勇| | 2021-9-22 13:55 | 只看该作者
rom够的话。
用于标志位的,用结构体的bit定义,一个字节当8个用。
计数器,采用变时基础,秒级的,100ms的时基,这样计数器就一个字节表达25.6秒。

使用特权

评论回复
7
yangsen| | 2021-9-22 17:53 | 只看该作者
用全局变量,函数里少用局部变量

使用特权

评论回复
8
keer_zu| | 2021-9-23 09:20 | 只看该作者
yangsen 发表于 2021-9-22 17:53
用全局变量,函数里少用局部变量

应该是少用全局变量,局部变量是用栈里的,函数调用的时候才分配,这部分和其它函数可以复用的。
栈要选取合理大小,够用就行。

使用特权

评论回复
9
yangsen| | 2021-9-23 15:03 | 只看该作者
keer_zu 发表于 2021-9-23 09:20
应该是少用全局变量,局部变量是用栈里的,函数调用的时候才分配,这部分和其它函数可以复用的。
栈要选 ...

你试试用局部变量就知道了,编译器会给你划一块堆空间,用几个全局变量做公共的临时变量使用,如果你用过C51的命令行你就知道了,链接前有个步骤叫覆盖分析,就是C51的链接器分析代码里的临时变量使用情况复用存储空间,中断和主循环里都调用的函数要加可重入的关键字就是因为临时变量的存储空间做了复用。对于小RAM的单片机用C语言编码的时候函数尽量少传形参,函数里的临时变量要想办法复用

使用特权

评论回复
10
tototm| | 2021-9-23 15:52 | 只看该作者
多用局部变量少用全局变量

使用特权

评论回复
11
qd118| | 2021-9-24 21:00 | 只看该作者
你这问题很简单,可惜我是花钱买的

使用特权

评论回复
12
Q80351951| | 2021-9-25 23:13 | 只看该作者
给你出个主意,找个不用的寄存器,比如我就用过PWM寄存器当内存用,反正也用不到PWM,或者定时器等等所有能存数据的寄存器都可以用,甚至用1个不用的引脚当1位存储使用.

使用特权

评论回复
13
Bobby13| | 2021-9-26 06:58 | 只看该作者
gx_huang 发表于 2021-9-22 13:52
主要是有些MCU的C编译器太垃圾了,只要用到中断,啥功能都没有,就占用了几十个RAM。 ...

上汇编

使用特权

评论回复
14
1123506| | 2022-3-18 16:02 | 只看该作者
芯圣一级代理商 出芯圣ic  价格优势  需要联系企鹅号  2914373240

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

78

帖子

1

粉丝