哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

TI Driverlib 標(biāo)準(zhǔn)輸出完整重定向的改進(jìn)方案

Felix愷 ? 來源:jf_58031680 ? 作者:jf_58031680 ? 2025-11-11 00:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

MCU:MSPM0G3507

前段時間在課內(nèi)做實驗的時候碰到了比較豐富的交互需求,遂打開UART,#include "stdio.h",然后開始重定向。雖然網(wǎng)上有廣為流傳的重定向方案,但是常年玩STM32的我有點迷惑:為什么TI Driverlib的重定向需要定義三個函數(shù)呢?

Trial

按照 STM32 重定向的方法,先對fputc進(jìn)行重定向:

int fputc(int _c, FILE *_fp) {
    while((UART0 - > STAT & UART_STAT_TXFF_MASK));
    UART0 - > TXDATA = _c;
    return _c;
}

觀察到,在這種重定向的方案下,printf函數(shù)可以輸出常字符串,但是無法進(jìn)行變量的格式化輸出。

根據(jù)網(wǎng)絡(luò)上的方案,補(bǔ)充fputsputs函數(shù),稍作修改:

int fputs(const char *restrict s, FILE *restrict stream) {
    uint16_t i, len;
    len = strlen(s);
    for (i = 0; i < len; i++) {
        fputc(s[i], stream);
    }
    return len;
}

int puts(const char *s) {
    int count = fputs(s, stdout);
    count += fputs("n", stdout);
    return count;
}

在這種重定向方法下,printf成功實現(xiàn)了完整的重定向,可以進(jìn)行變量的格式化輸出——但是,sprintf依然無法工作,為什么呢?

觀察三個函數(shù)的輸入?yún)?shù),其中兩個都包含了一個FILE*輸入變量,但是我們在使用的時候卻完全沒用到。找到FILE的定義:

struct __sFILE {
    int fd;                    /* File descriptor */
    unsigned char* buf;        /* Pointer to start of buffer */
    unsigned char* pos;        /* Position in buffer */
    unsigned char* bufend;     /* Pointer to end of buffer */
    unsigned char* buff_stop;  /* Pointer to last read char in buffer */
    unsigned int   flags;      /* File status flags (see below) */
};

typedef struct __sFILE FILE;

可見,在TI的庫中, FILE類型并沒有被簡單地改為簡單的存儲指針,而是依然保留了“數(shù)據(jù)流”的形式 。再結(jié)合debug中端點的觸發(fā)情況,以及函數(shù)之間的調(diào)用關(guān)系,嘗試對FILE*指針進(jìn)行寫入。若調(diào)用了puts,認(rèn)為上層的標(biāo)準(zhǔn)輸出走的是printf(),就向下傳遞空指針,將輸出導(dǎo)向 UART。如果stream不是自己設(shè)定的空指針,就去編輯stream指向的緩沖區(qū)。

Result

對重定向的三個函數(shù)進(jìn)行如下修改:

int fputc(int _c, FILE *_fp) {
    if(!(_fp)) {
        while((UART0 - > STAT & UART_STAT_TXFF_MASK));
        UART0 - > TXDATA = _c;
    }
    else
        *(_fp- >pos) = _c;
    return _c;
}

int fputs(const char* restrict s, FILE* restrict stream) {
    uint16_t i, len;
    len = strlen(s);
    for(unsigned int i=0; i < len; i++) {
        fputc(s[i], stream);
        if(stream) stream- >pos++;
    }
    return len;
}

int puts(const char *_ptr) {
    int count = fputs(_ptr,NULL);
    count += fputs("n",NULL);
    return count;
}

重定向成功,sprintfprintf均可以正常工作!

More…

那個結(jié)構(gòu)體我還沒用完,估計在重定向輸入流的時候會用到更多的元素。但是知道這些已經(jīng)足夠了,可以搞點花招,比如把UARTx → TXDATA直接丟到stream里面去,當(dāng)然FIFO只有一個入口,不需要地址偏移,這么看也是有點麻煩;或者直接把自己的指定buffer設(shè)為默認(rèn)輸出區(qū)域,等等,雖然更復(fù)雜了,但是相對于僅僅把FILE作為一個獨立指針,還是更加靈活有趣的!

