XCDH_chen 2022-05-19 01:11 采纳率: 100%
浏览 34
已结题

在程序中使用code关键字,RAM所用空间减少了,但是为什么ROM所用空间没有增加反而减少了

问题遇到的现象和发生背景

我了解到的基础知识:
1.keil5下方output窗口中会出现相应提示,这个窗口告诉我们编译完成后的情况, data=36,指的是我们的程序使用了单片机内部的 256字节 RAM 资源中的 36个字节, code=339 的意思是使用了 8K 代码 Flash 资源中的 339 个字节。

2.code关键字的作用是告诉单片机,我定义的数据要存储在ROM(程序存储区)里面

问题:我想要用code把定义的数组存入ROM,减少RAM的使用空间,使用code关键字后,RAM对应的data=12,所占用空间确实减少了24字节,问题是ROM对应的code=208,程序所占用空间没有增加反而减少了,本人是初学者,这个问题很简单,但是却困扰我许久,希望可以得到帮助

问题相关代码

加code关键字之前

img


加code关键字后

img

  • 写回答

1条回答 默认 最新

  • qllaoda 2022-05-19 07:07
    关注

    你不用code,变量初值也需要存在的,这个空间当然在ROM里,所以改成code后,code空间不会增加,因为之前也有同样大的一段ROM空间存着初始值;不用code的话,单片机要从ROM拷贝到RAM的(这个不需要你去操作,编译器会自动增加这样一段代码),这些操作的指令当然也是在code空间,用code后,这些操作就不需要了,所以code空间的消耗反而会减少。

    你观察得挺仔细,其实如果你再往后面,可能还会发现另一个奇怪的现象,就是你定义一个函数,如果你在代码里调用了它,再对比一下不掉用它,你会发现调用它后,消耗的RAM可能更少一些。这些看似不合逻辑的现象,其实仔细分析,都不难解释。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月27日
  • 已采纳回答 5月19日
  • 创建了问题 5月19日

悬赏问题

  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable