時間管理以系統時鐘爲基礎。時間管理提供給應用程序全部和時間有關的服務。編程
系統時鐘是由定時/計數器產生的輸出脈衝觸發中斷而產生的,通常定義爲整數或長整數。輸出脈衝的週期叫作一個「時鐘滴答」。系統時鐘也稱爲時標或者Tick。一個Tick的時長能夠靜態配置。操作系統
用戶是以秒、毫秒爲單位計時,而芯片CPU的計時是以Tick爲單位的,當用戶須要對系統操做時,例如任務掛起、延時等,輸入秒爲單位的數值,此時須要時間管理模塊對兩者進行轉換。指針
Tick與秒之間的對應關係能夠配置。code
Huawei LiteOS的時間管理模塊提供時間轉換、統計、延遲功能以知足用戶對時間相關需求的實現。orm
系統最小的計時單位。 Cycle的時長由系統主頻決定,系統主頻就是每秒鐘的Cycle數。接口
用戶須要瞭解當前系統運行的時間以及Tick與秒、毫秒之間的轉換關係等。開發
Huawei LiteOS系統中的時間管理主要提供如下兩種功能:it
功能分類 | 接口名 | 描述 |
---|---|---|
時間轉換 | LOS_MS2Tick | 毫秒轉換成Tick |
- | LOS_Tick2MS | Tick轉化爲毫秒 |
時間統計 | LOS_CyclePerTickGet | 每一個Tick多少Cycle數 |
- | LOS_TickCountGet | 獲取當前的Tick數 |
時間轉換存在出錯的可能性,須要返回對應的錯誤碼,以便快速定位錯誤緣由。編譯
序 號 | 定義 | 實際數值 | 描述 | 參考解決方案 |
---|---|---|---|---|
1 | LOS_ERRNO_SYS_PTR_NULL | 0x02000010 | 入參指針爲空 | 檢查入參,傳入非空入參 |
2 | LOS_ERRNO_SYS_CLOCK_INVAILD | 0x02000011 | 無效的系統時鐘配置 | 在los_config.h配置有效的時鐘 |
3 | LOS_ERRNO_SYS_MAXNUMOFCORES_IS_INVAILD | 0x02000012 | 錯誤碼暫時沒有使用 | 錯誤碼暫時沒有使用 |
4 | LOS_ERRNO_SYS_PERIERRCOREID | 0x02000013 錯誤碼暫時沒有使用 | 錯誤碼暫時沒有使用 | |
5 | LOS_ERRNO_SYS_HOOK_IS_FULL | 0x02000014 | 錯誤碼暫時沒有使用 | 錯誤碼暫時沒有使用 |
時間管理的典型開發流程:table
在下面的例子中,介紹了時間管理的基本方法,包括:
前提條件:
時間轉換:
VOID Example_TransformTime(VOID) { UINT32 uwMs; UINT32 uwTick; uwTick = LOS_MS2Tick(10000);//10000 ms數轉換爲Tick數 printf("uwTick = %d \n",uwTick); uwMs= LOS_Tick2MS(100);//100 Tick數轉換爲ms數 printf("uwMs = %d \n",uwMs); }
時間統計和時間延遲:
VOID Example_GetTime(VOID) { UINT32 uwcyclePerTick; UINT64 uwTickCount; uwcyclePerTick = LOS_CyclePerTickGet();//每一個Tick多少Cycle數 if(0 != uwcyclePerTick) { dprintf("LOS_CyclePerTickGet = %d \n", uwcyclePerTick); } uwTickCount = LOS_TickCountGet();//獲取Tick數 if(0 != uwTickCount) { dprintf("LOS_TickCountGet = %d \n", (UINT32)uwTickCount); } LOS_TaskDelay(200);//延遲200 Tick uwTickCount = LOS_TickCountGet(); if(0 != uwTickCount) { dprintf("LOS_TickCountGet after delay = %d \n", (UINT32)uwTickCount); } }
編譯運行獲得的結果爲:
時間轉換:
tick = 1000 uwMs = 1000
時間統計和時間延遲:
LOS_CyclePerTickGet = 495000 LOS_TickCountGet = 1 LOS_TickCountGet after delay = 201