1. 程式人生 > >ucosII移植學習過程,OS_CPU_SR_Save()和OS_CPU_SR_Restore()函式的解析

ucosII移植學習過程,OS_CPU_SR_Save()和OS_CPU_SR_Restore()函式的解析

今天突然興起回顧了一下ucosII,本人在這方面也是小白,但研究了一下,也算有點收穫,在此記錄一下。

我們都知道,程式碼的臨界段,也叫臨界區,指的是處理時不可以分割的程式碼。一旦這部分程式碼開始執行,則不容許任何中斷打斷。為了確保臨界段程式碼的可靠執行,在進入臨界段之前一定要關閉中斷,而臨界段執行完後,則要立即開啟中斷。

首先,在這裡,有兩個巨集定義,定義了OS_ENTER_CRITICAL()函式和

OS_EXIT_CRITICAL()函式,這兩個函式的作用是關閉和開啟中斷。下面我們要知道這兩個函式為什麼操作中斷的開關。我們重點關注巨集定義,OS_CPU_SR_Save()這個函式

在os_cpu_a.asm檔案中有定義,我們可以看到
  這個函式返回了一個值R0,並將這個值賦值給(暫存)cpu_sr內,目的就是保留為關閉中斷前的狀態,  CPSTD  I,這段程式碼是cortex-M3指令集的彙編指令,   ,這個操作就把中斷給關了。

其次,我們再看OS_CPU_SR_Restore()函式,,將cpu_sr的狀態重新讀到PRIMASK裡面,這樣就恢復了最初狀態。

哈哈哈,希望幫助到大家!大笑