ZMLZML1009 发表于 2020-11-27 16:56:10

如何查看程序是否超出stm32的RAM?

查找网上关于keil如何查看编译程序所占用的ROM与RAM。

查找结果
1. code , RO ,RW, ZI 表示内容Code为程序代码部分
RO-data 表示 程序定义的常量const temp;
RW-data 表示 已初始化的全局变量
ZI-data 表示 未初始化的全局变量
单片机 FLASH 空间被谁占用了?
答案: code+ RO-data+ RW-data 。如果写的代码比较庞大超出了单片机的 FLASH
大小,此时就要考虑更换更大 FLASH 的单片机。


单片机 RAM 空间被谁占用了?
答案: RW-data + ZI-data 。 如果 RAM 超出了单片机的大小。就要考虑更换大 RAM
的型号。 //==============================================分割线:以上为网上搜寻结果//==============================================
对于stm32F103ZET6它有512Kbyte的FLASH,以及64Kbytes的RAM。以下是我一个工程编译后,map映射的数据。
      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   
    104932      18260   181012       1872   280544    1805723   Grand Totals    104932      18260   181012      436   280544    1805723   ELF Image Totals (compressed)    104932      18260   181012      436          0          0   ROM Totals
==============================================================================
    Total ROSize (Code + RO Data)               285944 ( 279.24kB)    Total RWSize (RW Data + ZI Data)            282416 ( 275.80kB)    Total ROM Size (Code + RO Data + RW Data)   286380 ( 279.67kB)
==============================================================================既然RW Data + ZI Data表示单片机RAM的占用。此时的RAM为275.8KB,而使用的stm32F103ZET6只有64KB的RM。为啥可以正常运行程序?编译之后的程序RAM已经远超过单片机自身的RAM.


eric2013 发表于 2020-11-27 17:00:15

看map文件里面的__initial_sp 是不是超了,如果是,那就确实超了

ZMLZML1009 发表于 2020-11-27 17:27:38

eric2013 发表于 2020-11-27 17:00
看map文件里面的__initial_sp 是不是超了,如果是,那就确实超了

感谢老大,我查了map
__initial_sp                           0x2000f7e8   Data         0startup_stm32f103xe.o(STACK)
用了61.9765625KB,马上就要超了、、、、

本来想不外接SRAM,只是用MCU自己的RAM,再跑个emwin,减少点成本。现在还没加emwin就快用完了,看来要么外接SRAM,要么换片子了

跟着硬汉学 发表于 2024-1-9 09:22:31

上面计算的大小超过了芯片本身的大小是不是由于使用了动态分配的原因?

eric2013 发表于 2024-1-9 10:42:39

跟着硬汉学 发表于 2024-1-9 09:22
上面计算的大小超过了芯片本身的大小是不是由于使用了动态分配的原因?

使用了外扩SRAM。
页: [1]
查看完整版本: 如何查看程序是否超出stm32的RAM?