實力尚淺,還請多多指教!

審核編輯 黃宇

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

    關(guān)注

    22

    文章

    1319

    瀏覽量

    106932
  • DriverLib
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    TI 攜手 NVIDIA 推出面向下一代 AI 數(shù)據(jù)中心的完整 800 VDC 電源架構(gòu)

    TI完整電源解決方案包括多個突破性的參考設(shè)計, 具備業(yè)界領(lǐng)先性能指標(biāo) TI 的 800 VDC 電源架構(gòu)最大限度地提高了整個電源路徑的轉(zhuǎn)換效率和功率密度,助力 AI 數(shù)據(jù)中心實現(xiàn)更
    的頭像 發(fā)表于 03-20 14:23 ?2.7w次閱讀
    <b class='flag-5'>TI</b> 攜手 NVIDIA 推出面向下一代 AI 數(shù)據(jù)中心的<b class='flag-5'>完整</b> 800 VDC 電源架構(gòu)

    【乾芯QXS320F開發(fā)板試用】基于printf重定向的高速串口調(diào)試方案

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

    Linux中13個基本Cat命令示例

    This is test1 file. This is test2 file. 9、使用標(biāo)準(zhǔn)輸出重定向操作符 我們可以將文件的標(biāo)準(zhǔn)輸出
    發(fā)表于 12-26 06:09

    【瑞薩RA6E2地奇星開發(fā)板試用】串口通信報錯:標(biāo)準(zhǔn)輸出流 stdout 未定義

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

    跌落試驗的核心:解析自由跌落、定向跌落等主要測試模式的區(qū)別

    從模擬隨機(jī)意外的自由跌落到精準(zhǔn)打擊的定向跌落,每一種測試模式都是通往更高產(chǎn)品可靠性道路上不可或缺的一環(huán)。北京沃華慧通測控技術(shù)有限公司提供的不僅是一臺冰冷的設(shè)備,更是一套完整的、可靠的測試解決方案。
    的頭像 發(fā)表于 11-17 08:00 ?1387次閱讀
    跌落試驗的核心:解析自由跌落、<b class='flag-5'>定向</b>跌落等主要測試模式的區(qū)別

    廣凌標(biāo)準(zhǔn)化考場建設(shè)方案的核心模塊

    一套完整的校園標(biāo)準(zhǔn)化考場建設(shè)方案,不僅是技術(shù)的集成,更是教育公平與現(xiàn)代化治理的體現(xiàn)。通過智能化、綠色化的手段,標(biāo)準(zhǔn)化考場體系為考試安全筑起堅實防線,同時推動教育資源的均衡分配。
    的頭像 發(fā)表于 11-07 18:10 ?397次閱讀
    廣凌<b class='flag-5'>標(biāo)準(zhǔn)</b>化考場建設(shè)<b class='flag-5'>方案</b>的核心模塊

    UART在5.2.0版本E2S中的重定向

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

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

    _read(int fd, char *pBuffer, int size); /* 重定向 printf 輸出 */ int _write(int fd, char *pBuffer, int
    發(fā)表于 08-29 07:02

    LWH12060YAH國產(chǎn)電源模塊完美替代TI PTH12060YAH方案

    在電子元器件國產(chǎn)化替代浪潮下,Leadway推出的LWH12060YAH電源模塊以其優(yōu)異的性能參數(shù)和完全兼容的封裝設(shè)計,成為TI PTH12060YAH的理想替代方案。關(guān)鍵參數(shù)對比指標(biāo)
    發(fā)表于 08-28 09:23

    【RA-Eco-RA6M4開發(fā)板評測】移植xprintf實現(xiàn)標(biāo)準(zhǔn)輸入輸出

    代碼 一. 前言前面我們實現(xiàn)了串口收發(fā),為了方便調(diào)試 ,我們繼續(xù)移植xprintf實現(xiàn)標(biāo)準(zhǔn)輸入輸出。雖說也可以重定向編譯器使用的標(biāo)準(zhǔn)庫的_read,_write等接口,但是移植xpr
    發(fā)表于 07-19 22:37

    20205新疆國際煤博會:礦用尋北儀提供高可靠定向解決方案

    2025新疆國際煤炭工業(yè)博覽會的收官之日,我們的MEMS尋北儀與定向短節(jié)受到一致好評,專為復(fù)雜工業(yè)場景打造,尤其適用于煤炭井下定向掘進(jìn)、鉆探軌跡控制等關(guān)鍵環(huán)節(jié),重新定義尋北技術(shù)標(biāo)準(zhǔn)!
    的頭像 發(fā)表于 07-18 15:43 ?714次閱讀
    20205新疆國際煤博會:礦用尋北儀提供高可靠<b class='flag-5'>定向</b>解決<b class='flag-5'>方案</b>

    MEMS定向短節(jié)在HDD中如何精準(zhǔn)定向?

    MEMS定向短節(jié)以自尋北原理、最新MEMS陀螺技術(shù)和捷聯(lián)慣導(dǎo)技術(shù)為復(fù)雜環(huán)境定向鉆孔提供了可靠的解決方案,保證測量和輸出精度。 用于定向鉆孔/
    的頭像 發(fā)表于 07-08 14:46 ?623次閱讀

    MEMS陀螺工具定向短節(jié)全面升級,重新定義測量標(biāo)準(zhǔn)

    在石油天然氣測井、物探、定向鉆孔等領(lǐng)域,井下軌跡測量始終面臨三大挑戰(zhàn):磁場干擾環(huán)境下的方位精度衰減,振動工況下需停鉆測量以及小井斜工況下的測量盲區(qū)。今天,ER-Gyro-15 MEMS 陀螺工具定向
    的頭像 發(fā)表于 07-01 14:58 ?1628次閱讀
    MEMS陀螺工具<b class='flag-5'>定向</b>短節(jié)全面升級,重新定義測量<b class='flag-5'>標(biāo)準(zhǔn)</b>

    為什么MEMS定向短節(jié)能引領(lǐng)鉆探未來

    在采礦設(shè)備、定向鉆孔、地質(zhì)鉆探等領(lǐng)域,精準(zhǔn)的定向測量技術(shù)是保障作業(yè)效率與安全的核心。ER-MNS-09 MEMS定向短節(jié)憑借最新MEMS陀螺技術(shù),以緊湊、可靠、高性能的設(shè)計,成為復(fù)雜環(huán)境下定向
    的頭像 發(fā)表于 06-03 17:28 ?631次閱讀
    為什么MEMS<b class='flag-5'>定向</b>短節(jié)能引領(lǐng)鉆探未來

    101040010\\101040010K定向耦合器KRYTAR

    \\101040010K定向耦合器配有符合行業(yè)標(biāo)準(zhǔn)的2.4\\2.92mm母連接器。緊湊型包裝尺寸僅為2.0英寸(長)x 0.40英寸(寬)x 0.65英寸(高),重量僅為1.3盎司。工作溫度為-54°至+85
    發(fā)表于 04-16 09:19
    平顺县| 马公市| 茌平县| 友谊县| 临夏县| 内黄县| 台东市| 吉安县| 江达县| 北票市| 永兴县| 前郭尔| 弋阳县| 措美县| 深泽县| 乐安县| 康定县| 城市| 莱西市| 库车县| 开原市| 荆州市| 米林县| 时尚| 庆安县| 嘉鱼县| 报价| 准格尔旗| SHOW| 沅陵县| 彩票| 闻喜县| 拜泉县| 太和县| 定远县| 临湘市| 宜宾县| 文昌市| 德保县| 常德市| 玉山县|