嵌入式系統(tǒng)中串口通信幀的同步方法研究
下面給出該方法在Keil C5l中的示例程序:
#include“regx52.h”
#define HEAD1 0x00
#define HEAD2 0x01
#define LEN 0x02
#define TYPE 0x03
#define DATA 0x04
#define CHECK 0x05
unsigned char g_DatRev[BUFLEN];
unsigned char g_cmd;
unsigned char g_RecOk;
void main()
{
{
{
{
case: ...
}
void SerialComm() interrupt 4
{
{
{
{
{
{
{
{
}
由于采用了狀態(tài)機和消息機制的結構,上述設計思路快速有效地實現(xiàn)了串口通信的同步,而且程序結構清晰,便于維護,也易于向其他的串口通信協(xié)議移植。另外,串口中斷服務子程序中需要處理的工作很少,每個串口接收中斷平均耗時不超過20個機器周期(在單片機AT89C5l中),大大減輕了串口接收中斷服務程序的壓力,緩解了嵌入式系統(tǒng)有限資源與需求之間的矛盾,提高了嵌入式系統(tǒng)的穩(wěn)定性。
三、結論
從上面的分析和測試可以看出,基于有限狀態(tài)機的串口通信幀同步方法是本文中提出的3種幀方法中最優(yōu)的,結構清晰且系統(tǒng)資源利用率高。
對一個有著完整通信協(xié)議的串口中斷來說,因為要比較命令頭、完成校驗、解析數(shù)據(jù)等需要耗費大量的機器周期,所以嵌入式系統(tǒng)中的串口中斷服務程序設計顯得更為重要。在實際的串口通信程序中,可采用狀態(tài)機和消息機制相結合的方法,僅在中斷服務程序中設置一個標志,而在主程序中根據(jù)相應標志來作處理,這樣就回避了某些中斷可能需要較長處理時間的問題。在程序結構上,由于采用狀態(tài)機的結構,既提高了可讀性。同時又提高了運行速度,因而該方法不僅是一種很好的幀同步方法,還是一種很不錯的串口通信程序設計方法。
評論