打印
[STM32F1]

到底是哪里导致代码这么大啊

[复制链接]
3328|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gdszzyq|  楼主 | 2015-5-11 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我新建了个工程,全部用库函数实现,已将所有参数检查语句删除,只加入了GPIO\TIM\USART\MSIC\FLASH\RCC\CORE这几个库文件,定义了3个IO,开启1个基本定时器及定时中断,调用了FLASH的一个读函数、一个串口发送函数、还有几句点灯语句,就这么点代码生成的HEX文件居然有23K,实际代码也有10K,到底是哪些代码占了这么多空间啊,如果我将80个IO全部定义了岂不是代码随便都要上100K以上?本来还打算用128K的MCU,现在看来没谱了
沙发
lxyppc| | 2015-5-11 11:05 | 只看该作者
有一个叫map文件的
里面会告诉你空间怎么分配的

使用特权

评论回复
板凳
colin2135| | 2015-5-11 11:08 | 只看该作者
不懂装懂的我来回答一下,bin文件大小才是烧写到FLASH的实际长度。

使用特权

评论回复
地板
gdszzyq|  楼主 | 2015-5-11 11:13 | 只看该作者
lxyppc 发表于 2015-5-11 11:05
有一个叫map文件的
里面会告诉你空间怎么分配的

我这个程序只包含了那几个文件,没有包含这个MAP文件

使用特权

评论回复
5
gdszzyq|  楼主 | 2015-5-11 11:14 | 只看该作者
colin2135 发表于 2015-5-11 11:08
不懂装懂的我来回答一下,bin文件大小才是烧写到FLASH的实际长度。

已说了实际的BIN文件也有10K

使用特权

评论回复
6
gdszzyq|  楼主 | 2015-5-11 11:16 | 只看该作者
刚看到是生成代码时生成的MAP文件

使用特权

评论回复
7
lxyppc| | 2015-5-11 11:37 | 只看该作者
gdszzyq 发表于 2015-5-11 11:16
刚看到是生成代码时生成的MAP文件

所以你的结论是?

使用特权

评论回复
8
gdszzyq|  楼主 | 2015-5-11 12:12 | 只看该作者
发现FLASH占了将近4K,其中2K是BUFFER,USART也占了不少,发现库文件里许多函数没调用也占了不少,看来没用的函数也删除才行,只是有些不敢删除,不知道有没有用。

使用特权

评论回复
9
gdszzyq|  楼主 | 2015-5-11 12:14 | 只看该作者
象这些根本没调用的都占了一大堆
    TIM_OC1PreloadConfig                     0x08001245   Thumb Code    18  stm32f10x_tim.o(.text)
    TIM_OC2PreloadConfig                     0x08001257   Thumb Code    26  stm32f10x_tim.o(.text)
    TIM_OC3PreloadConfig                     0x08001271   Thumb Code    18  stm32f10x_tim.o(.text)
    TIM_OC4PreloadConfig                     0x08001283   Thumb Code    26  stm32f10x_tim.o(.text)
    TIM_OC1FastConfig                        0x0800129d   Thumb Code    18  stm32f10x_tim.o(.text)
    TIM_OC2FastConfig                        0x080012af   Thumb Code    26  stm32f10x_tim.o(.text)
    TIM_OC3FastConfig                        0x080012c9   Thumb Code    18  stm32f10x_tim.o(.text)
    TIM_OC4FastConfig                        0x080012db   Thumb Code    26  stm32f10x_tim.o(.text)
    TIM_ClearOC1Ref                          0x080012f5   Thumb Code    18  stm32f10x_tim.o(.text)
    TIM_ClearOC2Ref                          0x08001307   Thumb Code    24  stm32f10x_tim.o(.text)
    TIM_ClearOC3Ref                          0x0800131f   Thumb Code    18  stm32f10x_tim.o(.text)
    TIM_ClearOC4Ref                          0x08001331   Thumb Code    24  stm32f10x_tim.o(.text)
    TIM_OC1PolarityConfig                    0x08001349   Thumb Code    18  stm32f10x_tim.o(.text)
    TIM_OC1NPolarityConfig                   0x0800135b   Thumb Code    18  stm32f10x_tim.o(.text)
    TIM_OC2PolarityConfig                    0x0800136d   Thumb Code    26  stm32f10x_tim.o(.text)
    TIM_OC2NPolarityConfig                   0x08001387   Thumb Code    26  stm32f10x_tim.o(.text)
    TIM_OC3PolarityConfig                    0x080013a1   Thumb Code    26  stm32f10x_tim.o(.text)
    TIM_OC3NPolarityConfig                   0x080013bb   Thumb Code    26  stm32f10x_tim.o(.text)
    TIM_OC4PolarityConfig                    0x080013d5   Thumb Code    26  stm32f10x_tim.o(.text)

