嵌入式硬件通信接口協(xié)議-UART(三)快速使用串口及應(yīng)用
2. ANSI C標(biāo)準(zhǔn)中有幾個(gè)標(biāo)準(zhǔn)預(yù)定義宏:
本文引用地址:http://2s4d.com/article/201812/395787.htm__LINE__:源代碼中的行號(字符串形式)
__FILE__:當(dāng)前*.c源碼文件的文件名(字符串形式)
__DATE__:編譯日期(字符串形式)
__TIME__:編譯時(shí)間(字符串形式)
__STDC__:當(dāng)要求程序嚴(yán)格遵循ANSI C標(biāo)準(zhǔn)時(shí)該標(biāo)識被賦值為1;
__cplusplus:當(dāng)編寫C++程序時(shí)該標(biāo)識符被定義。
有了上一步實(shí)現(xiàn)printf函數(shù)的重定向到串口后,基本就可以完美使用串口進(jìn)行調(diào)試程序。
調(diào)試過程中可利用ANSIC標(biāo)準(zhǔn)中的內(nèi)置宏,比如__LINE__可以很方便跟蹤代碼執(zhí)行到哪一行。
四、調(diào)試-輸入
串口的接收,有輪詢、中斷、DMA等方式。
輪詢方式,特點(diǎn)是消耗芯片資源,否則容易丟數(shù)據(jù);
中斷方式,特點(diǎn)是響應(yīng)快、資源占用低;
DMA方式,各個(gè)芯片的配置不同而無法每款芯片都有該功能,所以代碼兼容性可移植性較差。
一般地,對輸入的數(shù)據(jù)進(jìn)行分析判斷時(shí),如果是輪詢的方式,則直接在收到后即判斷;中斷和DMA方式,都可以考慮存到buffer后再分析處理。
五、初見數(shù)據(jù)協(xié)議解析
如果是簡單幾個(gè)字符的指令,可以用上述那樣簡單判斷,但是在稍微中等級別的工程項(xiàng)目中,用那樣的方式都已經(jīng)很不便于處理和擴(kuò)展了。
比如有一串?dāng)?shù)據(jù),并且長度不確定,將會超過10個(gè)字節(jié)、20個(gè)字節(jié)、100個(gè)字節(jié)甚至更多,那么這時(shí)候就必須使用協(xié)議解析的方式。
通常的,數(shù)據(jù)協(xié)議都會有協(xié)議頭、長度、校驗(yàn)、數(shù)據(jù)內(nèi)容等部分組成,數(shù)據(jù)將以包的形式進(jìn)行收發(fā),這時(shí)候使用解析的方式,對數(shù)據(jù)包進(jìn)行解析。
這就是廣泛使用的“起始式協(xié)議”。
實(shí)際的產(chǎn)品中有IC/ID讀卡器模塊的接口協(xié)議:
也有使用在PM2.5傳感器上的:
這些都屬于開發(fā)的模塊產(chǎn)品,對外使用串口通信,并且數(shù)據(jù)協(xié)議采樣了“起始式”的幀結(jié)構(gòu)模式。
評論