LED大屏幕異步控制器多窗口顯示的設計
if(taskNum>0) // 根據窗口數建立窗口顯示任務(wù)
OSTaskCreate(task0,(void*)0,task0Stk[TaskStkLength- 1],3);
if(taskNum>1)
OSTaskCreate(task1,(void*)0,task1Stk[TaskStkLength- 1],4);
...
while(1){if(reset) goto RESET; //reset 標志為1, 程序復位
OSTimeDlyHMSM(0,0,1,0);}
}
窗口顯示任務(wù)用于實(shí)現各窗口內容的顯示。它根據各窗口顯示方式的不同在其相應area 區域中進(jìn)行下一幀數據的運算,然后調用areaToScreen()和screenToCpld()進(jìn)行顯示。在完成一幀數據的顯示后, 調用一次OSTimeDlyHMSM()使當前任務(wù)進(jìn)入等待狀態(tài)同時(shí)進(jìn)行一次任務(wù)調度, 將系統控制權交給處于就緒狀態(tài)的窗口顯示任務(wù)中優(yōu)先級最高的那個(gè), 由此完成窗口顯示任務(wù)之間的切換。我們也可以通過(guò)調整OSTimeDlyHMSM()的參數來(lái)改變各窗口相臨兩幀顯示信息之間的時(shí)間間隔, 從而可調整各窗口特技顯示的效果, 比如移動(dòng)顯示的移動(dòng)速度。下面是其中一個(gè)窗口顯示任務(wù)的程序演示:
void Task0(void *pdata){
pdata=pdata;窗口參數初始化;while(1){uint16 i;
for(i=0;i 總幀數;i++){下一幀數據的運算; // 在area 區域中進(jìn)行
areaToScreen(); // 將數據從area 讀出寫(xiě)入screen
screenToCpld(); // 將screen 中相應數據寫(xiě)入顯存完成一幀數據的顯示OSTimeDlyHMSM(0,0,0,displaySpeed*20); // 任務(wù)調度
}
}
}
5 結束語(yǔ)
充分利用32位微處理器的高性能和實(shí)時(shí)操作系統高效的任務(wù)調度算法, 實(shí)現了單屏幕多窗口的任意位置顯示。使得屏幕顯示變得更加豐富靈活, 也使得很多以往只能使用同步控制器或者多個(gè)異步控制器的場(chǎng)合可用單塊異步控制器來(lái)替代, 從而降低了系統的成本。
本文作者創(chuàng )新點(diǎn):實(shí)現了LED 大屏幕單屏幕多個(gè)窗口任意位置的顯示, 并且可實(shí)現多窗口重疊顯示及“畫(huà)中畫(huà)”等顯示效果。
評論