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