Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
组件剪裁和内存占用
发布于 2011-07-05 11:27:14 浏览:9207
订阅该版
俺发现即使在“rtconfig.h”中不定义“RT_USING_DFS”和“RT_USING_LWIP” ,最终 DFS 和 lwIP 这两个组件还是会被编译,除非删除“components/dfs”和“components/net”这两个目录。(俺使用的是 Sourcery G++ Lite 编译器和 eclipse。) **更新:不太正确,见回帖。** **然后,俺想请问各位有木有比较过 IAR、Keil MDK 和 GNU 编译器的编译结果?俺很想知道花钱买个编译器,是否值得。**
查看更多
13
个回答
默认排序
按发布时间排序
bernard
2011-07-05
这家伙很懒,什么也没写!
不定义RT_USING_DFS也会编译DFS吗?应该不会吧,是否你哪里弄得不对?
shaolin
2011-07-05
这家伙很懒,什么也没写!
同奇怪,不定义RT_USING_DFS应该不会编译DFS的。可能跟eclipse有关呢
onelife
2011-07-05
这家伙很懒,什么也没写!
>同奇怪,不定义RT_USING_DFS应该不会编译DFS的。可能跟eclipse有关呢 --- 俺想大概是这里的问题吧。(以 lwIP 为例,DFS 同理。) “components/net/lwip/src/netif/ethernetif.c”: ``` #ifdef RT_USING_FINSH #include
void set_if(char* ip_addr, char* gw_addr, char* nm_addr) ... FINSH_FUNCTION_EXPORT(set_if, set network interface address); ... void list_if() ... FINSH_FUNCTION_EXPORT(list_if, list network interface information); #endif ``` “set_if()”和“list_if()”这两个函数有 call 到 lwIP,并且只要使用到 FINSH 就会被编译,所以导致 lwIP 也被编译。若改为: ``` #if defined(RT_USING_FINSH) && defined(RT_USING_LWIP) #include
void set_if(char* ip_addr, char* gw_addr, char* nm_addr) ... FINSH_FUNCTION_EXPORT(set_if, set network interface address); ... void list_if() ... FINSH_FUNCTION_EXPORT(list_if, list network interface information); #endif ``` lwIP 就不会被编译了(也许应该说被链接)。 DFS 涉及到的文件有: “components/dfs/src/dfs_posix.c” “components/dfs/src/dfs_file.c” “components/dfs/src/dfs_fs.c”
bernard
2011-07-05
这家伙很懒,什么也没写!
不会的啊,你是使用scons来编译吗?还是使用eclipse来编译? scons应该不会出现这类问题的
onelife
2011-07-06
这家伙很懒,什么也没写!
>不会的啊,你是使用scons来编译吗?还是使用eclipse来编译? > >scons应该不会出现这类问题的 --- 是 scons。或许是这样: linker script 中的这段使全部 FINSH 命令被保留了。 ``` /* section information for finsh shell */ . = ALIGN(4); __fsymtab_start = .; KEEP(*(FSymTab)) __fsymtab_end = .; . = ALIGN(4); __vsymtab_start = .; KEEP(*(VSymTab)) __vsymtab_end = .; . = ALIGN(4); ```
bernard
2011-07-06
这家伙很懒,什么也没写!
你使用的就是当前的efm32分支吧,我试试你说的情况。
onelife
2011-07-06
这家伙很懒,什么也没写!
[s:169] [s:169] [s:169] 竟然会姜…… ``` ... //#define EFM32_USING_ETHERNET ... #if defined(EFM32_USING_ETHERNET) #error "O_O" #define RT_USING_LWIP #define RT_USING_NETUTILS //#define RT_LWIP_DHCP #endif ... ``` 姜不会有 error,但会链接 lwIP。 ``` ... //#define EFM32_USING_ETHERNET ... #if defined(EFM32_USING_ETHERNET) #error "O_O" //#define RT_USING_LWIP //#define RT_USING_NETUTILS //#define RT_LWIP_DHCP #endif ... ``` 姜就不会链接 lwIP。为啥?
bernard
2011-07-06
这家伙很懒,什么也没写!
scons的头文件代码分析还不能够支持这么全面的,例如类似这样的: #if 0 #define XX #endif 它依然会认为XX是已经定义了。
onelife
2011-07-06
这家伙很懒,什么也没写!
确实。 “SCons.cpp.PreProcessor. process_contents()” ``` 299 - def process_contents(self, contents, fname=None): 300 """ 301 Pre-processes a file contents. 302 303 This is the main internal entry point. 304 """ 305 self.stack = [] 306 self.dispatch_table = self.default_table.copy() 307 self.current_file = fname 308 self.tuples = self.tupleize(contents) 309 310 self.initialize_result(fname) 311 while self.tuples: 312 t = self.tuples.pop(0) 313 # Uncomment to see the list of tuples being processed (e.g., 314 # to validate the CPP lines are being translated correctly). 315 #print t 316 self.dispatch_table[t[0]](t) 317 return self.finalize_result(fname) ``` “SCons.cpp.PreProcessor.tupleize()” ``` 275 - def tupleize(self, contents): 276 """ 277 Turns the contents of a file into a list of easily-processed 278 tuples describing the CPP lines in the file. 279 280 The first element of each tuple is the line's preprocessor 281 directive (#if, #include, #define, etc., minus the initial '#'). 282 The remaining elements are specific to the type of directive, as 283 pulled apart by the regular expression. 284 """ 285 global CPP_Expression, Table 286 contents = line_continuations.sub('', contents) 287 cpp_tuples = CPP_Expression.findall(contents) 288 return [(m[0],) + Table[m[0]].match(m[1]).groups() for m in cpp_tuples] ``` “SCons.cpp.CPP_Expression” ``` re.compile(r'(?m)^s*#s*(elif|undef|include_next|endif|else|include|i fdef|ifndef|import|define|if(?!def))(.*)$') ```
bernard
2011-07-10
这家伙很懒,什么也没写!
onelife,上面的代码什么意思?补丁吗,麻烦给个说明下
撰写答案
登录
注册新账号
关注者
0
被浏览
9.2k
关于作者
onelife
这家伙很懒,什么也没写!
提问
6
回答
33
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
2
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
3
RT-Thread EtherKit开源以太网硬件正式发布
4
如何在master上的BSP中添加配置yml文件
5
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
20
个答案
2
次被采纳
张世争
11
个答案
2
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部