在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RTA OS系列介紹01-Task

832065824 ? 來源:CSDN ? 作者:CSDN ? 2022-12-21 14:13 ? 次閱讀

0. 系列概述

OSEK是由歐洲自動化協會對汽車電氣制定的開放式系統,全稱為OS-EK/VDX。

RTA-OS是基于OSEK OS的符合AUTOSAR規范的OS,是一種靜態可配置、搶占式、實時操作系統(RTOS),用于高性能、資源受限的應用程序。

AUTOSAR OS主要包含Task, ISRs, Events, Resources, Application, Counter, Alarms, Schedule Table等OS對象。后續將對如上提到的八個對象進行分別介紹,本篇介紹的內容為Task,下面進入正題:

1.Task概述

任務調度分為靜態調度及動態調度,二者區別為,靜態調度是在調度前就已經配置好,而動態調度是根據負載率自動去調度的。在OSEK的OS系統中,Task是主要部分,RTOS里是靜態調度,在單個處理器上一次只運行一個任務,不同任務之間通過調度表或者Alam進行切換。

2. 基本概念

2.1 基礎任務與擴展任務

當前項目中基本使用的都是BASIC類型。

2.1.1 基礎任務

狀態:Running,Ready,Suspended。

基本任務開始、執行和終止(這通常稱為單次任務模型)。只有當基本任務終止或被更高優先級的任務搶占時,它才會釋放處理器。這種行為使它們非常適合嵌入式控制功能。基本任務快速有效。

2.1.2 擴展任務

擴展任務啟動、執行、等待事件(Wait event)和(可選)終止。擴展任務在執行期間自動掛起自身任務的能力為任務提供了一種具有同步點的方法。此功能使擴展任務比基本任務更適合于需要中間執行同步的功能。

擴展任務時間響應較快,但會一直占用Ram資源,相當于以空間換時間。

b99f5f5c-80cb-11ed-8abf-dac502259ad0.png

2.2 任務狀態

任務的狀態包括:Ready、Running 、(Waiting) 、Suspended

所有任務默認的狀態都是Suspended狀態,在被激活后才變成Ready狀態,當該任務為系統中的最高優先級任務時即轉為Running狀態,并開始執行任務,同時任務可能被更高優先級的任務搶占,重新變成Ready狀態。

任務通過終止返回到掛起(Suspended)狀態。一項任務可以在以后再次準備好,整個過程可以重復。

但是,擴展任務也可以進入Waiting狀態。當擴展任務通過等待事件自動掛起時,它將從Running狀態移動到Waiting狀態。

當擴展任務進入Waiting狀態時,操作系統將分派準備運行的最高優先級任務。設置事件后,任務將從Waiting狀態移動到Ready狀態。請注意,擴展任務返回到Ready狀態,而不是Running狀態。這是因為,在擴展任務處于Waiting狀態期間,其他一些更高優先級的任務可能已被激活,然后被調度。

Event只是用于為系統事件提供指示器的操作系統對象。事件示例包括數據準備好使用或正在讀取傳感器值。

激活Task的方式有:調用ActivateTask() API,或Alarm到期或調度表

2.3 任務優先級

AUTOSAR-OS運行任務可以享有同一優先級,同一優先級的任務以先進先出FIFO(First In First Out)的原則從Ready狀態Release。

使用時需避免使用Share Priorities,實時性差,無法進行調度可行性分析。

2.4 任務激活

2.4.1 隊列任務激活

在大多數情況下,僅需任務處于掛起狀態時激活它。事實上,AUTOSAR OS將處于就緒、運行或等待狀態的任務激活視為錯誤情況。

但是,在某些情況下,可能需要實現一個系統,該系統必須多次激活同一任務,但連續激活之間最短的時間可能小于運行該任務所需的時間。例如,用戶可能正在任務中解包CAN總線幀,并且需要處理網絡上幀的瞬時突發,這意味著用戶需要在運行時對任務激活進行排隊。

AUTOSAR OS允許對基本任務的激活進行排隊,以幫助構建此類應用程序。與AUTOSAR OS中的其他功能一樣,任務隊列的大小是靜態配置的。必須指定任務可以掛起的最大激活次數。如果超過激活的最大次數,激活將被忽略。

2.4.2 異步任務激活

