1.關於Super Loop
一般MCU的程式撰寫如果不是在太複雜的系統當中,我們通常會使用super loop的架構,也就是一個超級迴圈,這個超級迴圈顧名思義的就是一值瘋狂的在無限迴圈中工作,但這種架構有一很重要的前提,就是所有任務的執行反應時間要能滿足系統需求,也就是說因為因為程式執行的工作是循序漸進,所以當某一個任務執行時間較長的時候,就會影響到整體的反應時間,但這種架構通常較為簡單,也容易維護(通常所有程式都是自己編寫,較容易掌控)。
(外部參考資料:Embedded Systems/Super Loop Architecture)
通常super loop的架構都如下
void main(void) { while (1) { func1(); func2(); . . . funcN(); } }
由上述架構可以看到,程式會依序執行func1>func2>...funcN,而此時如果其中一個func執行時間較長時,就會影響到所有任務的執行時間。
2.PSoC Creator Uart功能
PSoC Creator中的Uart功能中,不管是SCB mode或UDB mode的Uart function均有提供tx buffer與rx buffer的選項,其中tx buffer的使用與否在super loop中影響甚大,基本上啟用與停用會有以下兩種結果
a.停用:再傳送陣列資料時,必須等待所有資料傳送完畢才會離開。
b.啟用:再傳送陣列資料時,則會用少數時間處理buffer資料搬移,之後就離開。
或許看圖比較容易明白,我使用示波器利用一隻I/O腳在Super Loop中切換Hi/Low兩種狀態,每當Hi/Low一次的時候,就代表Super Loop跑完一圈,所以下兩圖中CH1為檢測I/O腳波形(因為速度太快,所以看到整片黑黑的),而CH2則為TX腳傳送波形。
停用UART Buffer功能時
(Disable UART TX buffer)
當UART TXD在傳送資料時,可以很明顯的看到Super Loop的動作也是暫停的,即代表說,UART在工作的時候會依據傳送的資料大小佔據不同的時間,這在系統任務執行上,影響是很大的。
啟用UART Buffer功能時
(Enable UART TX buffer)
而使用Buffer功能之後,發現TXD再傳送資料之前,Super Loop佔空的時間明顯縮小,此時就可以改善UART傳送資料時所使用時間過長的問題。
1 thought on “PSoC Creator UART buffer in Super Loop”