高手请进!ARM嵌入式开发中GNU环境printf 重定向串口!

2009年06月27日 18:10    发布者:潜艇8421
找了一下GOOGLE ,竟发现这个问题难倒不少人,网络上好象找不到答案,不知道社区的实力如何?即管发此问题贴,合大家之力,希望能够解决。

网友评论

wangkj 2009年06月27日
启动kernel时候指定终端是串口,就全定向到串口了。
一朝成名 2009年06月27日
哈哈,同意ls,移植的时候不是要指定终端的吗?

指定串口不就可以了
潜艇8421 2009年06月27日
那是带OS的用法,现在要剥去OS 直接用,也就是象以下这段的代码就必需打到串口去,
int main (void)
{
printf("Hello World\n");     //这样怎么重定位?默认输出是stdout.
}
一朝成名 2009年06月27日
我说不可能这么简单
原来是下个套:lol

看来是有准备的:lol
一朝成名 2009年06月27日
我没这么用过,但是想出来一个方法
那就是改printf函数,不用本来的glibc的函数原型,将printf函数写成一个简短的串口驱动形式
这样可以不?
潜艇8421 2009年06月27日
俺查看了WINARM  中带有的所有例程,WINARM是用 GNU工具链的arm-elf-gcc 编译,用的是newlib 库(嵌入式专用库),WINARM中带有的所有例程,竟没有提到printf 重定向的例程,对于使用这个重定向,作者给人的感觉要么就说这个太简单!还用给例程吗?要么就真是有点难度?
潜艇8421 2009年06月27日
RE:名人,为什么要花力气搞懂这个printf的定向? 搞通这个是为以后测试开源代码做准备,总不可能把别人写的printf 全改成自已的啊,这样会累坏人的,改一两个绝对可以,如果很多,人会疯的。

所以printf 的定向问题是必需摆平搞定的!
宇宙飞船 2009年06月27日
俺查了一个叫“都江的DIY OS for ARM” 的用的是arm-elf-gcc  一大堆的源码中竟同样没有用到printf 重定向串口的用法,国内研究这个问题的深度由此可见一斑!
一朝成名 2009年06月27日
RE:名人,为什么要花力气搞懂这个printf的定向? 搞通这个是为以后测试开源代码做准备,总不可能把别人写的printf 全改成自已的啊,这样会累坏人的,改一两个绝对可以,如果很多,人会疯的。

所以printf 的定向问 ...
潜艇8421 发表于 2009-6-27 22:09 http://bbs.eechina.com/images/common/back.gif

加一个宏定义,OK了…不用改
然后写自己的printf就不哦了?
宇宙飞船 2009年06月27日
会产生冲突,编译不可能通过的,就算能通过编译,能正常工作吗?
一朝成名 2009年06月27日
我看很多都用类似XX_printf函数调试,等os完毕了再使用printf函数
偶不太理解飞船要搞什么东东:L
宇宙飞船 2009年06月27日
本帖最后由 宇宙飞船 于 2009-6-27 23:58 编辑

8位机WINAVR 中有一个专门打开设备的函数---fdevopen( 自定串口函数)。然后就把stdout重定向到串口了。 这样可以正常使用printf 的各种功能。用C无非就是看中丰富的库函数。printf是功能最强劲的一个,因此作为使用C语言的MCU开发者是很有必要搞懂printf的使用。
一朝成名 2009年06月27日
还有就是__FILE__,__LINE__选项

Linux下调试也就这个方法了,gdb应用有限
gfd 2010年07月26日
太强了