裸機的中斷和μc/os-ii的中斷大體相同,但也有不同的地方。具體為以下幾個方面:
由上述可知,我們需要記錄中斷巢狀層數,因此需要在執行中斷服務函式**前,對中斷巢狀層數計數器+1;退出中斷服務函式前,,對中斷巢狀層數計數器-1,並執行一次任務排程,具體實現方法如下:
void irqhandler (
void
)
μc/os-ii中與中斷相關的函式分布比較散但是不多,如有需要,可以自行從μc/os-ii核心檔案從查詢。以下列出函式宣告以供查閱。
#define os_enter_critical()
#define os_exit_critical()
void osintenter (
void
)void osintexit (
void
)
任何作業系統都要提供乙個週期性的訊號源,以供系統處理諸如延時、超時等與時間有關的事件,這個週期性的訊號源叫做時鐘。μc/os-ii用硬體定時器產生乙個週期性中斷,該中斷服務函式為ostickisr(),在該函式中,呼叫ostimetick()函式完成系統在每個時鐘節拍時需要做的工作:
一般來說,使用者不直接呼叫時鐘相關的api,相關函式實現的功能在2.1中已經敘述,如需要原始碼可以通過函式名在μc/os-ii核心檔案中查詢,此處不再贅述。
μc/os-ii規定:除了空閒任務以外的所有任務,必須在任務中合適的位置呼叫系統提供的函式ostimedly(ticks)或ostimedlyhmsm(hours,minutes,seconds,milli),使當前任務的執行延時(暫停)一段時間並進行一次任務排程,以讓出cpu的使用權。系統延時函式的延時原理我們不深究,需要關注的是以下幾點:
μc/os-ii中與時間管理相關的函式定義在os_time.c檔案中,函式宣告在ucos_ii.**件中,以下列出函式宣告以供查閱。
void ostimedly (int32u ticks)
;int8u ostimedlyhmsm (int8u hours,
int8u minutes,
int8u seconds,
int16u ms)
;int8u ostimedlyresume (int8u prio)
;int32u ostimeget (
void);
void ostimeset (int32u ticks)
;
UCOSIII 中斷和時間管理
ucosiii支援中斷巢狀,高優先順序中斷可以打斷低優先順序中斷,在ucosiii中使用osintnestingctr來記錄中斷巢狀次數,最大支援250級巢狀,沒進乙個中盾巢狀osintnestingctr就加1,反之則減1 進入中斷函式 osintenter 僅進行osintnestingctr加...
C OSII中的時鐘中斷技術研究
1 系統中斷與時鐘節拍 1.1 系統中斷 中斷是一種硬體機制,用於通知cpu有個非同步事件發生了。中斷一旦被系統識別,cpu則儲存部分 或全部 現場 context 即部分 或全部 暫存器的值,跳轉到專門的子程式,稱為中斷服務子程式 isr 中斷服務子程式做事件處理,處理完成後執行任務排程,程式回到...
C OSII中的時鐘中斷技術研究
2007 12 24 14 26 30 c osii中的時鐘中斷技術研究 1 系統中斷與時鐘節拍 1.1 系統中斷 中斷是一種硬體機制,用於通知cpu有個非同步事件發生了。中斷一旦被系統識別,cpu則儲存部分 或全部 現場 context 即部分 或全部 暫存器的值,跳轉到專門的子程式,稱為中斷服務...