KEIL编译完成后,在Build Output窗口会出现一下信息:
Code是代码占用的空间;
RO-data是 Read Only 只读常量的大小,如const型;
RW-data是(Read Write) 初始化了的可读写变量的大小;
ZI-data是(Zero Initialize) 没有初始化的可读写变量的大小。ZI-data不会被算做代码里因为不会被初始化;
简单的说就是在烧写的时候是FLASH中的被占用的空间为:Code + RO Data + RW Data
程序运行的时候,芯片内部RAM使用的空间为: RW Data + ZI Data
我的代码中,Flash占用空间code =24586字节+RO-data=626字节,RAM占用空间为RW-data=220字节+ZI-data=8308字节
下面介绍如何压缩RAM空间,主要是一些全局变量的定义,大家可以打开自己工程文件夹下面的OBJ文件夹,找到一个后缀为.MAP的文件,可以找到
如图 可以看到不同变量占用RAM空间的大小及地址,可以根据这个删除不必要的变量或空间,可以节省RAM空间,选择小RAM的芯片,降低成本
关键字:STM32 Flash RAM 使用空间
引用地址:
STM32如何查看Flash和RAM使用空间以及如何压缩RAM的使用空间
推荐阅读最新更新时间:2024-03-16 16:23
英特尔:不屑NAND竞争,力夺SSD龙头
芯片龙头英特尔(Intel)的NAND闪存事业群新主管透露,该公司立志成为固态储存(SSD)领域的一哥,但令人惊讶的是,他们没兴趣在NAND市场称王。 英特尔并不想步上三星(Samsung)、海力士(Hynix)与东芝(Toshiba)等NAND供货商彼此争夺市占率的后尘,不过却透露了想抢夺三星SSD市场龙头宝座的意愿。但令人惊讶的,总是第一名的英特尔无意成为NAND市场的老大。 目前英特尔在处理器与芯片组市场都是龙头,如果该公司在某个市场名次落后,也意味着该公司将退出那个领域。举例来说,这几年来英特尔已经因为某些理由,放弃ASIC、通讯IC、NOR闪存,品牌PC以及超级计算机等业务。 对闪存:不
[半导体设计/制造]
stm32 窗口看门狗 WWDG
窗口看门狗WWDG其实和独立看门狗类似,它是一个7位递减计数器不断的往下递减计数,当减到一个固定值0x40时还不喂狗的话,产生一个MCU复位,这个值叫窗口的下限,是固定的值,不能改变 窗口看门狗(WWDG)的时钟来自PCLK1,即挂接在APB1总线上,APB1时钟最大为36M 窗口值由配置寄存器WWDG_CFR的 位设置,所以最大值0x7F 当递减计数器递减到0x40的时候,还不会马上产生复位,如果使能了提前唤醒中断,则产生提前唤醒中断,提醒喂狗,随后将复位 WWDG配置步骤 1.使能WWDG时钟 2.设置WWDG窗口值 3.设置WWDG预分频因子 4.初始化NVIC外设,设置WWDG中断优先级 5.初始化计数
[单片机]
STM32高级控制定时器1的使用
STM32中的高级控制定时器(Tim1)是由一个16位的自动装载计数器组成,它由一个可编程预分频器驱动。 用途在于:测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较,PWM,嵌入死区时间的互补PWM等)。 使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。 具体如下: 16位上下,自动装载计数器。 16位可编程预分频器,计数器时钟频率的分频率的分频系数为1-65535之间任意数值,4个独立通道: 输入捕获 输出比较 PWM生成 单脉冲模式输出 死区时间可编程的互补输出 使用外部信号控制定时器和定时器互连的同步电路 在指定数目的计数器周期之后更新定时器寄存器
[单片机]
STM32 串口采用DMA方式收发
什么是DMA —- Directional Memory Access, 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作 我们通过以下几方面学习串口DMA: 一、如何理解DMA 对于DMA,打个比方就很好理解: 角色预设: 淘宝店主 —- STM32 MCU 快递员 —- 外设(如UART,SPI) 发货室 —- DMA 1、首先你是一个淘宝店主,如果每次发货收货都要跟快递沟通交涉会很浪费时间和精力。 2、然后你就自己建了一个发货室,发货室里有好多个货柜箱子,每个箱子上都写着快递名字(如果申通快递,顺丰
[单片机]
基于STM32和EV1527的无线接收解码程序
一、1527的数据帧结构 无线遥控的编码,从编码类型上来说,分为2类,一类是固定码,也就是编码芯片的地址是不变的,芯片型号以 EV1527、PT2262 为代表。另一种是滚动码,芯片的地址码是变化的,芯片以HS300、HS301为代表。 1 EV1527 数据帧结构 EV1527 是一片由 CMOS 设计制造的可预烧内码的学习码编码IC ,由软件解码;内码共有 20 个位元可预烧 1048576 组内码组合,降低使用上编码重复的机率。 EV1527 每帧数据由 24 个数据位组成,前 20 位为地址码,对于一个芯片来说,地址位的内容是固定的,是出厂前就预制好的,并且理论上每个芯片的地址码是唯一的。后面 4 位为按键
[单片机]
OK6410A 开发板 (八) 34 linux-5.11 OK6410A 内存管理第二阶段
B __turn_mmu_on符号 - setup_arch- paging_init- bootmem_init- memblock_allow_resize返回 ----此时memblock初始化完成,开启了基于虚拟内时代的 memblock内存管理器时代 流程 __turn_mmu_on mcr p15, 0, r0, c1, c0, 0 @ write control reg // 内存管理相关1 // 上句执行之后,mmu开启 ret r3 // 调用到 __mmap_switched __mmap_switched adr r4, __mmap_switched_data /
[单片机]
【STM32】HAL库-备份寄存器(BKP)
简介 备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。 他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电。 当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。 使能对备份寄存器和RTC的访问 复位后,对备份寄存器和RTC的访问被禁止,并且备份域被保护以防止可能存在的意外的写操作。执行以下操作可以使能对备份寄存器和RTC的访问。 通过设置寄存器RCC_APB1ENR的PWREN和BKPEN位来打开电源和后备接口的时钟 电源控制寄存器(PWR_CR)的DBP位来使能对后备寄存器和RTC的访问。 使用电池或其他电源连接到VBAT脚上,当VDD断电时,可以保存
[单片机]
关于STM32存储的堆栈地址
由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后有系统释放 4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放 5、程序代码区—存放函数体的二进制代码。 STM32的地址
[单片机]