weif189 发表于 2012-3-5 15:16:45

RTT1.0 BSP下STM32F107例程编译下来怎么这么大?

Program Size: Code=123334 RO-data=5262 RW-data=688 ZI-data=20968
//#define RT_DEBUG
//#define RT_THREAD_DEBUG
//#define RT_USING_DFS
//#define RT_USING_LWIP
以后还是很大
Program Size: Code=98914 RO-data=3170 RW-data=668 ZI-data=20892

手册上
“RT-Thread Kernel内核部分包括了RT-Thread的核心代码,包括对象管理器,线程管理及调度,线
程间通信等的微小内核实现(最小能够到达4k ROM,1k RAM体积占用)。”

第一次玩rtos,望高手解惑,谢谢

tiancaigao7 发表于 2012-3-5 17:39:45

GUI你用没用?另外,代码量和你实现的功能以及线程栈的大小都有关系。

ffxz 发表于 2012-3-5 19:58:17

这个是需要自己仔细定制的。

weif189 发表于 2012-3-6 08:32:11

回复【1楼】tiancaigao7 天才杨威利
-----------------------------------------------------------------------

是啊,加上GUI那该有多大?我只是简单编译一下例程,看看系统占用。

weif189 发表于 2012-3-6 08:33:45

回复【2楼】ffxz
-----------------------------------------------------------------------

建议为1.0出本书,这样我们这些初学者可以更好的入手

lgnq 发表于 2012-3-6 12:49:53

用scons编译,很多不必要的文件不会被编译进去

回复【楼主位】weif189
program size: code=123334 ro-data=5262 rw-data=688 zi-data=20968
//#define rt_debug
//#define rt_thread_debug
//#define rt_using_dfs
//#define rt_using_lwip
以后还是很大
program size: code=98914 ro-data=3170 rw-data=668 zi-data=20892
手册上
“rt-thread kernel内核部分包括了rt-thread的核心代码,包括对象管理器,线程管理及调度,线
程间通信等的微小内核实现(最小能够到达4k rom,1k ram体积占用)。”
第一次玩rtos,望高手解惑,谢谢
-----------------------------------------------------------------------

lgnq 发表于 2012-3-6 12:52:33

回复【4楼】weif189
回复【2楼】ffxz
-----------------------------------------------------------------------
建议为1.0出本书,这样我们这些初学者可以更好的入手
-----------------------------------------------------------------------
可以先参考《RT-Thread实时操作系统编程指南》,虽然是基于0.3.0版本,但基础知识都一样的
http://www.rt-thread.org/download/RT-Thread.pdf

weif189 发表于 2012-3-8 10:07:30

之所以编译出来这么大好像和keil有关, keil好像会把没有使用的函数都链接进去,可以设置成不使用的函数不连接吗?

lgnq 发表于 2012-3-8 11:07:47

回复【7楼】weif189
之所以编译出来这么大好像和keil有关, keil好像会把没有使用的函数都链接进去,可以设置成不使用的函数不连接吗?
-----------------------------------------------------------------------

请使用 scons --target=mdk4 -s 重新生成 keil 工程
这样不必要的源文件就不会被添加进 keil 工程了

weif189 发表于 2012-3-8 11:29:46

回复【8楼】lgnq
-----------------------------------------------------------------------

谢谢!学习 scons!

我用IAR6.3编译试了一下

没优化
90 480 bytes of readonlycode memory
10 248 bytes of readonlydata memory
20 269 bytes of readwrite data memory
最低优化
85 400 bytes of readonlycode memory
10 248 bytes of readonlydata memory
20 269 bytes of readwrite data memory
最低优化并且
//#define RT_DEBUG
//#define RT_THREAD_DEBUG
//#define RT_USING_DFS
//#define RT_USING_LWIP

53 216 bytes of readonlycode memory
6 164 bytes of readonlydata memory
7 545 bytes of readwrite data memory

keil和IAR的差距也太大了点吧

weif189 发表于 2012-3-8 12:11:50

回复【8楼】lgnq
-----------------------------------------------------------------------

刚了解了一下scons,具体的命令不太懂,貌似自动化编译工具和make类似的东西吧,怎么能减少编译出来的代码量呢?是连接的时候加参数吗?能用到keil里面去吗?

aozima 发表于 2012-3-8 12:34:16

想减少体积当然是裁剪功能。
FINSH 功能要好几十K。
不过使用了库,光一个空工程就有几K了吧。
再说107的再怎么也有几百K,又没到用光的时候,裁那么小做什么。

Program Size: Code=14362 RO-data=2246 RW-data=304 ZI-data=2632
点击此处下载 ourdev_724833JIQ8EL.zip(文件大小:5K) (原文件名:stm32f107_project.zip)

weif189 发表于 2012-3-8 12:50:09

回复【11楼】aozima
-----------------------------------------------------------------------

其实不是裁剪的问题,而是编译器把文件里可以编译的函数都编译连接,不管有没有用到,会有很多死函数,这样太浪费代码空间,有空间可以做更多的事情。
刚试了一下
keil里面options->target->code generation把Use Cross-Module optimization勾上应该可以把死函数去掉

利用 Cross-Module优化为全局代码优化创建一个链接反馈文件,不知道为什么会有这个效果,反正生成的代码小很多,和IAR差不多!

aozima 发表于 2012-3-8 13:03:36

基本看到所有的链接器都会把不用的代码去掉,
即使是C51的链接器,也不过是给个提示,也没有实际链接到目标文件中去。
除非强制保留。

11楼同样的工程用IAR 5.41编译的
Debug
14 544 bytes of readonlycode memory
   3 796 bytes of readonlydata memory
   4 372 bytes of readwrite data memory

Release
12 102 bytes of readonlycode memory
   4 878 bytes of readonlydata memory
   4 369 bytes of readwrite data memory

“利用 Cross-Module优化为全局代码优化创建一个链接反馈文件,不知道为什么会有这个效果,反正生成的代码小很多,和IAR差不多!"
用11楼的工程勾起来与没勾一样的。没有变化。

估计CM3上已是最优了,所以没变化。不同的平台勾上会有些效果。(未考证,不保证!)
页: [1]
查看完整版本: RTT1.0 BSP下STM32F107例程编译下来怎么这么大?