[通用PIC核OTP系列] 用C编程,怎么样节约RAM啊,芯片是SQ013L

[复制链接]
13731|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中去,把程序优化等级开到最大, 这东西要汇编也不难呀,这种单片机就没多少指令
gx_huang 发表于 2021-9-22 13:52 | 显示全部楼层
主要是有些MCU的C编译器太垃圾了,只要用到中断,啥功能都没有,就占用了几十个RAM。
叶春勇 发表于 2021-9-22 13:55 | 显示全部楼层
rom够的话。
用于标志位的,用结构体的bit定义,一个字节当8个用。
计数器,采用变时基础,秒级的,100ms的时基,这样计数器就一个字节表达25.6秒。
yangsen 发表于 2021-9-22 17:53 | 显示全部楼层
用全局变量,函数里少用局部变量
keer_zu 发表于 2021-9-23 09:20 | 显示全部楼层
yangsen 发表于 2021-9-22 17:53
用全局变量,函数里少用局部变量

应该是少用全局变量,局部变量是用栈里的,函数调用的时候才分配,这部分和其它函数可以复用的。
栈要选取合理大小,够用就行。
yangsen 发表于 2021-9-23 15:03 | 显示全部楼层
keer_zu 发表于 2021-9-23 09:20
应该是少用全局变量,局部变量是用栈里的,函数调用的时候才分配,这部分和其它函数可以复用的。
栈要选 ...

你试试用局部变量就知道了,编译器会给你划一块堆空间,用几个全局变量做公共的临时变量使用,如果你用过C51的命令行你就知道了,链接前有个步骤叫覆盖分析,就是C51的链接器分析代码里的临时变量使用情况复用存储空间,中断和主循环里都调用的函数要加可重入的关键字就是因为临时变量的存储空间做了复用。对于小RAM的单片机用C语言编码的时候函数尽量少传形参,函数里的临时变量要想办法复用
tototm 发表于 2021-9-23 15:52 来自手机 | 显示全部楼层
多用局部变量少用全局变量
qd118 发表于 2021-9-24 21:00 | 显示全部楼层
你这问题很简单,可惜我是花钱买的
Q80351951 发表于 2021-9-25 23:13 | 显示全部楼层
给你出个主意,找个不用的寄存器,比如我就用过PWM寄存器当内存用,反正也用不到PWM,或者定时器等等所有能存数据的寄存器都可以用,甚至用1个不用的引脚当1位存储使用.
Bobby13 发表于 2021-9-26 06:58 来自手机 | 显示全部楼层
gx_huang 发表于 2021-9-22 13:52
主要是有些MCU的C编译器太垃圾了,只要用到中断,啥功能都没有,就占用了几十个RAM。 ...

上汇编
1123506 发表于 2022-3-18 16:02 | 显示全部楼层
芯圣一级代理商 出芯圣ic  价格优势  需要联系企鹅号  2914373240
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

87

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部