法1:使用MicroLIB庫
1.1 KEIL-MDK中的Use MicroLIB選項(xiàng)
在MDK開發(fā)環(huán)境中,
MicroLib是缺省c庫的備選庫,它可裝入少量內(nèi)存中,與嵌入式應(yīng)用程序配合使用,且這些應(yīng)用程序不在操作系統(tǒng)中運(yùn)行。
MicroLib進(jìn)行了高度優(yōu)化以使代碼變得很小,功能比缺省c庫少,不具備某些ISO c特性,部分庫函數(shù)的運(yùn)行速度也比較慢,如內(nèi)存拷貝函數(shù)memcpy()。MicroLib與缺省c庫之間的主要差異在網(wǎng)上有許多文章都有寫到,這里摘抄記錄:- MicroLib 不符合 ISO C 庫標(biāo)準(zhǔn)。不支持某些 ISO 特性,并且其他特性具有的功能也較少。
- MicroLib 不符合 IEEE 754 二進(jìn)制浮點(diǎn)算法標(biāo)準(zhǔn)。
- MicroLib 進(jìn)行了高度優(yōu)化以使代碼變得很小。
- 無法對區(qū)域設(shè)置進(jìn)行配置。缺省 C 區(qū)域設(shè)置是唯一可用的區(qū)域設(shè)置。
- 不能將 main() 聲明為使用參數(shù),并且不能返回內(nèi)容。
- 不支持 stdio,但未緩沖的 stdin、stdout 和 stderr 除外。
- MicroLib對 C99 函數(shù)提供有限的支持。
- MicroLib不支持操作系統(tǒng)函數(shù)。
- MicroLib不支持與位置無關(guān)的代碼。
- MicroLib不提供互斥鎖來防止非線程安全的代碼。
- MicroLib不支持寬字符或多字節(jié)字符串。
- 與stdlib不同,MicroLib不支持可選擇的單或雙區(qū)內(nèi)存模型。MicroLib只提供雙區(qū)內(nèi)存模型,即單獨(dú)的堆棧和堆區(qū)。
1.2 重定向fputc函數(shù)
在MicroLib的stdio.h中,fputc()函數(shù)的原型為:



法2:不使用MicroLIB庫
2.1 半主機(jī)模式
半主機(jī)模式是ARM的一種機(jī)制,實(shí)現(xiàn)將來ARM應(yīng)用程序代碼的輸入/輸出請求傳送至運(yùn)行著調(diào)試器的主機(jī)。例如設(shè)置使用半主機(jī)模式下的ARM應(yīng)用程序,可以使用printf()和scanf()來使用主機(jī)的顯示器和鍵盤,而不需要在ARM系統(tǒng)上搭配顯示器和鍵盤。半主機(jī)通過一組定義好的軟件指令(如SVC)來實(shí)現(xiàn)的,這些指令在程序控制下產(chǎn)生異常,ARM應(yīng)用程序調(diào)用半主機(jī)對應(yīng)的異常處理函數(shù),然后調(diào)試代理處理該異常。一般的ARM應(yīng)用程序中并不需要半主機(jī)操作,在這里為確保ARM應(yīng)用程序中沒有鏈接MicroLib的半主機(jī)相關(guān)函數(shù),我們要取消ARM的半主機(jī)工作模式。2.2 實(shí)現(xiàn)代碼
在工程中加上如下代碼:
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7261瀏覽量
127902 -
STM32
+關(guān)注
關(guān)注
2301文章
11075瀏覽量
369403 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4400瀏覽量
66376
原文標(biāo)題:STM32的printf函數(shù)重定向方法
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
熱點(diǎn)推薦
【RA4E2開發(fā)板評測】FSP5.2之后的串口重定向問題解決方法
代碼時(shí),編譯器就會報(bào)錯(cuò)。 根據(jù)報(bào)錯(cuò)的信息發(fā)現(xiàn),缺少了幾個(gè)函數(shù)的定義,這里補(bǔ)全定義即可。
【解決方法】
在野火的教程里有提到過如何處理的方法。
添加重定向
發(fā)表于 08-29 07:02
MEMS定向短節(jié)在HDD中如何精準(zhǔn)定向?
? 水平定向鉆孔作業(yè)時(shí),常規(guī)傳感器在強(qiáng)電磁區(qū)等復(fù)雜環(huán)境中常常面臨地磁場失效導(dǎo)致方位基準(zhǔn)崩塌、劇烈震動與沖擊破壞姿態(tài)測量、空間限制傳感器集成等一系列精度挑戰(zhàn),ER-MNS-09(下文稱為“09”)這款
STM32的DCode bus是連接到bus matrix的嗎?
matirx的4個(gè)master的其中一個(gè),和前面圖相符,但又和參考手冊對dcode的描述不符。
以上好像描述不符的地方,我猜測這種矛盾可能的原因是,因?yàn)閟ram也可以重定向到0x00000000,當(dāng)
發(fā)表于 06-17 07:40
【瑞薩RA2L1入門學(xué)習(xí)】+Uasrt輸出
,這是因?yàn)镸CU使用的串口是TTL串口,而PC使用USB串口。
3.新建工程配置屬性
重定向printf輸出到串口
需要添加一段代碼來將 printf 輸出重定向到串口UAR
發(fā)表于 03-31 13:47
解鎖TSMaster fifo函數(shù):報(bào)文讀取的高效方法
前言:TSMaster目前有兩種讀取報(bào)文的模式:回調(diào)函數(shù)模式和fifo模式。fifo函數(shù)是TSMaster近期新增的函數(shù),本文將重點(diǎn)介紹fifo模塊。關(guān)于回調(diào)函數(shù)的使用

