查看: 11170|回复: 14

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

[复制链接]
发表于 2009-6-27 18:10:38 | 显示全部楼层 |阅读模式
关键词: arm , GNU , printf , 串口 , 嵌入式
找了一下GOOGLE ,竟发现这个问题难倒不少人,网络上好象找不到答案,不知道社区的实力如何?即管发此问题贴,合大家之力,希望能够解决。
发表于 2009-6-27 18:39:51 | 显示全部楼层
启动kernel时候指定终端是串口,就全定向到串口了。
发表于 2009-6-27 20:17:27 | 显示全部楼层
哈哈,同意ls,移植的时候不是要指定终端的吗?

指定串口不就可以了
 楼主| 发表于 2009-6-27 20:46:47 | 显示全部楼层
那是带OS的用法,现在要剥去OS 直接用,也就是象以下这段的代码就必需打到串口去,
int main (void)
{
printf("Hello World\n");     //这样怎么重定位?默认输出是stdout.
}
发表于 2009-6-27 21:39:39 | 显示全部楼层
我说不可能这么简单
原来是下个套

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

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

所以printf 的定向问 ...
潜艇8421 发表于 2009-6-27 22:09


加一个宏定义,OK了…不用改
然后写自己的printf就不哦了?
发表于 2009-6-27 23:34:46 | 显示全部楼层
会产生冲突,编译不可能通过的,就算能通过编译,能正常工作吗?
发表于 2009-6-27 23:40:03 | 显示全部楼层
我看很多都用类似XX_printf函数调试,等os完毕了再使用printf函数
偶不太理解飞船要搞什么东东
发表于 2009-6-27 23:53:41 | 显示全部楼层
本帖最后由 宇宙飞船 于 2009-6-27 23:58 编辑

8位机WINAVR 中有一个专门打开设备的函数---fdevopen( 自定串口函数)。然后就把stdout重定向到串口了。 这样可以正常使用printf 的各种功能。用C无非就是看中丰富的库函数。printf是功能最强劲的一个,因此作为使用C语言的MCU开发者是很有必要搞懂printf的使用。
发表于 2009-6-27 23:59:51 | 显示全部楼层
还有就是__FILE__,__LINE__选项

Linux下调试也就这个方法了,gdb应用有限
发表于 2010-7-26 10:23:31 | 显示全部楼层
太强了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表