給您一個實現概念,多半情況下我們並不知道要傳多少字元,因此我們會用每收到1字元就觸發一次,但如果我們要去比對字元,那一定要有地方可以儲存,就是Buffer囉
這裡我採用Circular queue,以下是該結構宣告
#define QSIZE 100
struct uart_buffer_t{
char * front;
char * rear;
char buf[QSIZE];
}uart_buffer;
初始化
uart_buffer.front=uart_buffer.buf;
uart_buffer.rear=uart_buffer.buf;
然後操作方式就是每當接收一個字元時
*(rear)++;
每讀取一個字元時
*(front)++;
最後是邊界條件
if(uart_buffer.rear>=uart_buffer.buf+QSIZE)
uart_buffer.rear=uart_buffer.buf;
if(uart_buffer.front>=uart_buffer.buf+QSIZE)
uart_buffer.front=uart_buffer.buf;
判斷是否還有字元未讀取
if(uart_buffer.front!=uart_buffer.rear)
...
然後每當讀取一個字元,就做比對,比對成功就比對下一個字元,這裡不用strcmp函式,因為字串頭不是在index 0
char c=uart_buffer.buf[front++];
if(c=='A')
....
以上希望有幫助到您