PSoC Creator UART buffer in Super Loop

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)

20140523_152448

當UART TXD在傳送資料時,可以很明顯的看到Super Loop的動作也是暫停的,即代表說,UART在工作的時候會依據傳送的資料大小佔據不同的時間,這在系統任務執行上,影響是很大的。

啟用UART Buffer功能時

(Enable UART TX buffer)

20140523_152540

而使用Buffer功能之後,發現TXD再傳送資料之前,Super Loop佔空的時間明顯縮小,此時就可以改善UART傳送資料時所使用時間過長的問題。

1 thought on “PSoC Creator UART buffer in Super Loop

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料