AUTOSAR OS允許別的核激活當前核的Task,而不是從任務實際運行的核激活任務。雖然這可能很有用,但可能會影響性能.因為要完全符合AUTOSAR,所有任務激活(包括SetEvent)必須阻止調用方,直到任務狀態更新。在內部,操作系統必須使用內部自旋鎖來協調與所屬核的狀態更改。這會對所有核的性能產生重大影響。

2.5 任務調度

RTA-OS提供了一種根據提前固定好的不同優先級的任務間切換執行的調度方式。優先級排序的原則一般為:執行時間越短,執行頻率越快的優先級越高。但無論選擇如何分配優先級,任務執行的順序都由調度策略決定。調度策略確定任務實際運行的時間,AUTOSAR OS支持兩種調度策略:

2.5.1 搶占式調度

當一個Task正在運行,另一個更高優先級的任務準備運行,此時高優先級的任務會搶占執行,這也被稱為任務切換,高優先級任務執行完畢后,原來的task繼續執行。

b9cd3c42-80cb-11ed-8abf-dac502259ad0.png

2.5.2 非搶占式調度

與搶占式調度不同的是,如果高優先級任務準備就緒,那么它將保持準備運行狀態,直到運行任務終止—它不會搶占。這意味著開始運行的非搶占式任務將始終運行到完成,然后終止。

b9ecf3b6-80cb-11ed-8abf-dac502259ad0.png

2.5.3 協作式調度

此外,AUTOSAR OS提供了對第三種稱為協作調度的調度的支持,因為它允許非搶占式任務告訴OS何時可以搶占。之所以說AUTOSAR OS支持兩種策略,是因為只有兩種配置—第三種配置必須自己構建。

操作系統運行準備運行的最高優先級任務。如果更高優先級的任務準備就緒,那么它將保持就緒,直到以下任一情況:

1) 正在運行的任務終止(就像非搶占式調度一樣);

2) 或者正在運行的任務發出Schedule()API調用,告訴操作系統它可以被搶占。

當發出Schedule()調用時,優先級較高的任務會搶占正在運行的任務,當高優先級任務完成后,搶占任務將恢復。這種合作模式提供的系統雖然不如完全搶占式系統響應快,但不會出現非搶占式調度缺乏響應的情況。

ba199ac4-80cb-11ed-8abf-dac502259ad0.png

3. Task 配置

包括:name、Priority、Scheduling、Activation及Autostart

優先級:0是最低優先級,

調度:任務可以完全搶占或非搶占地運行。一般來說,為了獲得最佳的應用程序性能,應該選擇完全搶占式調度而不是非搶占式調度。

激活:在Ready狀態下可以排隊的最大任務激活數。對于BCC1、ECC1和ECC2任務,激活次數始終為一次。這意味著這些類型的任務只有在處于掛起狀態時才能激活。在未掛起的情況下,嘗試激活此類任務將導致錯誤。大于1的值表示操作系統將對激活進行排隊,任務結束時再次激活。

4. 堆棧管理

RTA-OS使用單棧模型,即所有的Task、ISRS在同一個堆棧區域上運行。

當任務運行時,其堆棧使用量會像正常情況一樣增減。當任務被搶占時,高優先級任務的堆棧使用將在同一堆棧上繼續(就像標準函數調用一樣)。當任務終止時,它使用的堆棧空間將被回收,然后重新用于下一個優先級最高的任務運行(同樣,與標準函數調用一樣)。下圖顯示了單堆棧在聲明、搶占和終止任務時的行為。

ba3f6b78-80cb-11ed-8abf-dac502259ad0.png

在單堆棧模型中,堆棧大小與系統中優先級的數量成比例,而不是與任務/ISR的數量成比例。這意味著,直接或通過共享內部資源,或通過被配置為非先發制人,共享優先級的任務永遠不會同時出現在堆棧上。在硬件上共享優先級的ISR也是如此。這意味著用戶可以通過簡單的配置更改來交換系統響應性,即任務或ISR完成所需的時間,以換取堆棧空間。

上圖顯示了同一任務集的執行情況,具有與上上圖相同的到達模式,但這次任務是非搶占式調度的。可以看到,高優先級任務的響應時間比搶占式調度時長得多,但總體堆棧消耗要低得多。

ba76d004-80cb-11ed-8abf-dac502259ad0.png

單堆棧模型還顯著簡化了鏈接時的堆棧空間分配,因為用戶只需為整個系統堆棧分配單個內存部分,就像根本不使用操作系統一樣。

4.1 擴展任務的堆棧管理

RTA-OS獨特地擴展了單堆棧模型,在不影響基本任務性能的情況下為擴展任務提供支持。在RTA-OS中,擴展任務的生命周期如下:

