Nucleus-SE迁移:未实现的设施和兼容性
Nucleus-SE遷移:未實現的設施和兼容性
Nucleus SE migration: Unimplemented facilities and compatibility
Nucleus SE的一個關鍵設計要求是與Mentor的旗艦實時操作系統產品Nucleus
RTOS高度兼容。Nucleus SE有Nucleus RTOS功能的一個子集,我在本系列的所有相關場合都強調了這一點,但是在本文中,我將嘗試將所有關鍵的差異集中在一個地方。其目的是為任何計劃在兩個內核之間遷移或為特定項目選擇內核的人提供快速參考。
與Nucleus RTO相比,Nucleus SE除了功能有限或簡化外,還設計為盡可能提高內存效率,用戶可以利用大量機會進行調整。這個策略的一個關鍵部分是可伸縮的功能。內核功能的許多特性可以根據需要啟用或禁用。顯然,對于給定的實現,禁用功能會增加與Nucleus rto的不兼容性。
在Nucleus RTOS中,一個系統可以用不確定數量的內核對象構建,唯一的主要限制是可用資源(即內存)的數量。Nucleus SE對每種對象類型的限制不超過16個;一個系統可以有1到16個任務,其他類型的對象(郵箱、隊列等)可以有0到16個。雖然這一限制可能會增加,但這將需要大量的工作,因為在半字節(4位)中存儲對象索引的能力被廣泛利用。另外,如果允許16個以上的任務,優先級調度程序很可能變得非常低效。受到這些限制的應用程序并不真正適合Nucleus SE,Nucleus RTOS可能是更好的選擇。
調度員
像任何現代的實時內核一樣,Nucleus RTOS有一個非常靈活的調度器,提供許多優先級(在任何給定的級別上有不確定數量的任務);以及循環調度和時間片調度的可能性。nucleusse要簡單得多,它提供了四種不同的調度程序,必須在構建時選擇它們:運行到完成、循環調度、時間片和優先級。沒有組合調度方法的選項(即沒有復合調度器)–例如,混合優先級和時間片。此外,優先級調度器只允許在每個優先級上執行一個任務-優先級級別與任務數量相同。任務的優先級在構建時是固定的,如果使用該選項,則時間片也是如此。
API調用
應用程序接口(API)是操作系統的可見“面”。毫不奇怪,在這里,RTOS核和SE核之間的差異最為明顯。
Nucleus SE與Nucleus RTOS沒有相同的API。然而,它的API經過精心設計,可以很容易地映射到Nucleus RTOS API的一個子集上。Nucleus rto的許可證持有者可以獲得一個“包裝器”(一個包含#define宏的頭文件),它使映射幾乎完全透明。
由于Nucleus SE API是Nucleus RTOS的一個子集,因此可能缺少一些API調用。這是事實,也是Nucleus SE設計標準的必然結果。有些API調用是不相關的,因為它們應用于不存在的功能;其他一些調用則由于一些內核對象的實現中的簡化而丟失。本文的以下部分將詳細介紹這些內容。
常用API函數
在Nucleus rto中,有一些API函數在許多不同類型的內核對象中是通用的,甚至是在所有類型的內核對象中都是通用的。其中一些也在Nucleus SE中實現-“reset”就是一個很好的例子。其他一些則不適用于內核對象的Nucleus SE實現。
創建和刪除
在Nucleus RTOS中,所有的內核對象都是動態的,它們是根據需要創建和刪除的。因此,為此提供了API調用。在Nucleus SE中,所有對象都是靜態的,它們是在構建時創建的,因此不需要這樣的API調用。
返回對象指針
Nucleus RTOS為內核對象使用的主標識符(句柄)是指向對象的控制塊的指針,在創建對象時分配給它。因此,有一組API調用返回指向每種類型對象的指針列表。由于Nucleus SE使用一個簡單的索引來標識內核對象,這樣的調用是多余的。程序可以詢問內核以確定配置了多少個給定對象類型的實例(使用NUSE_Mailbox_Count());如果該值為n,則對象類型的索引將從0到n-1。
廣播數據
對于許多Nucleus RTOS內核對象類型(特別是郵箱、隊列和管道),提供了一個“廣播”API調用。這有助于向讀取對象時被阻止的每個任務發送數據項。為了簡單起見,Nucleus SE省略了此功能,因為訪問這些對象中的數據總是在相關任務的上下文中獲得的,然后釋放對象;為了實現廣播,還需要一個附加的標記機制。
對象特定的API函數
許多內核對象都具有非常特定于特定對象類型的API調用,并且在Nucleus rto和Nucleus SE之間有所不同。
任務
由于Nucleus RTOS調度器比Nucleus SE復雜得多,因此不需要API函數提供的許多工具:
任務先發制人姿態的改變-不受Nucleus SE支持
更改任務的優先級–優先級是在配置時使用Nucleus SE設置的,不能更改
更改任務的時間片–時間片值對于所有任務都是全局的,并在Nucleus SE中在配置時固定
終止任務–Nucleus SE不支持“已終止”任務狀態
動態存儲器
由于所有內容都是在Nucleus SE中靜態創建的,所以不支持(或需要)動態內存。因此,不需要許多特定的API函數。
信號
Nucleus RTOS支持信號處理程序,即修改任務信號時運行的例程(類似于中斷服務例程)。Nucleus SE省略了此功能,因此不需要對控制信號和注冊信號處理程序的API調用。
中斷
Nucleus SE對中斷采取“不干涉”的態度,只需在中斷服務例程中方便地執行一些API調用。因此,不需要指定內核進程中斷方式的Nucleus RTOS API調用集。
診斷學
Nucleus SE的診斷設備非常簡單,符合其“精益”設計,僅限于(可選)參數檢查和產品版本代碼報告。因此,沒有實現與歷史記錄和斷言相關聯的Nucleus RTOS API調用。
驅動
Nucleus RTOS有一個定義良好的、正式的驅動程序結構,有許多與驅動程序管理相關的API函數。Nucleus SE沒有這樣的結構,因此不需要相關的API調用。
API調用功能
Nucleus SE功能的幾個方面(以簡化的方式實現)與Nucleus RTOS存在差異。這些因素中有許多會影響API調用的使用方式和可用的工具。
超時
對于Nucleus RTOS,在很多情況下,API調用可以選擇掛起一個任務,等待資源的可用性——任務被阻塞。此暫停可能是不確定的,即直到資源可用為止,或者可以指定一個超時值。Nucleus SE提供阻塞API調用作為一個選項,但只能指定不確定的掛起,即調用只能包括NUSE_SUSPEND或NUSE_NO_SUSPEND,而不是超時值。這種能力可以以一種相當簡單的方式添加到Nucleus SE中。
暫停命令
當使用Nucleus RTOS創建許多類型的對象時,可以指定掛起順序。這是當資源可用時,許多被阻止的任務將恢復的順序。有兩個選項可用:先進先出(first-in-first-out),即按阻止任務的相同順序恢復任務;或者按優先級順序(優先級最高的任務總是先恢復)。Nucleus SE不提供這種選擇。只執行優先順序。實際上,順序是按任務索引的,因為這不僅適用于優先級調度程序,還適用于循環調度和時間片。
對象特定功能
在某些情況下,功能會發生變化,這是特定于特定類型對象的。
信號處理程序
正如本文前面提到的,Nucleus SE中的信號實現不支持信號處理例程。
應用程序計時器參數
計時器具有初始持續時間和重新啟動持續時間,并且可以在到期時選擇性地執行用戶指定的函數。Nucleus RTOS和Nucleus SE都支持此功能。但是,與Nucleus RTOS不同,Nucleus SE不允許在進行reset API調用時更改這些參數中的任何一個。此外,在Nucleus SE中,對過期例程的完整支持是可選的。
事件標志
對于Nucleus RTOS,可以選擇“使用”事件標志。這意味著符合任務匹配條件的標志將被清除。Nucleus SE中沒有提供此功能,因為通過適應滿足多個任務的匹配標準的可能性,復雜性大大增加。
數據大小
與Nucleus RTOS相比,保持簡單性和最小化內存使用的兩個Nucleus SE設計標準導致了數據項大小的許多差異。需要注意的是,Nucleus RTOS通常使用無符號類型的數據,可能是32位;而Nucleus SE使用合理化的數據類型,如U32、U16、U8等。
郵箱
在Nucleus RTOS中,一個郵箱攜帶一條由四個未簽名數據項組成的消息。在Nucleus SE中,郵箱攜帶ADDR類型的符號數據項。我認為郵箱的一個常見用途是在任務之間傳遞地址(指向某些數據)。
排隊
在Nucleus RTOS中,隊列處理一個或多個未簽名數據元素的消息;隊列也可以配置為處理可變大小的消息。在Nucleus SE中,隊列處理由ADDR類型的單個數據項組成的消息。我的想法是隊列的使用方式與郵箱類似。此外,在Nucleus RTOS中,隊列的總大小(即有空間的無符號元素的總數)被指定為無符號值。在Nucleus SE中,該值的類型為U8。因此,隊列的數據容量較小。
管道
在Nucleus RTOS中,管道處理一個或多個字節的消息;管道也可以配置為處理可變大小的消息。在Nucleus SE中,管道處理由一個或多個U8類型的數據項組成的消息。在配置時為每個管道設置消息大小。此外,在Nucleus RTOS中,管道的總大小(即有空間的字節總數)被指定為無符號值。在Nucleus SE中,此值的類型為U8,表示消息數(NUSE_Pipe_Information()API調用中)。因此,管道的數據容量較小。
事件標志組
在Nucleus RTOS中,一個事件標志組包含32個標志;在Nucleus SE中,它被減少到8個。這個尺寸被選為Nucleus SE高效處理8位數據的目標處理器。更改Nucleus SE以處理不同大小的事件標志組并不困難。
信號
在Nucleus RTOS中,每個任務都有一組32個信號標志。在Nucleus中,SE信號是可選的,每個任務只有一組8個標志。這個尺寸被選為Nucleus SE高效處理8位數據的目標處理器。改變Nucleus SE來處理不同大小的信號標志集并不困難。
內存分區
在Nucleus RTOS中,分區的數目和大小都是無符號參數。在Nucleus SE中,分區數是U8類型的參數,分區大小是U16。這意味著對分區和池大小有一些限制。
計時器
在Nucleus RTOS計時器(兩個應用程序計時器和一個任務休眠)中,處理unsigned類型的值。在SE核中為U16型。選擇這種類型的處理器可能是Nucleus SE高效處理16位數據的目標處理器(8位不足以發揮作用)。改變Nucleus SE來處理不同大小的計時器并不困難。
總結
以上是生活随笔為你收集整理的Nucleus-SE迁移:未实现的设施和兼容性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RTOS诊断和错误检查
- 下一篇: 使用Nucleus SE实时操作系统