多晶硅錠定向凝固生長方法
鑄錠澆注法是較早出現(xiàn)的一種技術(shù),該方法先將硅料置于熔煉坩堝中加熱熔化,隨后利用翻轉(zhuǎn)機(jī)械將其注入模具內(nèi)結(jié)晶凝固,最初主要用于生產(chǎn)等軸多晶硅。近年來,為提升多晶硅電池轉(zhuǎn)換效率,通過控制模具中熔體凝固過程的溫度,創(chuàng)造定向散熱條件,從而獲得定向
STM32CUBEide有沒有像KEIL一樣可以自己指定函數(shù)注釋模板的方法?
最近從keil轉(zhuǎn)到CUBEIDE編程了,現(xiàn)在非常不舒服的一點(diǎn)是函數(shù)注釋方面。STM32CUBEide有沒有像KEIL一樣可以自己指定函數(shù)注釋模板的方法,可以注釋
發(fā)表于 03-11 08:06
STM32CubeIDE STM32H743XIH6串口無法重定向,且發(fā)送內(nèi)容波特率不對亂碼怎么解決?
STM32CubeIDE重定向無效果,且使用HAL_UART_Transmit(&huart1, (uint8_t *)\"0123rn\", sizeof
發(fā)表于 03-11 06:42
STM32C031C6使用的是UART2通訊,通過printf()函數(shù)發(fā)送字符串時(shí),漢字錯(cuò)碼怎么解決?
使用的是UART2通訊,通過printf()函數(shù)發(fā)送字符串時(shí),漢字錯(cuò)碼(見下圖),應(yīng)該是KEIL哪里沒有設(shè)置好的問題。
啟用了UART2的中斷接收,可以接收到串口調(diào)試助手的數(shù)據(jù),但是緩存區(qū)的指針沒有歸零,下次接收時(shí)緩存區(qū)中的內(nèi)容接續(xù)(如下圖所示),不知道用什么命令來清除
發(fā)表于 03-07 12:30
DeepSeek獲殊榮,成為ai.com重定向官網(wǎng)
近日,記者發(fā)現(xiàn),在瀏覽器中輸入“ai.com”這一頂級域名時(shí),頁面將直接重定向至DeepSeek的官方網(wǎng)站。這一變化引起了業(yè)界的廣泛關(guān)注,標(biāo)志著DeepSeek在人工智能領(lǐng)域的地位得到了高度認(rèn)可
【瑞薩RA2L1入門學(xué)習(xí)】00、開發(fā)板開箱及串口輸出實(shí)現(xiàn)
debug_uart9_callback,在函數(shù)里我們需要根據(jù)不同的中斷情況進(jìn)行相應(yīng)的處理。
2.3.3 重定向printf輸出到串口
雖然我們可以直接使用 R_SCI_UART_Write
發(fā)表于 01-24 18:10
全面掌握Linux重定向技巧:讓命令行操作效率翻倍的秘密
#1 linux輸出重定向 $ command > file 2>1 這里的 ,表示重定向的目標(biāo)不是一個(gè) 文件 ,而是一個(gè) 文件描述符 ,內(nèi)置的文件描述符如下 1 => stdout2
stdio.h實(shí)現(xiàn)了printf函數(shù)?
我們平時(shí)包含的 stdio.h 頭文件,里面是不是實(shí)現(xiàn)了 printf 函數(shù)? 為什么會有這個(gè)疑問?因?yàn)槊看问褂?printf,就得包含 stdio.h ,這就導(dǎo)致很多同學(xué)誤以為,stdio.h
【RA-Eco-RA4E2-64PIN-V1.0開發(fā)板試用】02、UART串口通信
= 1;
break;
}
default:
break;
}
}
還是在debug_bsp_uart.c文件中,加入重定向 printf 輸出的函數(shù)
/* 重定向
發(fā)表于 12-14 11:44
51單片機(jī)中為什么很少出現(xiàn)printf的身影
流,他能跟外部交互的,只有串口。 51單片機(jī)用的開發(fā)語言是C語言,雖然跟標(biāo)準(zhǔn)C有點(diǎn)區(qū)別,但是 printf 函數(shù)還是可以用的,只要修改 printf 的輸

評論