Suspended→Ready:任務被添加到Ready 序列

Ready→Running:任務已調度,但與內容位于堆棧頂部的基本任務不同,內容位于堆棧空間中,所有低優先級任務的預先計算的最壞情況搶占深度處。

Running→Ready:擴展任務被搶占。如果搶占任務是一個基本任務,那么它會像往常一樣在堆棧頂部調度;如果搶占任務是一個擴展任務,那么它將按照預先計算的所有低優先級任務的最壞情況搶占深度進行調度。

Running→Waiting:任務的等待事件堆棧內容(包括操作系統上下文、本地數據、函數調用的堆棧幀等)保存到內部操作系統緩沖區中。

Waiting→Ready:任務添加到Ready 隊列。

Running→Suspended:任務的“等待事件堆棧”內容將從內部操作系統緩沖區復制回堆棧中所有低優先級任務預先計算的最壞情況搶占深度。

bab17060-80cb-11ed-8abf-dac502259ad0.png

擴展任務管理要求RTA-OS知道任務和ISR使用了多少堆棧。以下各節描述了各種配置參數

4.2 處理堆棧溢出

如果用戶提供給RTA-OS的堆棧分配太小(運行時錯誤的潛在來源),有三種錯誤情況可能發生:

1.當RTA-OS嘗試調度擴展任務時,堆棧指針的當前值高于計算的最壞情況調度點,因此擴展任務無法啟動。這意味著堆棧上的一個(或多個)低優先級任務占用了太多空間。

2.擴展任務無法從等待狀態恢復,因為堆棧指針高于它應該的值。當為擴展任務正在等待的事件調用SetEvent()并且擴展任務現在是系統中優先級最高的任務時,可能會發生這種情況。

3.擴展任務無法進入等待狀態,因為任務正在使用的堆棧的當前數量大于配置的“WaitEvent()堆棧”的大小。

當RTA-OS檢測到擴展任務堆棧管理出現問題時,它將調用ShutdownOS(),錯誤代碼為E_OS_STACKFAULT。如果要調試該問題,則可以啟用堆棧故障Hook。配置后,RTA-OS將在堆棧故障發生時調用用戶提供的回調OS_Cbk_StackOverflowHook(),而不是ShutdownOS()。回調傳遞了兩個參數:溢出的字節數、溢出的原因。

5. 任務的控制

5.1 任務激活

任務激活后變為Ready狀態,當該任務的優先級為所有Ready狀態的任務及當前處于Running的任務最高時,開始(或搶占)變成Running狀態。

任務每次被激活后會運行一次,當激活的次數超過配置次數時會報E_OS_LIMIT錯誤。

任務可以通過Tasks或二類中斷激活。

5.1.1 直接激活

可以通過多種不同的方式激活任務。任務激活的基本機制是ActivateTask()API調用,它直接激活任務。ActivateTask(TaskID)調用將命名任務置于就緒狀態。ChainTask(TaskID)終止當前正在運行的任務,并將激活指定任務置于就緒狀態。

#include  


TASK(Task1)  {


  /*  Task1  functionality.  */


  ActivateTask(Task2);


  TerminateTask();


}


TASK(Task2)  {


  /*  Task2  functionality.  */


  ActivateTask(Task3);


  TerminateTask();


}


TASK(Task3)  {


  /*  Task3  functionality.  */


  TerminateTask();


}

5.1.2 間接激活

通過Alarm激活或通過調度表激活。

通過Alarm激活:對于系統中的每個Alarm,可以指定一個任務,該任務在每次Alarm過期時激活。

調度表激活:對于系統中的每個調度表,可以指定在表上的一個或多個到期點激活的任務。

5.2 任務執行順序控制

許多情況下,需要控制任務執行的順序,即某個任務的執行需要基于前一個任務執行的結果。時序的控制可以通過如下三種方式:

?直接激活鏈;

?優先級;

?不可搶占的任務。

5.2.1 通過直接激活鏈

當使用直接激活鏈控制執行順序時,任務對必須在發出調用的任務之后執行的任務進行ActivateTask()調用。

bacde3a8-80cb-11ed-8abf-dac502259ad0.png

5.2.2 通過任務優先級

將需要優先執行的任務設置更高的優先級,在執行時即可按搶占式完成。

5.3 RTA-OS中的合作式調度

