GUI_Delay函數

GUI_Delay()函數函數

使用GUI_Delay()函數時,對於其延時時間不肯定,明明設置爲最小值1,延時時間spa

仍舊太長,不能達到需求。遂決定研究明白其實現機理。rem

uC/OS-II使用OSTimeDly()函數實現延時,其單位是OS_TICKS,即延時多少個系統節io

拍。GUI使用GUI_Delay()函數延時,同時也實現顯示刷新;基於同一個平臺,估計也會class

調用OSTimeDly()函數以實現基本的延時功能。變量

下面分析GUI_Delay()函數功能擴展

void GUI_Delay(int Period) { 循環

  int EndTime = GUI_GetTime()+Period; 程序

  int tRem; /* remaining Time */ im

GUI_ASSERT_NO_LOCK(); 

  while (tRem = EndTime- GUI_GetTime(), tRem>0) { 

GUI_Exec(); 

GUI_X_Delay((tRem >5) ? 5 : tRem); 

首先EndTime變量得到延時結束時間;

使用一個while循環,在結束時間以前循環調用GUI_Exec()函數和GUI_X_Delay()

函數;

前者是GUI的刷新函數,保證在延時過程當中不會中止GUI任務處理。後者就是咱們要

分析的延時函數GUI_X_Delay了。

參數用三目變量,每次送給延時的參數最大是5

跟蹤GUI_X_Delay()函數,在GUI_X_uCOS.C文件中實現。

void GUI_X_Delay (int period) 

INT32U ticks; 

    ticks = (period * 1000) / OS_TICKS_PER_SEC; 

OSTimeDly((INT16U)ticks); 

能夠看到,在GUI_X_Delay()函數中調用了系統延時函數OSTimeDly(),就像前面

咱們說過的,OSTimeDly()函數的延時時間是系統節拍,若是要改變GUI_Delay()函數

的延時時間,就須要今後着手。

再看看延時時間的取值:OS_TICKS_PER_SECOS_CFG.H中設置爲100,即每秒產

100個系統節拍。ticks變量在這裏被擴展了10倍。即GUI_Delay()函數傳遞一個延時

參數1,而實際的延時時間就是10個節拍即100毫秒。在這個延時時間以內,調用GUI_Delay

()函數的任務就不能執行,使得響應速度慢。爲保持源程序的風格一致,這裏改period

的倍數爲100,使GUI_Delay()函數的延時時間和OSTimeDly()函數時間單位一致,提

高了響應速度加強其易用性。 

相關文章
相關標籤/搜索