色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32的printf函數(shù)重定向方法

STM32嵌入式開(kāi)發(fā) ? 來(lái)源:CSDN ? 2023-07-10 16:22 ? 次閱讀

法1:使用MicroLIB庫(kù)

1.1 KEIL-MDK中的Use MicroLIB選項(xiàng)

在MDK開(kāi)發(fā)環(huán)境中,b79be2f4-1ef8-11ee-962d-dac502259ad0.png

MicroLib是缺省c庫(kù)的備選庫(kù),它可裝入少量?jī)?nèi)存中,與嵌入式應(yīng)用程序配合使用,且這些應(yīng)用程序不在操作系統(tǒng)中運(yùn)行。

MicroLib進(jìn)行了高度優(yōu)化以使代碼變得很小,功能比缺省c庫(kù)少,不具備某些ISO c特性,部分庫(kù)函數(shù)的運(yùn)行速度也比較慢,如內(nèi)存拷貝函數(shù)memcpy()。MicroLib與缺省c庫(kù)之間的主要差異在網(wǎng)上有許多文章都有寫到,這里摘抄記錄:
  • MicroLib 不符合 ISO C 庫(kù)標(biāo)準(zhǔn)。不支持某些 ISO 特性,并且其他特性具有的功能也較少。
  • MicroLib 不符合 IEEE 754 二進(jìn)制浮點(diǎn)算法標(biāo)準(zhǔn)。
  • MicroLib 進(jìn)行了高度優(yōu)化以使代碼變得很小。
  • 無(wú)法對(duì)區(qū)域設(shè)置進(jìn)行配置。缺省 C 區(qū)域設(shè)置是唯一可用的區(qū)域設(shè)置。
  • 不能將 main() 聲明為使用參數(shù),并且不能返回內(nèi)容。
  • 不支持 stdio,但未緩沖的 stdin、stdout 和 stderr 除外。
  • MicroLib對(duì) C99 函數(shù)提供有限的支持。
  • MicroLib不支持操作系統(tǒng)函數(shù)。
  • MicroLib不支持與位置無(wú)關(guān)的代碼。
  • MicroLib不提供互斥鎖來(lái)防止非線程安全的代碼。
  • MicroLib不支持寬字符或多字節(jié)字符串。
  • 與stdlib不同,MicroLib不支持可選擇的單或雙區(qū)內(nèi)存模型。MicroLib只提供雙區(qū)內(nèi)存模型,即單獨(dú)的堆棧和堆區(qū)。
MicroLib提供了一個(gè)有限的stdio子系統(tǒng),它僅支持未緩沖的stdin、stdout和stderr,那么也就是說(shuō)勾選了Use MicroLib選項(xiàng)后,在代碼工程中就可以使用printf()函數(shù)咯?然而事實(shí)并非如此,這樣直接使用printf()函數(shù),其打印的字符串最終不知道打印到何處。我們要做的是將調(diào)試信息打印到USART1中,所以需要對(duì)printf()函數(shù)所依賴的打印輸出函數(shù)fputc()重定向(MicroLib中的printf()函數(shù)打印操作依賴fputc())。

1.2 重定向fputc函數(shù)

在MicroLib的stdio.h中,fputc()函數(shù)的原型為:b7d131f2-1ef8-11ee-962d-dac502259ad0.png此函數(shù)原本是將字符ch打印到文件指針stream所指向的文件流去的,現(xiàn)在我們不需要打印到文件流,而是打印到串口1?;谇懊娴拇a:b7e98db0-1ef8-11ee-962d-dac502259ad0.png注意,需要包含頭文件stdio.h,否則FILE類型未定義。勾選了Use MicroLib選項(xiàng),重定向fputc()函數(shù)后,我們就可以在工程代碼中使用printf()函數(shù)了:b8107fec-1ef8-11ee-962d-dac502259ad0.pngprintf()函數(shù)的使用方法跟之前一樣,運(yùn)行結(jié)果:b829fdd2-1ef8-11ee-962d-dac502259ad0.png

法2:不使用MicroLIB庫(kù)

2.1 半主機(jī)模式