當任務以非搶占方式運行時,它會阻止任何任務(包括優先級較高的任務)執行。然而,有時對于非搶占式任務來說,提供可以進行重新調度的明確位置是很有用的。這比簡單地非搶占式運行更有效,因為高優先級任務對系統刺激的響應時間更短。任務以非搶占方式運行并為重新調度提供點數

的系統稱為合作調度系統。

baf7850a-80cb-11ed-8abf-dac502259ad0.png

5.4 任務終止

在AUTOSAR操作系統中終止的任務必須進行API調用,以告知操作系統正在發生這種情況。AUTOSAR OS標準定義了兩個用于任務終止的API調用。其中之一必須用于終止任何任務。這些API調用是:

? TerminateTask()

? ChainTask(TaskID)

當任務完成時,它必須進行其中一個API調用。這確保RTA-OS可以正確地安排準備運行的下一個任務。

TerminateTask()強制調用任務進入掛起狀態。RTA-OS將在Ready狀態下運行下一個優先級最高的任務。

ChainTask(TaskID)終止調用任務并激活任務TaskID。因此,該API類似于執行TerminateTask(),然后立即執行ActivateTask(TaskID)。鏈接任務會將命名任務置于就緒狀態。

5.5 任務的Idle機制

在任何搶占式OS中,當沒有Task或中斷運行時也必須要有些事情做。在AUTOSAR OS中是通過Idle 機制實現。在RTA-OS中當沒有Task或中斷執行時,系統將處于繁忙的等待循環中。

用戶可以通過聲明一個名為Os_Cbk_idle的回調函數來提供自己的空閑機制實現方式,從而覆蓋默認行為。

Os_Cbk_idle的行為較普通Task外有如下不同:

. 不能被激活

. 不能被終止

. 不能被鏈(嵌套)調用

. 不能使用內部資源

Os_Cbk_Idle的優先級最低,即當沒有任何及中斷運行時才會Ready to Run。

Os_Cbk_Idle在退出時返回一個布爾值,告訴RTA-Os是否再次調用Os_Cbk_Idle。當返回TRUE時,RTA-OS將立即再次調用Os_Cbk_Idle。當返回FALSE時,RTA-OS停止調用Os_Cbk_Idle并進入繁忙等待循環的默認行為。

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19376

    瀏覽量

    230441
  • 應用程序
    +關注

    關注

    37

    文章

    3284

    瀏覽量

    57776
  • OSEK
    +關注

    關注

    2

    文章

    19

    瀏覽量

    13040

原文標題:RTA OS系列介紹01-Task

