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 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题