半主機(jī)模式是ARM的一種機(jī)制,實(shí)現(xiàn)將來(lái)ARM應(yīng)用程序代碼的輸入/輸出請(qǐng)求傳送至運(yùn)行著調(diào)試器的主機(jī)。例如設(shè)置使用半主機(jī)模式下的ARM應(yīng)用程序,可以使用printf()和scanf()來(lái)使用主機(jī)的顯示器和鍵盤,而不需要在ARM系統(tǒng)上搭配顯示器和鍵盤。半主機(jī)通過(guò)一組定義好的軟件指令(如SVC)來(lái)實(shí)現(xiàn)的,這些指令在程序控制下產(chǎn)生異常,ARM應(yīng)用程序調(diào)用半主機(jī)對(duì)應(yīng)的異常處理函數(shù),然后調(diào)試代理處理該異常。一般的ARM應(yīng)用程序中并不需要半主機(jī)操作,在這里為確保ARM應(yīng)用程序中沒(méi)有鏈接MicroLib的半主機(jī)相關(guān)函數(shù),我們要取消ARM的半主機(jī)工作模式。

2.2 實(shí)現(xiàn)代碼

在工程中加上如下代碼:b8696634-1ef8-11ee-962d-dac502259ad0.png這樣操作后,在不使用MicroLib的前提下,仍能使用printf()函數(shù)將調(diào)試信息打印到USART1上了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6801

    瀏覽量

    123285
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10895

    瀏覽量

    355744
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4327

    瀏覽量

    62573

