[STM32F1] keil4.74编译生成的 Program Size: Code=5430 RO-data=478 RW-data=24 ZI-data=1024

[复制链接]
2550|10
 楼主| fuluoce 发表于 2015-2-4 16:07 | 显示全部楼层 |阅读模式
int main(void)
{
  uint8_t data;
  SystemClock_Config();
  //UART_Initialization(&UartHandle);
  //printf("WaveShare!! \r\n");
  while(1)
  {}
}
编译生成的代码是 Code=5430
Program Size: Code=5430 RO-data=478 RW-data=24 ZI-data=1024  
int main(void)
{
  uint8_t data;
  SystemClock_Config();
  UART_Initialization(&UartHandle);
  //printf("WaveShare!! \r\n");
  while(1)
  {}
}
编程生成的代码是Code=33774
Program Size: Code=33774 RO-data=478 RW-data=32 ZI-data=1088  
而函数void UART_Initialization(UART_HandleTypeDef *huart){} 是空的 代码全部被我注销

keil编译版本是keil4.74,keil4的最高版本  
搞不明白代码没加什么东西 怎么Code差了这么多
s_f_tan 发表于 2015-2-4 16:26 | 显示全部楼层
你用的是没有优化的选项吧,编译器把所牵涉的库里面的函数,不管有用没用都会给你加进去
 楼主| fuluoce 发表于 2015-2-4 16:51 | 显示全部楼层
s_f_tan 发表于 2015-2-4 16:26
你用的是没有优化的选项吧,编译器把所牵涉的库里面的函数,不管有用没用都会给你加进去 ...

我设置为最高优化还是有Code=18476
Program Size: Code=18476 RO-data=476 RW-data=32 ZI-data=1088  
泰山特曲123 发表于 2015-2-4 18:30 来自手机 | 显示全部楼层
因为你用到st的库了!库函数没有使用也要占代码,你把cross module勾上吧。另外,看看map文件就知道哪些代码占了空间。
李富贵 发表于 2015-2-4 18:46 | 显示全部楼层
one elf section per function
 楼主| fuluoce 发表于 2015-2-4 19:00 | 显示全部楼层
李富贵 发表于 2015-2-4 18:46
one elf section per function

不是很明白你的意思!能详细说说吗?
李富贵 发表于 2015-2-4 19:07 | 显示全部楼层
每个函数一个elf段,不然只要你用到c文件的任何一个函数,这个c文件所有的函数都会出现在最终的elf文件里面。
s_f_tan 发表于 2015-2-5 10:30 | 显示全部楼层
这个one elf section per function 以前看到过,但不知道用途是干啥的,这回受指教了
 楼主| fuluoce 发表于 2015-2-5 10:59 | 显示全部楼层
李富贵 发表于 2015-2-4 19:07
每个函数一个elf段,不然只要你用到c文件的任何一个函数,这个c文件所有的函数都会出现在最终的elf文件里面 ...

你的意思是说这函数的elf段有这么大,
这函数只有一个结构体指针作为形参,没有其他了,也会占这么大的空间。
 楼主| fuluoce 发表于 2015-2-6 10:22 | 显示全部楼层
我知道你意思了
在Options里的C/C++里的选项了有一个one elf section per function选项 得勾选  才能过把C文件里的其他函数滤掉
 楼主| fuluoce 发表于 2015-2-6 10:22 | 显示全部楼层
谢谢你的解释
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部