• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 瑞薩RA0單片機(jī)連載——實(shí)現(xiàn)串口重定向之printf

    瑞薩RA0單片機(jī)連載——實(shí)現(xiàn)串口重定向之printf

    作者:lulugl 時(shí)間:2024-11-22 來(lái)源:EEPW 收藏

    1   目的

    本文引用地址:http://www.czjhyjcfj.com/article/202411/464858.htm

    的調(diào)試中,我們?nèi)粘5娜罩据敵觯ǔJ峭ㄟ^(guò)串口來(lái)實(shí)現(xiàn),而通過(guò)串口重定向來(lái)實(shí)現(xiàn)又是常規(guī)的操作之一。這次我在前面的基礎(chǔ)之上增加了 的面向?qū)ο蟮脑黾舆@項(xiàng)功能。

    2   實(shí)現(xiàn)步驟

    1.在工程中添加.c 函數(shù),并把他加入到libs的分組之中。

    1732237973236708.png

    2.在工程的設(shè)置中,打開(kāi)Use MincroLIB庫(kù)。

    1732238008386481.png

    3.在.c中,添加對(duì)輸入輸出的系統(tǒng)頭文件<stdio.h>的引用,當(dāng)然由于我需要調(diào)用驅(qū)動(dòng)庫(kù)要添加<devices.h>以及<hal_data.h>的引用。

    4.重寫fputc輸出,在此函數(shù)中,我先查找Log 這個(gè)串口的驅(qū)動(dòng),如果查找到,則使用他的write 進(jìn)行串口輸出,代碼如下:

    view plaincopy to clipboardprint?

    1. int fputc(int ch, FILE *f)

    2. {

    3. (void)f;

    4. struct UartDev *pLogDevice = UartDeviceFind

    (“Log”);

    5. pLogDevice->Write(pLogDevice, (unsigned

    char*)&ch, 1);

    6. return ch;

    7. }

    5.重寫scanf 函數(shù),在這個(gè)函數(shù)中,我也一樣先查找以”Log”命名的串口,如果查找到,則使用這個(gè)驅(qū)動(dòng)的write 進(jìn)行輸出。其代碼如下:

    view plaincopy to clipboardprint?

    1. int fgetc(FILE *f)

    2. {

    3. uint8_t ch;

    4.

    5. (void)f;

    6. struct UartDev *pLogDevice = UartDeviceFind

    7. /* 啟動(dòng)接收字符 */

    8. while(pLogDevice->Read(pLogDevice,

    (unsigned char*)&ch, 1) != 1)

    9. {}

    10. /* 回顯 */

    11. {

    12. fputc(ch, &__stdout);

    13.

    14. /* 回車之后加換行 */

    15. if (ch == ‘r’)

    16. {

    17. fputc(‘n’, &__stdout);

    18. }

    19. }

    20.

    21. return (int)ch;

    22. }

    6. 驅(qū)動(dòng)設(shè)置好后,就可以在工程中使用printf 進(jìn)行串口輸出了。

    添加測(cè)試代碼如下:

    view plaincopy to clipboardprint?

    1. void led_blink(void)

    2. {

    3. uint32_t cnt;

    4. UartDevicesRegister();

    5.

    6. LedDevice *pLED = LedGetDevice();

    7. if(NULL == pLED)

    8. {

    9. printf(“Error. There is no LED device!rn”);

    10. return;

    11. }

    12. pLED->Init(pLED);

    13.

    14. while(1)

    15. {

    16. cnt++;

    17. pLED->On(1);

    18. R_BSP_SoftwareDelay(1,BSP_DELAY_

    UNITS_SECONDS);

    19. pLED->Off (1);

    20. R_BSP_SoftwareDelay(1,BSP_DELAY_

    UNITS_SECONDS);

    21. pLED->On(2);

    22. R_BSP_SoftwareDelay(1,BSP_DELAY_

    UNITS_SECONDS);

    23. pLED->Off (2);

    24. R_BSP_SoftwareDelay(1,BSP_DELAY_

    UNITS_SECONDS);

    25. printf(“run cnt %drn”,cnt);

    26.

    27. }

    28. }

    測(cè)試結(jié)果如下:

    1732238117760102.png

    3   總結(jié)

    使用面向?qū)ο笾幊蹋梢詫?shí)現(xiàn)代碼的快遞移植,當(dāng)然重寫printf 也是非常之簡(jiǎn)單。

    (本文來(lái)源于《EEPW》2024年11期)



    關(guān)鍵詞: 202411 瑞薩 RA0 單片機(jī) printf

    評(píng)論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 兰西县| 石门县| 德安县| 乐平市| 璧山县| 盐源县| 内黄县| 鄯善县| 江口县| 疏勒县| 大方县| 西贡区| 西吉县| 涞水县| 张北县| 秦皇岛市| 崇明县| 丹江口市| 大安市| 邵阳县| 淮南市| 精河县| 安乡县| 肇源县| 达日县| 扶风县| 罗甸县| 泸溪县| 天全县| 平阴县| 荣成市| 鱼台县| 兴宁市| 隆化县| 新疆| 于田县| 原阳县| 手游| 白玉县| 满洲里市| 右玉县|