国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32的printf函數重定向方法

STM32嵌入式開發 ? 來源:CSDN ? 2023-07-10 16:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

法1:使用MicroLIB庫

1.1 KEIL-MDK中的Use MicroLIB選項

在MDK開發環境中,b79be2f4-1ef8-11ee-962d-dac502259ad0.png

MicroLib是缺省c庫的備選庫,它可裝入少量內存中,與嵌入式應用程序配合使用,且這些應用程序不在操作系統中運行。

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

1.2 重定向fputc函數

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

法2:不使用MicroLIB庫

2.1 半主機模式

半主機模式是ARM的一種機制,實現將來ARM應用程序代碼的輸入/輸出請求傳送至運行著調試器的主機。例如設置使用半主機模式下的ARM應用程序,可以使用printf()和scanf()來使用主機的顯示器和鍵盤,而不需要在ARM系統上搭配顯示器和鍵盤。半主機通過一組定義好的軟件指令(如SVC)來實現的,這些指令在程序控制下產生異常,ARM應用程序調用半主機對應的異常處理函數,然后調試代理處理該異常。一般的ARM應用程序中并不需要半主機操作,在這里為確保ARM應用程序中沒有鏈接MicroLib的半主機相關函數,我們要取消ARM的半主機工作模式。

2.2 實現代碼

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 操作系統
    +關注

    關注

    37

    文章

    7401

    瀏覽量

    129284
  • STM32
    +關注

    關注

    2309

    文章

    11162

    瀏覽量

    373415
  • 函數
    +關注

    關注

    3

    文章

    4417

    瀏覽量

    67502

原文標題:STM32的printf函數重定向方法

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    將C庫的printf函數重定向到UART的過程

    printf (option LD Linker->Libraries->Small printf set to \'Yes\') calls __io_putchar
    發表于 01-21 07:14

    【乾芯QXS320F開發板試用】基于printf重定向的高速串口調試方案

    。 二、代碼分析 核心代碼的邏輯是通過重定向(Retarget) C語言標準庫的 printf 和 puts 函數,使得原本輸出到控制臺的內容,改由芯片的物理串口(SCI)發出。這一點以前做過
    發表于 01-07 17:30

    在ADS編譯器中,用標準的C庫函數printf()需要哪些設置呢?

    在ADS編譯器中,用標準的C庫函數printf()需要哪些設置呢?又在哪兒可以看到printf()輸出的信息呢?
    發表于 12-23 07:32

    【瑞薩RA6E2地奇星開發板試用】串口通信報錯:標準輸出流 stdout 未定義

    在跟著官方串口通信報錯: 問題可能是: 使用了 printf 或類似標準庫函數 但未實現重定向到串口所需的基礎設施 LLVM 工具鏈(Clang/LD)無法找到 stdout 的定義 已知在
    發表于 12-17 18:39

    請問CW32F003支持printf函數嗎?

    CW32F003支持printf函數嗎?
    發表于 11-21 07:48

    printf重定向之后無法運行是怎么回事?

    參考 CW32F003_StandardPeripheralLib_V1.6ExamplesUARTUART_Printf,在代碼中添加了#ifdef __GNUC__ /* With GCC
    發表于 11-13 08:07

    TI Driverlib 標準輸出完整重定向的改進方案

    探索出了一種用于TI Driverlib的完整輸出重定向方案
    的頭像 發表于 11-11 00:33 ?460次閱讀

    UART在5.2.0版本E2S中的重定向

    隨著FSP庫版本更新到5.2.0,在開發過程中就會發現4.0.0版本的串口重定義并不適用于最新版本。繼續使用原來的重定向代碼時,編譯器就會報錯。根據報錯的信息發現,缺少了幾個函數的定義,這里補全定義即可。
    的頭像 發表于 10-31 15:28 ?4011次閱讀
    UART在5.2.0版本E2S中的<b class='flag-5'>重定向</b>

    printf函數在hbird SDK中的應用

    在helloworld的例程中,使用到了printf函數,通過串口輸出了數據。 在Nuclei Studio中通過teminal窗口可以查看串口打印的信息。 這背后的原理是什么? 在嵌入式
    發表于 10-31 08:48

    e203仿真helloworld例程printf能在終端顯示的原理

    名是有特殊意義的,它會將printf的字符輸出重定向到這里,通過這個函數傳遞參數、輸出數據。 __WEAK表示這個函數是弱定義。如果我們想通過其他方式
    發表于 10-27 06:56

    【RA4E2開發板評測】FSP5.2之后的串口重定向問題解決方法

    代碼時,編譯器就會報錯。 根據報錯的信息發現,缺少了幾個函數的定義,這里補全定義即可。 【解決方法】 在野火的教程里有提到過如何處理的方法。 添加重定向
    發表于 08-29 07:02

    STM32的DCode bus是連接到bus matrix的嗎?

    matirx的4個master的其中一個,和前面圖相符,但又和參考手冊對dcode的描述不符。 以上好像描述不符的地方,我猜測這種矛盾可能的原因是,因為sram也可以重定向到0x00000000,當
    發表于 06-17 07:40

    【瑞薩RA2L1入門學習】+Uasrt輸出

    ,這是因為MCU使用的串口是TTL串口,而PC使用USB串口。 3.新建工程配置屬性 重定向printf輸出到串口 需要添加一段代碼來將 printf 輸出重定向到串口UAR
    發表于 03-31 13:47

    多晶硅錠定向凝固生長方法

    鑄錠澆注法是較早出現的一種技術,該方法先將硅料置于熔煉坩堝中加熱熔化,隨后利用翻轉機械將其注入模具內結晶凝固,最初主要用于生產等軸多晶硅。近年來,為提升多晶硅電池轉換效率,通過控制模具中熔體凝固過程的溫度,創造定向散熱條件,從而獲得定向
    的頭像 發表于 03-13 14:41 ?1303次閱讀

    STM32CubeIDE STM32H743XIH6串口無法重定向,且發送內容波特率不對亂碼怎么解決?

    STM32CubeIDE重定向無效果,且使用HAL_UART_Transmit(&huart1, (uint8_t *)\"0123rn\", sizeof
    發表于 03-11 06:42