Keil编译器中One ELF Section per Function 选项选择效果以及程序编译后容量判断

One ELF Section per Function的作用

Keil编译器中One ELF Section per Function 选项选择效果以及程序编译后容量判断_第1张图片
One ELF Section per Function 选项告诉编译器将每个函数作为一个独立的 ELF 段,主要作用是优化代码,以减少最终生成的二进制文件的大小

具体来说,当一个函数被调用时,它的代码会被加载到内存中。如果这个函数没有被使用,那么它的代码就会占用不必要的内存空间。而通过将每个函数作为一个独立的 ELF 段,编译器可以识别出未被使用的函数代码段并将其排除在最终的二进制文件之外,从而优化内存使用

One ELF Section per Function 选项的使用可能会对编译时间和内存使用产生影响。由于编译器需要为每个函数生成独立的 ELF 段,因此编译时间可能会增加。此外,由于每个函数都需要在内存中保留一个独立的代码段,因此内存使用量可能会增加

编译后程序容量计算

在这里插入图片描述
以上图为例:Program Size: Code=137472 RO-data=186476 RW-data=6860 ZI-data=43980

Code:代码部分;
RO-data:程序定义的常量、字符串,其他静态数据;
RW-data: 程序中动态分配的内存、全局变量和静态变量等需要在运行时进行读写操作的数据;
ZI-data:局部变量和未初始化的全局变量,它们的值会被编译器初始化为0;

Keil生成的map文件的信息:
Keil编译器中One ELF Section per Function 选项选择效果以及程序编译后容量判断_第2张图片
因为勾选了One ELF Section per Function 选项,RW-data已被优化到1356大小,最后烧录的FLASH比原来节约了4.6KB。

烧写时FLASH占用=(Code+RO-data+RW-data)= 323948, 323948/1024=316.36KB
程序运行时RAM占用=(RW-data+ZI-data)= 50840, 50840/1024=49.65KB

判断代码是否超出芯片容量

这里使用STM32F103VET6芯片,512K FLASH,64K SRAM,可以看出都在芯片容量之内。

你可能感兴趣的:(stm32)