隊列(FIFO)是一種常見的線性存儲結構,在嵌入式開發中經常用到,主要的應用場景有:
1. 高級一點的單片機內部串行通信模塊,像UART、SPI、CAN等串行通信,內部帶有FIFO緩存。有FIFO的模塊可以一次寫入或保存多個數據,而沒有FIFO的模塊只可以寫入或保存一個數據。
2. 在RTOS中,可以通過消息隊列實現任務(線程)間的通信
3. 解決CPU與外設由于速度差導致的阻塞
寫數據索引write,讀數據索引read,數據個數為write-read,普通隊列寫索引永遠不小于讀索引。但我們可利用的棧內存是有限的。
一種優化的隊列是環形隊列,也可以理解為首尾相連的隊列。當寫索引到達最大分配內存時,跳回到隊列的頭部繼續寫入,數據個數為(write+BUFFER_SIZE-read)%BUFFER_SIZE。
下面以使用環形隊列來解決單片機串口打印阻塞問題為例來說明軟件實現。
上面代碼已經注釋得夠詳細了,就不再描述了。
在需要打印數據時,直接調用printf函數格式化打印,在主函數大循環中執行debug_print_task就可以了。
-
cpu
+關注
關注
68文章
10829瀏覽量
211194 -
fifo
+關注
關注
3文章
387瀏覽量
43561 -
串口
+關注
關注
14文章
1547瀏覽量
76231
發布評論請先 登錄
相關推薦
評論