新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 串口實驗printf輸出是亂碼

        串口實驗printf輸出是亂碼

        作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
        問題1(與編譯軟件無關(guān)):在程序中加入printf語句實現(xiàn)串口輸出,但未寫重定向函數(shù)fputc,出現(xiàn)編譯無任何警號和錯誤直接下載無法運(yùn)行,軟件仿真可以運(yùn)行至MAIN函數(shù),硬件仿真在匯編窗口看到停留在“0x0800XXXXBEABBKPT0xAB//進(jìn)入調(diào)試模式”處無法繼續(xù)運(yùn)行。

        解決辦法:編寫fputc函數(shù)如下:
        intfputc(intch,FILE*f)
        {
        USART_SendData(USART1,(uint8_t)ch);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET)
        {}
        returnch;
        }

        問題2(與編譯軟件有關(guān)):重定向函數(shù)fputc編寫無誤,使用的是MDK4.22-3.40之間的編譯環(huán)境,未使用微庫,即MiclroLIB,因printf()之類的函數(shù),使用了半主機(jī)模式。使用微庫的話,不會使用半主機(jī)模式,所以就沒有問題。

        解決辦法:在optionfortarget->target對話框中,選擇UseMiclroLIB,重新編譯程序即可。

        問題3:重定向函數(shù)fputc編寫無誤,不用微庫,即MiclroLIB,依然可以使用printf

        解決辦法:
        在程序中加入如下語句:
        #pragmaimport(__use_no_semihosting)
        _sys_exit(intx)
        {
        x=x;
        }
        struct__FILE
        {
        inthandle;



        };

        FILE__stdout;

        此代碼功能用于避免使用semhosting(半主機(jī)模式)

        問題4:使用的是MDK4.22-3.40之間的編譯環(huán)境,不想使用微庫,也不想加入問題三語句。

        解決辦法:
        更換低版本的MDK,3.4以下吧,本人試驗使用mdk3.24不勾選MiclroLIB,也不加入問題三語句,能夠正常使用printf,無任何問題。


        關(guān)鍵詞: 串口實驗printf輸出亂

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 镇赉县| 开化县| 杭州市| 阿克苏市| 连江县| 太白县| 水城县| 新建县| 墨江| 九台市| 那坡县| 陵川县| 桦甸市| 乾安县| 含山县| 夏津县| 合山市| 沙洋县| 青阳县| 九江县| 双城市| 揭东县| 鱼台县| 静乐县| 鹿泉市| 合水县| 桑日县| 五河县| 双辽市| 赤水市| 丰原市| 武冈市| 特克斯县| 南乐县| 小金县| 丹阳市| 京山县| 龙州县| 荃湾区| 囊谦县| 称多县|