查看: 12487|回復: 14
打印 上一主題 下一主題

[提問(wèn)] 高手請進(jìn)!ARM嵌入式開(kāi)發(fā)中GNU環(huán)境printf 重定向串口!

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2009-6-27 18:10:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
關(guān)鍵詞: arm , GNU , printf , 串口 , 嵌入式
找了一下GOOGLE ,竟發(fā)現這個(gè)問(wèn)題難倒不少人,網(wǎng)絡(luò )上好象找不到答案,不知道社區的實(shí)力如何?即管發(fā)此問(wèn)題貼,合大家之力,希望能夠解決。
沙發(fā)
發(fā)表于 2009-6-27 18:39:51 | 只看該作者
啟動(dòng)kernel時(shí)候指定終端是串口,就全定向到串口了。
板凳
發(fā)表于 2009-6-27 20:17:27 | 只看該作者
哈哈,同意ls,移植的時(shí)候不是要指定終端的嗎?

指定串口不就可以了
地板
 樓主| 發(fā)表于 2009-6-27 20:46:47 | 只看該作者
那是帶OS的用法,現在要剝去OS 直接用,也就是象以下這段的代碼就必需打到串口去,
int main (void)
{
printf("Hello World\n");     //這樣怎么重定位?默認輸出是stdout.
}
地下室
發(fā)表于 2009-6-27 21:39:39 | 只看該作者
我說(shuō)不可能這么簡(jiǎn)單
原來(lái)是下個(gè)套

看來(lái)是有準備的
6
發(fā)表于 2009-6-27 21:50:41 | 只看該作者
我沒(méi)這么用過(guò),但是想出來(lái)一個(gè)方法
那就是改printf函數,不用本來(lái)的glibc的函數原型,將printf函數寫(xiě)成一個(gè)簡(jiǎn)短的串口驅動(dòng)形式
這樣可以不?
7
 樓主| 發(fā)表于 2009-6-27 22:01:38 | 只看該作者
俺查看了WINARM  中帶有的所有例程,WINARM是用 GNU工具鏈的arm-elf-gcc 編譯,用的是newlib 庫(嵌入式專(zhuān)用庫),WINARM中帶有的所有例程,竟沒(méi)有提到printf 重定向的例程,對于使用這個(gè)重定向,作者給人的感覺(jué)要么就說(shuō)這個(gè)太簡(jiǎn)單!還用給例程嗎?要么就真是有點(diǎn)難度?
8
 樓主| 發(fā)表于 2009-6-27 22:09:04 | 只看該作者
RE:名人,為什么要花力氣搞懂這個(gè)printf的定向? 搞通這個(gè)是為以后測試開(kāi)源代碼做準備,總不可能把別人寫(xiě)的printf 全改成自已的啊,這樣會(huì )累壞人的,改一兩個(gè)絕對可以,如果很多,人會(huì )瘋的。

所以printf 的定向問(wèn)題是必需擺平搞定的!
9
發(fā)表于 2009-6-27 22:31:09 | 只看該作者
俺查了一個(gè)叫“都江的DIY OS for ARM” 的用的是arm-elf-gcc  一大堆的源碼中竟同樣沒(méi)有用到printf 重定向串口的用法,國內研究這個(gè)問(wèn)題的深度由此可見(jiàn)一斑!
10
發(fā)表于 2009-6-27 22:59:02 | 只看該作者
RE:名人,為什么要花力氣搞懂這個(gè)printf的定向? 搞通這個(gè)是為以后測試開(kāi)源代碼做準備,總不可能把別人寫(xiě)的printf 全改成自已的啊,這樣會(huì )累壞人的,改一兩個(gè)絕對可以,如果很多,人會(huì )瘋的。

所以printf 的定向問(wèn) ...
潛艇8421 發(fā)表于 2009-6-27 22:09


加一個(gè)宏定義,OK了…不用改
然后寫(xiě)自己的printf就不哦了?
11
發(fā)表于 2009-6-27 23:34:46 | 只看該作者
會(huì )產(chǎn)生沖突,編譯不可能通過(guò)的,就算能通過(guò)編譯,能正常工作嗎?
12
發(fā)表于 2009-6-27 23:40:03 | 只看該作者
我看很多都用類(lèi)似XX_printf函數調試,等os完畢了再使用printf函數
偶不太理解飛船要搞什么東東
13
發(fā)表于 2009-6-27 23:53:41 | 只看該作者
本帖最后由 宇宙飛船 于 2009-6-27 23:58 編輯

8位機WINAVR 中有一個(gè)專(zhuān)門(mén)打開(kāi)設備的函數---fdevopen( 自定串口函數)。然后就把stdout重定向到串口了。 這樣可以正常使用printf 的各種功能。用C無(wú)非就是看中豐富的庫函數。printf是功能最強勁的一個(gè),因此作為使用C語(yǔ)言的MCU開(kāi)發(fā)者是很有必要搞懂printf的使用。
14
發(fā)表于 2009-6-27 23:59:51 | 只看該作者
還有就是__FILE__,__LINE__選項

Linux下調試也就這個(gè)方法了,gdb應用有限
15
發(fā)表于 2010-7-26 10:23:31 | 只看該作者
太強了
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页