新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > arm串口實現 printf 和scanf函數

        arm串口實現 printf 和scanf函數

        作者: 時間:2016-11-21 來源:網絡 收藏
        問題描述:arm串口實現scanf和printf函數實現輸入一串十進制數字換成十六進制輸出功能,但是我的板子測試就是出不來,于是乎我要徹底搞定它,隨有紀。
        1.首先代碼分析:用sourceinsight建立一個工程:
        第一個文件Ctype.h,注意不會處理EOF,即end of file。其中的宏定義定義了_U _L_D_C_P_S_X_SP,分別代表的數字標識,這個數字標識在Ctype.c中用到。extern unsigned char _ctype[]作用是把_ctype[]聲明為外部的全局變量,不但包含這個頭文件的多個文件可以使用,也避免了重復包含這個變量的作用。
        #define __ismask(x) (_ctype[(int)(unsigned char)(x)]) 作用是_ismask這個函數對輸入的參數進行一個unsigned char轉化到int類型的。
        #define isalnum(c) ((__ismask(c)&(_U|_L|_D)) != 0) 作用看名字應該是判斷是是否是一個數字,不過我看了ascII表看了1 2 4 位發現沒什么特別。
        第二個文件Ctype.c,里面的_ctype里面存的全是八位的獨熱碼,一共256個
        第三個文件Div64.h,The semantics of do_div() are,意思是這個函數的語義是。
        #ifdef __ARMEB__
        #define __xh "r0"
        #define __xl "r1"
        #else
        #define __xl "r0"
        #define __xh "r1"
        #endif
        這段代碼的意思是如果定義了arm的endbig則用32位的r0寄存器保存x的高位,同樣的道理else應該清楚了。
        再往下:#define __asmeq(x, y) ".ifnc " x "," y " ; .err ; .endifnt"表示如果x y 不相等,則會執行.err,而后結束這個if分支。
        直接看printf這個函數的實現,其中參數列表中有省略號,這是c語言中表示參數不確定的意思。


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 义乌市| 兴宁市| 巍山| 青海省| 白城市| 湘乡市| 松原市| 定远县| 商水县| 读书| 承德市| 长岭县| 阿拉善右旗| 毕节市| 宜兰市| 盐山县| 赤峰市| 额尔古纳市| 章丘市| 江源县| 千阳县| 会东县| 鹤岗市| 武邑县| 荔波县| 黑山县| 漾濞| 宿州市| 平乡县| 武穴市| 手游| 旺苍县| 乌拉特后旗| 双桥区| 徐水县| 兴安盟| 临安市| 孝昌县| 南乐县| 揭东县| 武胜县|