文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    明緯電源DETN01-N系列非穩壓轉換器產品概述

    MEAN WELL明緯電源DETN01-N系列具體型號:DETN01L-05N,DETN01L-12N,DETN01L-15N,DETN
    的頭像 發表于 09-12 09:21 ?495次閱讀
    明緯電源DETN<b class='flag-5'>01</b>-N<b class='flag-5'>系列</b>非穩壓轉換器產品概述

    基于STM32的E01和E01C驅動移植

    實驗簡介基于STM32F103C8T6的E01系列(nRF24L01P)和E01C系列(SI24R1)的EBYTE官網例程移植。EBYTE官
    的頭像 發表于 08-30 12:35 ?411次閱讀
    基于STM32的E<b class='flag-5'>01</b>和E<b class='flag-5'>01</b>C驅動移植

    Ra-01/Ra-01S/Ra-01SC等LoRa模組可以互通嗎?

    。 除此之外,安信可LoRa系列還有SX126X系列、LLCC68系列,今天主要向大家介紹安信可的LoRa模塊如何替換,并且實現相互替換以及通信。涉及到模塊主要有如下幾個
    的頭像 發表于 08-13 14:11 ?511次閱讀
    Ra-<b class='flag-5'>01</b>/Ra-<b class='flag-5'>01</b>S/Ra-<b class='flag-5'>01</b>SC等LoRa模組可以互通嗎?

    HXGK-T01系列光纖涂覆機技術說明書

    電子發燒友網站提供《HXGK-T01系列光纖涂覆機技術說明書.pdf》資料免費下載
    發表于 07-27 13:24 ?0次下載

    求助,關于函數編寫庫函數使用疑問求解

    疑問一(system_os_task使用疑問): 如下調用的最終結果是否是優先級 “USER_TASK_PRIO_0”對應的回調函數為“test_task_2”。 system_os_tas
    發表于 07-15 07:18

    esp8266運行REMOTE_OTA_TASK出錯的原因?

    我使用的是安信可的ESP 01-M模塊,在https://github.com/espressif/esp8266-aliyun?spm=5176.doc42648.2.9.Oe0lw3下載了由樂鑫
    發表于 07-10 06:32

    esp8266EX報\"event_task\"(stack_size = 0,task handle = 40108368) overflow the heap_size.是不是內存不夠用?

    , stack:384 tim_task_hdl : 40107bf8, prio:2,stack:512 SDK version:2.0.0(e271380) mode : sta(60:01:94
    發表于 07-09 07:43

    esp32同時讓wifi和藍牙工作,會出現wifi task看門狗復位的情況怎么解決?

    使用esp32-aliyun sdk的聯網,配合4.3的SDK來開發,在開啟配網時候加上使用blufi來進行藍牙配網,同時開啟藍牙和wifi時候就會出現wifi task看門狗復位,具體的信息如下
    發表于 06-21 06:21

    AG32 下使用 uC/OS 的參考

    :AppTaskTimer,則注掉其他 task 的創建即可。 uC/OS 的樣例較為簡單,自行嘗試即可。 三、使用自建工程: 如果用戶希望在自建工程中使用 uC/OS,該如何把它添加進來? 比如,在
    發表于 05-29 09:45

    鋰電池保護芯片DW01-A系列電路數據手冊

    電子發燒友網站提供《鋰電池保護芯片DW01-A系列電路數據手冊.pdf》資料免費下載
    發表于 04-28 15:32 ?10次下載

    用STM32CUBE創建 一個USBH FREERTOS,USBH_Process_OS函數就是進不去的原因?

    StartDefaultTask新創建了一個 USBH 的線程 #if (USBH_USE_OS == 1U) #if (osCMSIS < 0x20000U) /* Create USB Host
    發表于 04-07 08:39

    2024款鴻蒙OS 最新HarmonyOS Next_HarmonyOS4.0系列教程分享

    鴻蒙的出現,標志著中國科技的崛起。HarmonyOS就是我們說的華為鴻蒙系統,截止到2023年8月4日已有超過7億臺設備搭載了鴻蒙OS系統。據多家媒體報道,2024年國內有21所985大學都開設
    發表于 02-28 10:29

    verilog task和function區別

    verilog中的task和function都是用于實現模塊中的可重復的功能,并且可以接收參數和返回結果。但是它們在編寫和使用上有一些區別。下面將詳細介紹task和function的區別。 語法結構
    的頭像 發表于 02-22 15:53 ?1150次閱讀

    verilog中function和task的區別

    在Verilog中,Function和Task是用于模塊化設計和重用代碼的兩種重要元素。它們允許開發人員將復雜的操作分解為更小的功能單元,并在需要時調用它們。雖然Function和Task在某些方面
    的頭像 發表于 02-22 15:40 ?1965次閱讀

    RL78系列 Flash自編程庫01型日語版本用戶手冊

    電子發燒友網站提供《RL78系列 Flash自編程庫01型日語版本用戶手冊.pdf》資料免費下載
    發表于 02-19 10:17 ?0次下載
    RL78<b class='flag-5'>系列</b> Flash自編程庫<b class='flag-5'>01</b>型日語版本用戶手冊
    主站蜘蛛池模板: 香蕉视频在线免费播放| 婷婷丁香九月| baoyu777永久免费视频| 失禁h啪肉尿出来高h男男| 午夜三级福利| 天堂网www天堂在线网| 久久riav国产精品| 久久国产福利| 日本68xxxxxxxxx59| 免费高清在线视频色yeye| 色吧亚洲欧美另类| 一级待一黄aaa大片在线还看| 特级毛片免费看| 免费观看色| 182福利视频| 久热首页| 欧美乱xxxxxxxxx| 国产叼嘿视频网站在线观看| 性a爱片免费视频性| 日本高清午夜色wwwσ| 国产小片| 天天拍天天操| 亚洲小便| 中国videos偷窥| 四虎影视在线看| 精品国产乱码久久久久久浪潮| 爱爱免费| 精品视频在线视频| 亚洲一区二区中文| 婷婷免费视频| 狠狠色狠狠色| 日韩夜夜操| 69日本xxxxxxxxx29| 伊人亚洲综合网成人| 欧美色视频网站| 成人小视频在线| 国产精品国产三级在线高清观看| 国产汉服被啪福利在线观看| 深夜性久久| 国产一二三区在线观看| 天天干天天操天天碰|