1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      Nucleus Plus的讀書筆記

      更新時間: 2008-04-11 14:18:27來源: 粵嵌教育瀏覽量:969

        以前用過Vxworks, 由于工作需要,接觸到Nucleus, 隨手寫的一個讀書筆記,主要注重Nucleus Plus (NP)和其他Embedded OS 的差別。

      1.1 About Nucleus Plus
        實時、搶占、多任務內核,用于時間要求嚴格的嵌入式應用;95%的Nuclear PLUS用ANSI C寫成;便于移植,能用于絕大多數微處理器架構。
      片上RTOS!
       Nuclear PLUS常作為C庫來使用。其發布形式為源碼方式。

      1.2 實時應用
      不用多說了,J

      1.3 Why Nucleus PLUS
        提供任務管理(調度),任務間通信,任務同步,時鐘,內存管理。

      1.4 How to use Nucleus PLUS
        將Nuclear PLUS當成一個C庫來用。應用軟件中用到的服務從Nuclear PLUS庫中獲取,和應用目標組合得到完整的映像(可執行代碼)。映像被下載到目標機系統或ROM中。

      使用Nuclear PLUS的一般步驟:
        1) 如果必要,可以修改地及初始化文件,INT.*
      注意:該文件常為匯編語言形式,其擴展名根據開發工具指定;
        2) 定義Application_Initialize函數,其在Nuclear PLUS引導系統前執行。注意:為了進行NP的系統調用,文件NUCLEUS.H必須被包含;
        3) 定義應用任務。如果使用了NP服務,NULCEUS.H必須包含;
        4) 編譯/匯編所有的應用軟件,包括底層的系統初始化文件INT.*;
        5) 連接INT,所有的應用目標文件以及NP庫,以及任何必要的開發庫;
        6) 下載完整的應用映像到目標系統,Run it!

      1.4.1 Application Initialization
        典型結構:
      #include
      void Application_Initialize(void *first_available_memory)
      {
      /* Application-specific initialization of Nucleus PLUS
      objects, including the creation of tasks,mailboxes,
      queues, pipes, event groups, and memory pools. */
      }

      1.4.2 目標系統要求
        NP大小:CISC系統上20Kb,RISC系統上40Kb;需要1.5Kb RAM。以上不包括應用程序,隊列,管道或其他NP對象用到的內存。
        NP不試圖改變任何存在的數據元素,其容易被放在ROM中。對每個開發環境來說,NP都存在ROM可用的屬性。
      目標包括TRM(Target-Resident Monitor)的情況....

      1.4.3 配置選項
      1.4.4 系統初始化
        INT_INITIALIZE例程一般為NP中個執行的。對大部分目標環境,INT_INITIALIZE包含硬件復位向量,其負責所有目標相關的初始化,如建立不同的處理器控制寄存器,中斷向量表,全局C數據變量,幾個NP變量,系統堆棧指針。

        系統初始化完成后,控制流進入NP初始化INC_INITIALIZE。注意,不會在返回系統初始化。

        INC_INITIALIZE調用用戶初始化例程,Application_Initialize() (簡稱AI)。AI負責初始化應用環境,如初始化應用任務,郵箱(mailboxes),隊列,管道,信號燈,事件組,內存池,其他NP變量。

        AI完成后,INC_Initialize()初始化任務調度。

      1.4.5 內存的使用
        NP提供給應用定制每個系統對象使用內存的能力。系統對象包括:任務,HISRs(硬件中斷??),隊列,管道,郵箱,信號燈,事件標志組,內存分區池,動態內存池,I/O驅動。每個系統對象需要一個控制結構(變量),某些對象需要附加的內存。

        分配系統對象內存的幾種方法:1) 簡單的辦法,用C的全局數據結構來分配;2) 動態分配內存,可以從動態內存池,或分區內存池;3) 從目標系統的物理地址分配內存。

      1.4.6 執行的線程
        NP有8種線程執行模式:初始化,系統錯誤,調度循環,任務,信號處理,用戶ISR,LISR(Low-Level ISR), HISR(High-Level ISR)。

      1.5 任務控制
        任務是一個有特定目的的半獨立程序。現代實時應用常為多任務,而且任務的重要性常發生變化。
        任務狀態:執行,準備,懸掛,終止,完成
        搶占、放棄(同優先級輪轉),時間片,動態創建(任務數量也許沒限制,每個任務需要控制塊和堆棧),確定性,堆棧檢測,任務信息,優先級(0~255,0)
        "饑餓",高優先級總"Ready",則低優先級任務沒機會執行。

      1.6 動態內存分配
        用戶指定內存池大小;吃的內存為只有應用程序決定;支持變長度分配和釋放。
      分配規則:First Fit
      支持"延遲"分配,FIFO或優先級確定順序。
      內存池可以動態創建。
      確定性問題:分配~不確定,釋放~確定

      1.7 分區內存
        分區內存池包含用戶指定固定大小的內存區。其位置、大小有應用程序決定。在分區池中進行單個的分區的分配和釋放。需要一些附加工作!
        延遲(懸掛):無條件,超時,無懸掛
      可以動態創建和消除
        確定性:無需搜索,分配和釋放分區的過程快速且固定(時間一定)。但其處理時間,受懸掛任務的優先級順序等影響。

      1.8 Mailboxes
        "郵箱"提供了低代價的簡單信息傳遞機制。每個Mailbox能夠儲存4個32位的字(WORDS)。消息的發送和接收為值。發送消息時,需要將消息Copy到"郵箱",接受消息需要將消息Copy出郵箱。
        延遲:無條件延遲,超時,無延遲
        廣播:Mailbox消息可以是廣播的。
       動態創建和刪除
        確定性:發送和接收消息的處理時間是常值的。但受懸掛任務的優先級影響。

      1.9 隊列
        提供傳送多消息的機制。消息的發送和接收為值。。。。
        消息可以放隊列頭或尾。
        消息大小:包括1個或多個32位字;支持固定或變長度的消息,隊列創建時定義消息格式,變長度需要附加1個字。

      1.10 管道
        提供多消息傳遞機制;值;Copy入,Copy出;消息可以放在管道前或后。
        消息大小:1個或多字節;固定或變長的消息被支持;創建時定義。

      1.11 信號燈
        信號燈提供應用程序關鍵部分的控制執行機制;NP提供的計數信號燈(可用信號燈)范圍為0~4,294,967,294.
        信號燈兩個基本操作:獲取、釋放。
        信號燈創建時指定初始值用于指示事件。

        延遲:無條件,超時,無延遲
        死鎖:指當兩個或更多的任務由于企圖獲取兩個或更多信號燈而永遠死鎖。"阻止"(Prevention)是解決這個問題的好辦法,具體依賴于應用,如每個任務不能占用1個以上的信號燈,或所有任務按相同順序去獲取多個信號燈,可選的"超時"設定等。
        優先級反轉:當高優先級的任務懸掛在低優先級擁有的信號燈上。該情況在不同優先級共享相同的保護資源時是客觀存在的。此時,反轉的時間有限或可估計時,是可接受的。然而,如果在優先級反轉期間,低優先級任務被中等優先級任務搶占,則反轉的時間則是不確定,該種情況應該避免,可以通過使得所有使用相同信號燈的任務具有相同的優先級。
      (???這個和Vxworks有點不一樣??)

      1.12 事件組(Event Group)
        指示某確定系統事件發生。一個事件由事件組中的單個位表示,該位叫事件標志位。每個事件組有個32個事件標志位。
        用AND/OR去設置或清除事件標志。此外,當事件被接收后,事件標志可能被自動復位。

      1.13 信號(Signals)
        信號在某些方面和事件類似,然而,在操作上大不相同。時間標志的使用天生是同步的,任務指導指定的服務需要被給定后,才會去存取事件標志,判斷其是否存在。信號操作為異步的,當信號存在時,任務預先指定的信號處理例程被執行,而任務被懸掛。每個任務可以處理32個信號。每個信號由單個位表示。
        信號處理例程:必須在任何信號被處理前,指定信號處理例程。在信號處理例程內部遵守的約束和終端服務差不多。基本上,大部分NP服務都是可用的,但自身懸掛需要避免。
        使能信號處理:缺省信號處理是Diable的。
        信號清除:當引用信號處理例程后,信號自動被清除。信號處理例程不會被新的信號例程中斷。此外,對信號進行懇求(solicited)請求,信號被清除。注意!!任務不能在信號懇求時懸掛。
        多個信號:一旦信號例程開始,該任務的信號就被清除。信號處理不會被新的信號請求終止,在當前信號處理完成后處理新的信號。先前發送的相同信號被拋棄。

      1.14 時鐘
       絕大部分實時系統需要周期時間間隔的處理。每個NP任務有一個內建的時鐘,該時鐘用于提供任務睡眠或系統調用懸掛超時。
        Ticks(嘀嗒):時間的基本單位。每個Tick對應單個硬件時鐘中斷。每個Tick表示的實際時間量有用戶編程設定。
      錯誤邊界:時鐘請求可能比實際的時間早一個Tick,這是因為在時鐘請求后,Tick可以馬上發生。
        硬件需求:NP需要周來自迎接的周期時鐘中斷。如果沒有這個中斷,時鐘工具將不可用。然而,其他的NP工具不會因為缺少時鐘工具而被影響(!!強,J)
        連續時鐘:NP維護一個連續技術Tick時鐘,其值為4,294,967,294 (232),達到值后,自動復位。該連續時鐘被保留,不用于其他應用使用,可以被應用在任何時候讀或寫。
      任務時鐘:每個任務有一個內建時鐘能夠。用于任務睡眠或懸掛超時,此外,對需要時間片的任務,有個時間片時鐘可用。
        應用時鐘:NP提供給應用可編程時鐘。當該時鐘到時,執行用戶指定的例程。該例程作為中斷服務例程執行。因此,自懸掛請求是不允許的。此外,處理時間應該盡可能的短。
        重新調度:當時鐘過期,預先指定例程被執行。執行結束后,時鐘可以消失或重新調度。如果重新調度值為零,則初次過期后,時鐘消失。如果不為零,則重新調度時鐘,設定為這個調度值。

        Enable/Disable:在創建期間時鐘被自動使能。可以被動態的使能或Diable。

      1.15 中斷
        中斷是提供隊內部或外部事件立刻反應的機制。當中斷發生時,處理器懸掛當前執行路徑,把控制流轉移到中斷服務程序(ISR)。一個中斷的精確操作是跟處理器相關。
        NP支持可管理或不可管理的ISRs。可管理ISR是指那些不需要保存和恢復上下文的情況,而不可管理是指其負責保存和恢復所用泳道的寄存器。可管理的ISR可以用C或匯編寫成;而不可管理的ISR幾乎都是匯編寫成。
        保護:對于所有的實時內核,中斷總是產生一些感興趣的問題。NP當然也不例外。主要問題來自于ISRs需要存取的NP的服務。表面上,這個看起來不是個問題,然而,其需要在系統服務代用期間,防止同時被ISR存取。簡單的方法是在終端服務期間鎖住中斷。
        對中斷響應快速實時系統的基礎。因此,鎖住中斷來保護內部數據是不被希望的。NP處理這個問題是通過把應用ISR分為和低級部分。

        低級ISR(LISR):LISR和正常ISR一樣,使用當前的堆棧。NP在調用LISR前保存上下文,執行LISR后恢復上下文。因此,LISR可用C寫,而且可以調用其他C例程。然而,僅有少量的NP服務對LISR可用。如果中斷處理例程需要其他的NP服務,則ISR(HISR)被激活。NP支持多LISR嵌套。

        ISR(HISR):HISR被動態創建或刪除。每個HISR擁有自己的堆棧和自己的控制塊,其內存有應用提供。當然,在LISR激活前,HISR必須被創建。
        由于HISR有自己的堆棧和控制塊,當其存取正在被存取的NP數據結構時,可以被臨時阻塞。
        HISR可以存取絕大部分NP服務,除了自懸掛服務。此外,由于HISR不能懸掛NP服務,其懸掛參數必須總是被設定為NU_NO_SUSPEND。
        HISR有3個優先級可用,如果在處理低優先級的HISR時,高優先級的HISRj激活,則低優先級的被"搶占",這個任務搶占是一樣的。相同優先級的HISR根據激活順序,依次執行(注意!不是輪轉哦!!)在正常的任務調度以前,所有激活的HISR被執行。
        每個HISR有個激活計數器。該計數器用于保證每個激活都被執行一次。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 伊人色综合久久天天 | 亚洲人成电影手机在线播放 | 亚洲国产日韩综合久久精品 | 欧美亚欧在线视频 | 一区二区三区在线性爱视频 | 色综五月亚洲欧美婷婷 |