原文標(biāo)題:STM32的printf函數(shù)重定向方法

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    stdio.h實(shí)現(xiàn)了printf函數(shù)?

    我們平時(shí)包含的 stdio.h 頭文件,里面是不是實(shí)現(xiàn)了 printf 函數(shù)? 為什么會(huì)有這個(gè)疑問(wèn)?因?yàn)槊看问褂?printf,就得包含 stdio.h ,這就導(dǎo)致很多同學(xué)誤以為,stdio.h
    的頭像 發(fā)表于 12-18 10:28 ?85次閱讀

    嵌入式 學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之輸入輸出重定向

    終端)更改為從指定文件中獲取。輸出重定向使用方法:1.命令 > 文件名(將命令執(zhí)行的結(jié)果輸出到文件中,輸出的結(jié)果會(huì)覆蓋掉文件原來(lái)的內(nèi)容)。2.命令 &gt
    發(fā)表于 09-24 10:06

    飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之輸入輸出重定向

    重定向使用方法:1.命令 > 文件名(將命令執(zhí)行的結(jié)果輸出到文件中,輸出的結(jié)果會(huì)覆蓋掉文件原來(lái)的內(nèi)容)。2.命令 >> 文件名(將命令
    發(fā)表于 09-23 10:23

    重定向了fputc及putchar函數(shù),但printf沒(méi)有輸出,為什么?

    重定向了fputc及putchar函數(shù),但printf沒(méi)有輸出 刪除了drivers/drv_uart.c drv_uart.h 刪除了文件rt-thread\\components
    發(fā)表于 07-18 07:44

    esp32c3能不能將串口打印函數(shù)重定向到自己軟件模擬的uart上?

    模擬uart,用于打印日志;請(qǐng)問(wèn)這種做法可以實(shí)現(xiàn)嗎?可以將打印函數(shù)重定向到該模擬uart嗎?如果可以,麻煩指導(dǎo)一下重定向需要修改哪幾個(gè)函數(shù)? ps:打印的
    發(fā)表于 06-20 06:32

    請(qǐng)問(wèn)如何將printf使用的stdout重定向到asclin?

    /v4.9.3.0-infineon-1.0/docs/userguide.pdf 第 406 頁(yè)中關(guān)于 printf 的唯一說(shuō)明是 stdout 重定向到模擬 io 調(diào)試器。 當(dāng)然,您可以使用 Ifx_Console_print,但我想知道是否可以通過(guò)標(biāo)準(zhǔn)庫(kù)來(lái)實(shí)現(xiàn)。
    發(fā)表于 06-03 06:48

    芯海通用 MCU應(yīng)用筆記 :在 IAR 及 MDK 開(kāi)發(fā)環(huán)境下使用 printf 函數(shù)重定向移植差異指南

    對(duì) printf 函數(shù)支持的差異。并在本應(yīng)用筆記結(jié)尾處給出可以一鍵移植到 Keil、IAR8.x、IAR9.x 版本下的通用重定向代碼。 Keil 和 IAR 都是常用的開(kāi)發(fā)工具 IDE,在實(shí)際項(xiàng)目開(kāi)發(fā)
    發(fā)表于 05-16 11:56

    STM32F103RCT6串口重定向數(shù)據(jù)發(fā)送和接收,如何才能不接收MCU發(fā)出去的數(shù)據(jù)?

    不知道各位有沒(méi)有出現(xiàn)過(guò)這樣的情況,我使用STM32F103RCT6芯片編寫串口程序,重定向printf函數(shù)到串口1,數(shù)據(jù)可以正常地發(fā)送和接收,但是有個(gè)問(wèn)題 我仿真的時(shí)候發(fā)現(xiàn),我每次用
    發(fā)表于 05-16 08:25

    求助,關(guān)于HAL下的printf重定向輸出疑問(wèn)求解

    (1)網(wǎng)上查了使用printf重定向,串口輸出,函數(shù)如下,使用HAL_UART_Transmit函數(shù)。 int fputc(int ch,FILE *f) { uint8_t tem
    發(fā)表于 05-10 06:04

    STM8S如何在STVD環(huán)境下重定向printf函數(shù)實(shí)現(xiàn)UART簡(jiǎn)化輸出?

    printf(),網(wǎng)上IAR環(huán)境的重定向調(diào)通了,求STVD環(huán)境下的code。 3. 用STM8的官方例程UART1_Printf在STVD環(huán)境下編譯OK,但是debug時(shí)候報(bào)錯(cuò)下載不了程序 4. 針對(duì)3
    發(fā)表于 04-30 08:29

    STM8L051片子使用重定向printf函數(shù)時(shí)總是報(bào)錯(cuò),沒(méi)辦法引用printf函數(shù)是什么原因?

    STM8L051片子使用重定向printf函數(shù)時(shí)總是報(bào)錯(cuò),沒(méi)辦法引用printf函數(shù),不知道是什么原因,使用的是IAR編譯器,總是報(bào)內(nèi)存不足
    發(fā)表于 04-28 08:05

    用keil仿真無(wú)法用printf打印怎么解決?

    用keil仿真 無(wú)法用printf打印.想用printf重定向到Usart1的方法,使printf打印信息能夠在UART#1的窗口打印出來(lái).
    發(fā)表于 04-11 08:20

    STM32CubeIDE中打印重定向報(bào)錯(cuò)怎么解決?

    HAL_UART_Transmit( huart1 , (uint8_t *) ch, 1, 0xFFFF);報(bào)錯(cuò) printf重定向 報(bào)錯(cuò)../Core/Src/main.c:42:21: error: \'huart1\' undeclared 已添加stdio.h頭
    發(fā)表于 04-03 07:33

    H7平臺(tái)如何重定向sqrtf函數(shù)到RAM中運(yùn)行?

    如題,H7平臺(tái)如何重定向sqrtf函數(shù)到RAM中運(yùn)行,這個(gè)函數(shù)是庫(kù)函數(shù),不能使用__ramfunc前綴,有什么方法或是例程,網(wǎng)上找了很多ic
    發(fā)表于 03-27 06:40

    2分鐘搞懂輸出重定向

    視頻最后我們通過(guò)重定向把標(biāo)準(zhǔn)輸出寫到了文件中,但是錯(cuò)誤輸出還是留在了屏幕上。
    的頭像 發(fā)表于 01-15 16:41 ?552次閱讀
    主站蜘蛛池模板: 在线精品视频成人网| 国产白浆视频在线播放| 国内精品乱码卡一卡2卡三卡| 免费国产在线观看| 亚洲国产精品一区二区三区在线观看 | 和姐姐做插得很深| 日本精品久久久久中文字幕2| 伊人大香线蕉影院在线播放| 国产超嫩一线天在线播放| 男生插女生下体| 长泽梓黑人初解禁bdd07| 国产亚洲美女在线视频视频| 日本视频一区二区免费观看| 97精品国产高清在线看入口| 精品免费久久久久久影院| 午夜阳光影院在线观看视频| 超碰97 总站 中文字幕| 免费色片播放器| 特级淫片大乳女子高清视频 | 欧美日韩国产高清综合二区| 樱花草在线影视WWW日本动漫| 国产欧美一本道无码| 色偷偷亚洲男人天堂| yw193龙物免费官网在线| 男男被强bl高h文| 中文字幕在线视频网站| 久久AV无码AV高潮AV不卡| 亚洲国产精品无码中文字满| 国产美女一区二区| 偷窥美女3| 国产浮力草草影院CCYY| 日本一区二区三区在线观看网站| a毛片基地免费全部视频| 男女作爱在线播放免费网页版观看| 曰本xxⅹ孕妇性xxx| 久久99国产精品无码AV| 亚洲人成色777777老人头| 国产一区二区三区国产精品| 亚州性夜夜射在线观看| 国产精品热久久高潮AV袁孑怡| 无码国产成人777爽死在线观看 |