使用特权

评论回复
10
ar_m_cu| | 2015-5-11 13:20 | 只看该作者
gdszzyq 发表于 2015-5-11 12:14
象这些根本没调用的都占了一大堆
    TIM_OC1PreloadConfig                     0x08001245   Thumb Code  ...

设置一下优化等级,编译器会自己去掉没用的函数

使用特权

评论回复
11
desertsailor| | 2015-5-11 13:27 | 只看该作者
不用库函数直接操作寄存器代码量最小

使用特权

评论回复
12
gdszzyq|  楼主 | 2015-5-11 13:49 | 只看该作者
desertsailor 发表于 2015-5-11 13:27
不用库函数直接操作寄存器代码量最小

我是初学者,不清楚哪些寄存器需要设置。哪些不需要

使用特权

评论回复
13
gdszzyq|  楼主 | 2015-5-11 13:59 | 只看该作者
ar_m_cu 发表于 2015-5-11 13:20
设置一下优化等级,编译器会自己去掉没用的函数

你是指在OPTION选项里勾选这个:execute-only code?我选它后编绎不通过,出一堆告警

使用特权

评论回复
14
ar_m_cu| | 2015-5-11 14:30 | 只看该作者
gdszzyq 发表于 2015-5-11 13:59
你是指在OPTION选项里勾选这个:execute-only code?我选它后编绎不通过,出一堆告警 ...

optimization 后面level0 ~ level3
optimize for time 前面的勾去掉。

另外不知道你用没用Keil自动加载的一些东西,最好建一个干净的工程,这样代码量就很小了

使用特权

评论回复
15
gdszzyq|  楼主 | 2015-5-11 15:05 | 只看该作者
ar_m_cu 发表于 2015-5-11 14:30
optimization 后面level0 ~ level3
optimize for time 前面的勾去掉。

本来就是这样设的,我这个工程就是新建的,只添加自己需要的库文件,连检查参数的语句都他删除了

使用特权

评论回复
16
myxiaonia| | 2015-5-11 15:32 | 只看该作者
这种基本问题 楼主应该先在论坛里搜索相关问题  简直拉低平均水平啊

如果是mdk,勾选这里

QQ图片20150511153215.jpg (58.12 KB )

QQ图片20150511153215.jpg

使用特权

评论回复
17
gdszzyq|  楼主 | 2015-5-11 15:45 | 只看该作者
多谢你把我拉高,照你那样设置出现一堆错误

QQ截图20150511154706.png (29.42 KB )

QQ截图20150511154706.png

使用特权

评论回复
18
gdszzyq|  楼主 | 2015-5-11 15:52 | 只看该作者
本帖最后由 gdszzyq 于 2015-5-11 16:41 编辑

不好意思忘记刚才设置了别的地方,照你那样设置可以,代码减少了7K,谢谢

使用特权

评论回复
19
加油吧小鱼儿| | 2015-5-11 20:14 | 只看该作者
gdszzyq 发表于 2015-5-11 15:52
不好意思忘记刚才设置了别的地方,照你那样设置可以,代码减少了7K,谢谢 ...

呵呵呵,加油~

使用特权

评论回复
20
gllier| | 2015-5-11 20:25 | 只看该作者
用了库函数就会编译进去的,但再回代码不会长太多

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

322

帖子

3

粉丝