用keil编译rt-thread,怎样避免链接keil自带的库函数?

65 views
Skip to first unread message

汪泉源

unread,
Mar 19, 2012, 4:34:29 AM3/19/12
to rt-threa...@googlegroups.com
RTT SVN版本号:1996,我的平台是lpc2478。

我上周开始做移植,当然是在svn当前的基础上做的移植。目前遇到一个问题,希望大家不吝赐教。

我的应用里,需要读写SD卡里的文件。在一开始,我用的是pc上写的程序,用fopen打开文件。但是在系统启动,尚未进入main函数前,系统就直接进入rt_hw_cpu_shutdown函数,经查,是由rt_hw_trap_swi进入。再进一步追查,发现系统初始化时,调用了_sys_open函数,这是一个库函数,由keil自带。这个函数里使用了swi语句,所以……我的程序就到了rt_hw_trap_swi。

我又把打开文件的函数改为posix兼容的open,但是,还是出现_sys_open调用导致进入swi。

请问,该如何避免链接库函数?或者,如何正确使用open打开文件。
谢谢各位。

Tong Xuan

unread,
Mar 19, 2012, 4:41:12 AM3/19/12
to rt-threa...@googlegroups.com
不用microlib试试?

汪泉源

unread,
Mar 19, 2012, 4:45:53 AM3/19/12
to rt-threa...@googlegroups.com
我没有使用microlib……至少没有显示的使用,不知道哪里可以完全禁用。

bernard

unread,
Mar 19, 2012, 4:48:51 AM3/19/12
to rt-threa...@googlegroups.com

目前在rtt上fopen等还不支持,gcc + newlib可以支持。

在keil环境下用open需要使用文件系统。

~~from android phone

汪泉源

unread,
Mar 19, 2012, 4:56:29 AM3/19/12
to rt-threa...@googlegroups.com
嗯,确实是这个问题,fopen,fclose等同一系列的函数都不能调用。只要用到其中一个,都会把库文件链接上。
另外,printf也不能用。我换成posix兼容的open后还是不能使用的原因是没有删除printf的调用。删除后就好了。

谢谢各位关注。

Tong Xuan

unread,
Mar 19, 2012, 4:57:51 AM3/19/12
to rt-threa...@googlegroups.com
是keil的库中要重新定义一些系统调用函数才能用吗?

在 2012年3月19日 下午4:48,bernard <bernar...@gmail.com> 写道:

Tong Xuan

unread,
Mar 19, 2012, 4:58:32 AM3/19/12
to rt-threa...@googlegroups.com
keil中裸程序使用microlib和不用好像没什么区别啊

禾兰豆

unread,
May 24, 2012, 8:34:04 AM5/24/12
to rt-threa...@googlegroups.com
这种情况,可以定义一个与库函数完全相同的函数,编译器就会使用用户的函数了.

tiancaigao7

unread,
May 24, 2012, 8:36:43 AM5/24/12
to rt-threa...@googlegroups.com
我遇到这种情况会直接将MDK自带的库函数剪切到其他目录下备份。

--
精诚所至,金石为开,我的征途是星辰海洋!
Reply all
Reply to author
Forward
0 new messages