明確封鎖 - 它表示在值到達之前封鎖的 AR 明確存取。在存取權及啟動標籤中,沒有作用中元素可以具有接收到資料事件的啟動原則。
明確無封鎖 - 它表示立即返回並帶有狀態碼的 AR 明確存取。在存取權及啟動標籤中,沒有作用中元素可以具有在發生接收到資料事件時起動的啟動原則。
隱含 - 它表示 AR 隱含存取。在存取權及啟動標籤中,必須有一個存取它的作用中元素。
同步 – 呼叫會在伺服器完成作業之前封鎖
非同步 – 呼叫會立即返回
另一個具有啟動原則「非同步伺服器呼叫返回事件」的作用中作業,可用於擷取已撰寫參數的值
存取傳送端或接收端介面上的 DataElements,以及用戶端或伺服器介面上的作業。存取權基於存取權及啟動標籤定義。
決定 RTE 排程器應該何時啟動該作業的啟動原則。它的值可以為下列其中一個:
非同步啟動原則 - 啟動基於存取權及啟動標籤定義
定期啟動原則 - 時段和偏移已定義
存取權 - 哪些作用中元素(如資料讀寫存取、資料發送/接收點、伺服器同步或非同步呼叫點、等待點等)存取埠上的哪些元素。 隱含或明確的存取模式在 RIMB 介面上的屬性層次中指定,而不是在這裡。
啟動 - 代表非同步作用中元素的啟動原則。定義哪些 RTE 事件(除了計時事件)將導致啟動每個非同步作用中元素。如果是行定義(其他)存取權,則啟動可能為「不適用」
RIMB 並行可以為作用中(預設值)或循序。 當並行為「作用中」時,將針對 RIMB 的 "doExecute" 方法建立 RunnableEntity。必須指定啟動原則,該原則決定 RTE 何時啟動 RIMB 的 "doExecute" 方法。啟動原則可以為「非同步」或「定期」。「非同步」啟動原則基於「存取權及啟動」標籤定義。「定期」啟動原則基於時段和偏移的定義時間定義。當並行為「循序」時,未定義任何明確啟動。如果 RIMB 定義為執行管理程式,則 RIMB 將實作 "doExecute" 方法,該方法將管理其狀態圖(如果存在)及其組件,並將擁有事件佇列。
接收程式 - 讀取接收端埠上的資料。 在某些情況下,容許變更存取模式而不變更使用者的程式碼。
傳送程式 - 傳送傳送端埠上的資料
處理程式 - 處理收到的資料
接收並處理 - 結合接收和處理的效果
呼叫程式 - 呼叫必要的(用戶端)服務
接收程式、傳送程式、接收並處理和呼叫程式 - 返回 RTE API 狀態
| 產生的 Helper 函數 | 說明 |
|---|---|
receiveData_p_x (int* const x) |
讀取接收端埠 p 上屬性 x 的值並將其放入參數 x。僅限 p.x 是由 C 類型而不是事件輸入時,才會產生此函數。 |
handleData_p_x (int x) |
僅限 p.x 是由 c 類型而不是事件輸入時,才會產生此函數。
|
receiveAndHandleData_p_x() |
立即接收並隨後進行處理。 程式碼是行內的,例如,它不會暗示其他兩個函數呼叫。 |
receiveEvent_p_x (int* const x) |
讀取接收端埠 p 上屬性 x 的值並將其放入參數 x。僅限 p.x 是由 Rhapsody 事件輸入時,才會產生此函數。 最好直接呼叫 receiveAndHandleEvent。 |
handleEvent_p_x() |
僅限 p.x 是由事件輸入時,才會產生此函數。
|
receiveAndHandleEvent_p_x() |
立即接收並隨後進行處理。程式碼是行內的,例如,它不會暗示其他兩個函數呼叫。 |
sendData_p_x(int x) |
將參數值傳送至傳送端埠 p 上的屬性 x。僅限 p.x 是由 C 類型而不是事件輸入時,才會產生此函數。 |
sendEvent_p_x() |
僅限 p.x 是由事件 ev 輸入時,才會產生此函數。
|
call_p_f |
對於用戶端埠 p 上的作業 f 需要進行呼叫。 |
兩個可執行實體:
TimeTick - 負責時間增量
PostTimedElements - 負責公佈過期逾時。在 mxf/RiCTimer.c 中實作。
兩個計時事件:
TimeTick_tmev、PostTimedElements_tmev - 用於定期觸發上述可執行實體
一個排除區域:
TimerManager_EA - 用於確保時間計數器的使用互斥。進入和跳出此排除區域是由名為 RiCOSTimerManagerMutex_lock()、RiCOSTimerManagerMutex_free()的 mxf API 來完成的。
Rhapsody 事件的處理由產生的接收端、傳送程式和處理程式合力進行。RIMB 的狀態圖可能透過下列兩種模式之一執行:
RTE 管理 - 到達 AR 接收端埠的資料元素會轉換至觸發的作業中。 當資料元素到達時,RTE 會呼叫直接觸發狀態圖上轉移的對應作用中作業。RIMB 可以是循序的,不處於作用中也不是執行管理程式,並且不需要任何 Rhapsody 事件。在此模式中,只有源自 AR 資料元素到達的觸發作業可以觸發狀態圖上的轉移。不允許呼叫 RiCGEN。
Rhapsody 管理 - 到達 AR 接收端埠的資料元素會轉換至 Rhapsody 事件中。當資料元素到達時,會呼叫作用中作業,它將對應的 Rhapsody 事件排入 RIMBO 的事件佇列。RIMB 需要是作用中的定期執行管理程式。它的 doExecute 定期執行並將事件逐個分派到狀態圖中,這是模仿常用的 Rhapsody 機制。
將 RIMB 定義為「循序」
對應 RIMB 接收端埠 p(其到達應觸發轉移)上的每個屬性 x,透過名稱 evP_x 定義觸發的作業
x 的存取模式必須為明確封鎖或明確無封鎖(亦即,非隱含的),並且必須由一般的 C 類型輸入(例如,不是由 Rhapsody 事件輸入)
撰寫使用那些觸發的作業作為轉移觸發程式的狀態圖
對於每個這種 p.x,可以定義作用中作業以用作 p.x 的分派器
作用中作業的實作必須呼叫 receiveAndHandleP_x()
此步驟對於 RTE 管理的模式和 Rhapsody 管理的模式是相同的。差異是 Rhapsody 針對 receiveAndHandleP_x() 產生的程式碼
將狀態圖的所有分派器標記為「受保護」,以確保將由個別可執行實體啟動的分派器互斥
將 RIMB 定義為「作用中」,並且使用「定期」執行原則
使用 Rhapsody 事件在 RIMB 輸入埠的接收端介面上輸入屬性
接收端埠 p 上 AR 資料元素 x 的到達將觸發事件 ev 新增至事件佇列
埠 p 的 RIMB 接收端介面上的 x 必須由 ev 輸入
ev 是狀態圖上事件的名稱,不是 p.x 上的名稱
將 ev 連結至 p.x 透過由 ev 輸入 x 實現
撰寫使用 Rhapsody 事件 ev 作為轉移觸發程式的狀態圖
對於每個這種 p.x,可以定義作用中作業作為 p.x 的輪詢
作用中作業的實作應呼叫 receiveAndHandleP_x()
此步驟對於 RTE 管理的模式和 Rhapsody 管理的模式是相同的。差異是 Rhapsody 針對 receiveAndHandleP_x() 產生的程式碼