C OS 的中斷和時鐘(二)

2021-07-22 18:19:58 字數 1367 閱讀 6098

3.2

μc/os-

ⅱ的時鐘

à週期性訊號

用硬體定時器產生乙個週期為毫秒級的週期性中斷來實現系統時鐘。產生的中斷的中斷服務程式為

ostickisr()

(組合語言)

,通過呼叫

時鐘節拍服務函式

ostimetick()

來完成系統在每個時鐘節拍需要的工作。

最小的時鐘單位

是兩次中斷之間相間隔的時間,稱之為

時鐘節拍。

呼叫時鐘節拍服務函式

ostimetick()

做了兩件事:給計數器

ostime加1

;遍歷任務控制塊鍊錶中的所有任務控制塊,把各個控制塊中用來存放任務延時時限的

ostcbdly

變數減1

,並使該項為

0,不使被掛起的任務進入就緒狀態。(即

在每個時鐘節拍了解每個任務的延時狀態,使已經到了延時時限的非掛起任務進入就緒狀態)

3.3

時間管理

3.3.1

任務的延時 μ

c/os-

ⅱ是乙個搶占式核心。

規定:除了空閒任務之外

的所有任務必須在任務中合適的位置呼叫系統提供的函式

ostimedly()

,使當前任務的執行延時一段時間並進行一次任務呼叫,以讓出

cpu使用權。

ostimedly()

函式引數是以時鐘節拍數為單位的延時時間。

延時函式

ostimedlyhmsm(int8u hours, int8uminutes, int8u seconds, iny16u milli);

呼叫了函式

ostimedly()

和ostimedlyhmsm()

的任務,當規定的延時時間期滿,或有其他任務通過呼叫函式

ostimedlyresume()

取消了延時時,它立即會進入就緒狀態。

3.3.2

取消任務的延時

ostimedlyresume()

函式取消延時而進入就緒狀態

ostimedlyresume(int8uprio);

3.3.3

獲取和設定系統時間

ostime

記錄系統發生的時鐘節拍數。

在應用程式呼叫

osstart()

時被初始化為

0,每發生

1各時鐘節拍

ostime

就加1.

int32u ostimeget(void);

獲取ostime的值

void ostimeset(int32u ticks);

設定ostime的值

UC OS II的中斷和時鐘

3.1.1 uc os ii 的中斷過程 為了記錄中斷巢狀的層數,uc os ii 定義了乙個全域性變數 osintnesting 兩個重要函式 osintenter 和osintexit 函式osintenter 的作用就是把全域性變數 osintnesting加1 被用於記錄中斷巢狀層數。voi...

uC OS II的中斷和時鐘

前提 uc os ii是乙個可剝奪型核心,cpu每時每刻都處理優先順序最高的任務。主要內容 1 uc os ii的中斷管理和中斷服務程式的結構 2 uc os ii的系統時鐘及實現方法 3 uc os ii的時間管理服務 延時 取消延時 中斷 停止當前的事,去處理異常要求事件。在系統執行過程中,當系...

快速sin 和cos 的實現

the table of sin array from 0 to 45 short sin table the table of cos array from 0 to 45 short cos table get the value of 10000 times of sin short sin ...