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 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项