隊列(FIFO)是一種常見的線性存儲結(jié)構(gòu),在嵌入式開發(fā)中經(jīng)常用到,主要的應(yīng)用場景有:
1. 高級一點的單片機內(nèi)部串行通信模塊,像UART、SPI、CAN等串行通信,內(nèi)部帶有FIFO緩存。有FIFO的模塊可以一次寫入或保存多個數(shù)據(jù),而沒有FIFO的模塊只可以寫入或保存一個數(shù)據(jù)。
2. 在RTOS中,可以通過消息隊列實現(xiàn)任務(wù)(線程)間的通信
3. 解決CPU與外設(shè)由于速度差導(dǎo)致的阻塞
寫數(shù)據(jù)索引write,讀數(shù)據(jù)索引read,數(shù)據(jù)個數(shù)為write-read,普通隊列寫索引永遠不小于讀索引。但我們可利用的棧內(nèi)存是有限的。
一種優(yōu)化的隊列是環(huán)形隊列,也可以理解為首尾相連的隊列。當(dāng)寫索引到達最大分配內(nèi)存時,跳回到隊列的頭部繼續(xù)寫入,數(shù)據(jù)個數(shù)為(write+BUFFER_SIZE-read)%BUFFER_SIZE。
下面以使用環(huán)形隊列來解決單片機串口打印阻塞問題為例來說明軟件實現(xiàn)。
上面代碼已經(jīng)注釋得夠詳細(xì)了,就不再描述了。
在需要打印數(shù)據(jù)時,直接調(diào)用printf函數(shù)格式化打印,在主函數(shù)大循環(huán)中執(zhí)行debug_print_task就可以了。
-
cpu
+關(guān)注
關(guān)注
68文章
10908瀏覽量
213085 -
fifo
+關(guān)注
關(guān)注
3文章
389瀏覽量
43876 -
串口
+關(guān)注
關(guān)注
14文章
1559瀏覽量
77105
發(fā)布評論請先 登錄
相關(guān)推薦
環(huán)形隊列在串口數(shù)據(jù)接收中的使用
如何使用隊列實現(xiàn)STM32串口環(huán)形緩沖?
環(huán)形隊列的相關(guān)資料分享
聊一聊串口環(huán)形隊列常用的幾種方法
cubeMX+STM32+Freertos 讀隊列時阻塞
![cubeMX+STM32+Freertos 讀<b class='flag-5'>隊列</b>時<b class='flag-5'>阻塞</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
FreeRTOS+STM32F103串口通信錯誤解決方法
![FreeRTOS+STM32F103<b class='flag-5'>串口</b>通信錯誤<b class='flag-5'>解決方法</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32串口環(huán)形緩沖--使用隊列實現(xiàn)(開放源碼)
![STM32<b class='flag-5'>串口</b><b class='flag-5'>環(huán)形</b>緩沖--使用<b class='flag-5'>隊列</b>實現(xiàn)(開放源碼)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于STM32的串口環(huán)形隊列IAP調(diào)試心得
![基于STM32的<b class='flag-5'>串口</b><b class='flag-5'>環(huán)形</b><b class='flag-5'>隊列</b>IAP調(diào)試心得](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論