嵌入式硬件通信接口協議-UART(三)快速使用串口及應用
2. ANSI C標準中有幾個標準預定義宏:
本文引用地址:http://www.104case.com/article/201812/395787.htm__LINE__:源代碼中的行號(字符串形式)
__FILE__:當前*.c源碼文件的文件名(字符串形式)
__DATE__:編譯日期(字符串形式)
__TIME__:編譯時間(字符串形式)
__STDC__:當要求程序嚴格遵循ANSI C標準時該標識被賦值為1;
__cplusplus:當編寫C++程序時該標識符被定義。
有了上一步實現printf函數的重定向到串口后,基本就可以完美使用串口進行調試程序。
調試過程中可利用ANSIC標準中的內置宏,比如__LINE__可以很方便跟蹤代碼執行到哪一行。

四、調試-輸入
串口的接收,有輪詢、中斷、DMA等方式。
輪詢方式,特點是消耗芯片資源,否則容易丟數據;
中斷方式,特點是響應快、資源占用低;
DMA方式,各個芯片的配置不同而無法每款芯片都有該功能,所以代碼兼容性可移植性較差。
一般地,對輸入的數據進行分析判斷時,如果是輪詢的方式,則直接在收到后即判斷;中斷和DMA方式,都可以考慮存到buffer后再分析處理。


五、初見數據協議解析
如果是簡單幾個字符的指令,可以用上述那樣簡單判斷,但是在稍微中等級別的工程項目中,用那樣的方式都已經很不便于處理和擴展了。
比如有一串數據,并且長度不確定,將會超過10個字節、20個字節、100個字節甚至更多,那么這時候就必須使用協議解析的方式。
通常的,數據協議都會有協議頭、長度、校驗、數據內容等部分組成,數據將以包的形式進行收發,這時候使用解析的方式,對數據包進行解析。
這就是廣泛使用的“起始式協議”。
實際的產品中有IC/ID讀卡器模塊的接口協議:

也有使用在PM2.5傳感器上的:

這些都屬于開發的模塊產品,對外使用串口通信,并且數據協議采樣了“起始式”的幀結構模式。
評論