1. 什么是調(diào)度表
1.1 調(diào)度表概念
調(diào)度表由一系列按時(shí)間先后順序排序的終結(jié)點(diǎn)組成,其中每個(gè)終結(jié)點(diǎn)都有自己的任務(wù),有的終結(jié)點(diǎn)可能是激活一系列的任務(wù),有的是設(shè)置一系列的事件,還有的可能是既激活一系列的任務(wù)又設(shè)置一系列的事件。
調(diào)度表(ScheduleTables) 通過提供一組靜態(tài)定義的到期點(diǎn)(expiry points)的封裝來解決同步問題。每個(gè)到期點(diǎn)定義:
處理時(shí)必須發(fā)生的一個(gè)或多個(gè)動(dòng)作,其中動(dòng)作是任務(wù)(Task)的激活或事件(event)的設(shè)置。
從調(diào)度表(ScheduleTable)開始點(diǎn)一個(gè)以滴答(Tick)為單位的偏移量(Offset)。
終結(jié)點(diǎn)在調(diào)度表上是按偏移從小到大有序排列的,因此要保證每個(gè)終結(jié)點(diǎn)的偏移都是獨(dú)一無二的,不能有偏移相同的終結(jié)點(diǎn)。
每個(gè)調(diào)度表都有一個(gè)持續(xù)時(shí)間(Duration),即調(diào)度表的一次運(yùn)行時(shí)間,度量單位為計(jì)數(shù)器的計(jì)數(shù)單位 Tick。
從調(diào)度表的起點(diǎn)到初始終結(jié)點(diǎn)的距離被稱為初始偏移(InitialOffset),相鄰終結(jié)點(diǎn)間的距離被稱為延遲(Delay),最后一個(gè)終結(jié)點(diǎn)到調(diào)度表終點(diǎn)的距離稱之為最后延遲(FinalDelay)。
InitialOffset,Delay和FinalDelay的取值范圍如公式3—1,3—2,3-3所示,其中OsCounterMinCycle是驅(qū)動(dòng)計(jì)數(shù)器的最小循環(huán)值,OsCounterMaxAIIowedValue是驅(qū)動(dòng)計(jì)數(shù)器的最大計(jì)數(shù)值。
除此之外,還要區(qū)分清楚幾個(gè)概念:
驅(qū)動(dòng)計(jì)數(shù)器:驅(qū)動(dòng)計(jì)數(shù)器是用于驅(qū)動(dòng)整個(gè)調(diào)度表運(yùn)行的計(jì)數(shù)器,驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)周期通常是固定的,并且要大于調(diào)度表中所有任務(wù)的最小執(zhí)行間隔時(shí)間,以確保每個(gè)任務(wù)都能夠被執(zhí)行到。驅(qū)動(dòng)計(jì)數(shù)器用于控制任務(wù)執(zhí)行的時(shí)間。
驅(qū)動(dòng)計(jì)數(shù)器模數(shù):就是驅(qū)動(dòng)計(jì)數(shù)器的最大值,也就是一份調(diào)度表運(yùn)行完,需要多少個(gè)counter。驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)被定義為OsCounterMaxAllowedValue + 1;
驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)通常不等于調(diào)度表的duration,而是大于調(diào)度表的duration。在實(shí)際的調(diào)度系統(tǒng)中,通常會(huì)將驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)設(shè)置為調(diào)度表的duration的整數(shù)倍,以確保調(diào)度表中的所有任務(wù)都能夠被完全執(zhí)行。例如,如果調(diào)度表的duration為10ms,那么可以將驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)設(shè)置為20ms或者30ms等,以確保每個(gè)任務(wù)都能夠被執(zhí)行到。
調(diào)度表的時(shí)間:調(diào)度表的持續(xù)時(shí)間通常是預(yù)先定義的,用于確定調(diào)度表中所有任務(wù)的執(zhí)行時(shí)間范圍。
驅(qū)動(dòng)計(jì)數(shù)器與調(diào)度表持續(xù)時(shí)間關(guān)系:驅(qū)動(dòng)計(jì)數(shù)器與調(diào)度表時(shí)間相等嗎通常情況下,驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)周期不等于調(diào)度表的時(shí)間。驅(qū)動(dòng)計(jì)數(shù)器是用于驅(qū)動(dòng)整個(gè)調(diào)度表運(yùn)行的計(jì)數(shù)器,它的計(jì)數(shù)周期通常是固定的,并且要大于調(diào)度表的時(shí)間,以確保調(diào)度表中的所有任務(wù)都能夠被執(zhí)行到。
例如:驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)周期為1,即每個(gè)計(jì)數(shù)周期的時(shí)間為1個(gè)單位。調(diào)度表中有3個(gè)任務(wù),分別為Task A、Task B和Task C,它們的執(zhí)行時(shí)間分別為3、5和2個(gè)計(jì)數(shù)周期。
注意:Task A在第一個(gè)周期中執(zhí)行時(shí)間為3個(gè)計(jì)數(shù)周期,在第二個(gè)周期中執(zhí)行時(shí)間為4個(gè)計(jì)數(shù)周期,在第三個(gè)周期中執(zhí)行時(shí)間為2個(gè)計(jì)數(shù)周期,在第四個(gè)周期中執(zhí)行時(shí)間為3個(gè)計(jì)數(shù)周期,在第五個(gè)周期中執(zhí)行時(shí)間為5個(gè)計(jì)數(shù)周期。在調(diào)度表中,每個(gè)任務(wù)的執(zhí)行時(shí)間和間隔時(shí)間是預(yù)先定義的。Task A的間隔時(shí)間是指Task A完成一次執(zhí)行后需要等待的時(shí)間,在實(shí)際的調(diào)度系統(tǒng)中,任務(wù)的間隔時(shí)間可能會(huì)受到多種因素的影響,例如任務(wù)的優(yōu)先級(jí)、資源的競爭等。在設(shè)計(jì)和實(shí)現(xiàn)調(diào)度系統(tǒng)時(shí),需要根據(jù)具體的應(yīng)用場景和需求進(jìn)行合理的設(shè)計(jì)和實(shí)現(xiàn)。
同步計(jì)數(shù)器:同步計(jì)數(shù)器是一個(gè)軟件計(jì)數(shù)器,用于同步任務(wù)的執(zhí)行。顯示同步中同步計(jì)數(shù)器等于驅(qū)動(dòng)計(jì)數(shù)器,當(dāng)驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值等于同步計(jì)數(shù)器的計(jì)數(shù)值時(shí),任務(wù)調(diào)度器會(huì)檢查任務(wù)隊(duì)列中是否有需要執(zhí)行的任務(wù)。如果有,則執(zhí)行該任務(wù),否則繼續(xù)等待下一個(gè)同步計(jì)數(shù)器的計(jì)數(shù)周期。這樣,就可以實(shí)現(xiàn)任務(wù)的精確調(diào)度和同步,從而保證系統(tǒng)的穩(wěn)定性和可靠性。
操作系統(tǒng)計(jì)數(shù)器:操作系統(tǒng)計(jì)數(shù)器通常由操作系統(tǒng)內(nèi)核實(shí)現(xiàn),用于記錄系統(tǒng)運(yùn)行時(shí)間和控制系統(tǒng)中各個(gè)模塊和任務(wù)的執(zhí)行時(shí)間和間隔時(shí)間。每個(gè)OS Counter都有一個(gè)最大計(jì)數(shù)值(OsCounterMaxAllowedValue),它表示OS Counter的最大計(jì)數(shù)范圍。同時(shí),每個(gè)OS Counter還有一個(gè)最小計(jì)數(shù)值(OsCounterMinCycle),它表示OS Counter的最小計(jì)數(shù)周期。OS Counter的最大計(jì)數(shù)值和最小計(jì)數(shù)周期可以用來確定驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)和調(diào)度表的持續(xù)時(shí)間。具體來說,驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)應(yīng)該等于OS Counter的最大計(jì)數(shù)值+1,而調(diào)度表的持續(xù)時(shí)間應(yīng)該等于OS Counter的最大計(jì)數(shù)值+1乘以O(shè)S Counter的最小計(jì)數(shù)周期。
1.2調(diào)度表圖示
其實(shí)調(diào)度表就是一份計(jì)劃表,類似于工作計(jì)劃,例如下圖:
假如tick是1ms,那么上面的調(diào)度表就是50ms要做的事情,做什么事情呢?
4ms要激活TaskA和TaskB,并設(shè)置一些Event
12ms不激活task,但是要設(shè)置Enent
20ms需要激活TaskA和TaskE
32ms需要激活TaskA和TaskE,并設(shè)置Event
40ms需要激活TaskB和TaskF,并設(shè)置Event
offset就是每個(gè)時(shí)間節(jié)點(diǎn)都有一個(gè)相對(duì)于調(diào)度表起始點(diǎn)的偏移值
2. 為什么要用調(diào)度表
調(diào)度表,可以用OS Alarm、OS Counter來實(shí)現(xiàn),相當(dāng)于到時(shí)間了就去激活task、設(shè)置Event,那么為什么要搞一個(gè)調(diào)度表的概念呢?
因?yàn)橐?/strong>:使在OSEK OS中,可以利用一個(gè)OSEK計(jì)數(shù)器和一組附屬于該計(jì)數(shù)器的自啟動(dòng)報(bào)警器來實(shí)現(xiàn)靜態(tài)定義的任務(wù)激活機(jī)制。在簡單情況下,可以通過設(shè)置報(bào)警器一旦啟動(dòng)就不能更改來實(shí)現(xiàn)。然而,如果在運(yùn)行時(shí)對(duì)某個(gè)報(bào)警器進(jìn)行修改,就很難保證報(bào)警器之間的相對(duì)同步。為此,AUTOSAR OS規(guī)范引入了調(diào)度表(ScheduleTable,ST)。
在AUTOSAR中,調(diào)度表是用于描述任務(wù)的執(zhí)行順序和時(shí)間間隔的一種數(shù)據(jù)結(jié)構(gòu)。Alarm是一種定時(shí)器,用于在指定的時(shí)間點(diǎn)或時(shí)間間隔觸發(fā)事件。當(dāng)Alarm與調(diào)度表結(jié)合使用時(shí),調(diào)度表可以保障Alarm的同步。
3. 調(diào)度表是如何用的
3.1.操作系統(tǒng)允許并發(fā)處理多個(gè)調(diào)度表
一個(gè)調(diào)度表只能被一個(gè)計(jì)數(shù)器驅(qū)動(dòng),而一個(gè)計(jì)數(shù)器能驅(qū)動(dòng)多個(gè)調(diào)度表;
驅(qū)動(dòng)計(jì)數(shù)器的一個(gè)Tick與調(diào)度表的一個(gè)Tick的分辨率一致;操作系統(tǒng)使用一個(gè)迭代器遍歷調(diào)度表上的所有終結(jié)點(diǎn),按照offset的大小從初始終結(jié)點(diǎn)(InitialExpiryPoint)開始遍歷,直到最后一個(gè)終結(jié)點(diǎn)IFinaIExpiryPoint)為止。在處理終結(jié)點(diǎn)上的操作時(shí),操作系統(tǒng)必須先激活完所有的任務(wù)后,才能設(shè)置事件。由于在一個(gè)終結(jié)點(diǎn)上很有可能對(duì)一個(gè)任務(wù)同時(shí)進(jìn)行激活和設(shè)置事件的操作,如果先激活一個(gè)處于掛起態(tài)的任務(wù),再對(duì)它設(shè)置事件,操作會(huì)成功執(zhí)行,而如果順序相反則會(huì)導(dǎo)致操作失敗。因此,操作系統(tǒng)對(duì)終結(jié)點(diǎn)上操作的處理順序進(jìn)行了嚴(yán)格的限制。
3.2. 調(diào)度表根據(jù)具體需求可配置為單次執(zhí)行或重復(fù)執(zhí)行
單次執(zhí)行是調(diào)度表處理完最后一個(gè)終結(jié)點(diǎn)后進(jìn)入停止?fàn)顟B(tài),不再繼續(xù)執(zhí)行,主要用于對(duì)某個(gè)觸發(fā)進(jìn)行響應(yīng):循環(huán)執(zhí)行是調(diào)度表處理完最后一個(gè)終結(jié)點(diǎn)后再返回到第一個(gè)終結(jié)點(diǎn),繼續(xù)執(zhí)行,主要用于執(zhí)行重復(fù)操作的特定應(yīng)用。
重復(fù)執(zhí)行,由于調(diào)度表的持續(xù)時(shí)間不一定等于驅(qū)動(dòng)計(jì)數(shù)器的模數(shù),因此不能保證同一個(gè)終結(jié)點(diǎn)在不同次執(zhí)行時(shí)都在同一個(gè)絕對(duì)計(jì)數(shù)值上執(zhí)行,而在某些情況下這是必需的,例如校正發(fā)動(dòng)機(jī)的角旋轉(zhuǎn)度數(shù),故需要同步機(jī)制來解決。
一個(gè)未使用同步策略的調(diào)度表在任意時(shí)刻總是處于下述三個(gè)狀態(tài)中的一個(gè),詳細(xì)的狀態(tài)轉(zhuǎn)換模型如下圖所示。在任何時(shí)刻,都可以使用系統(tǒng)服務(wù)GetScheduleTableStatus0來獲取調(diào)度表的狀態(tài)。對(duì)于未使用同步策略的調(diào)度表來說,調(diào)度表的持續(xù)時(shí)間和驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)沒有潛在的關(guān)聯(lián),但各終結(jié)點(diǎn)的偏移和延遲需要按照公式3-1、3-2、3-3設(shè)置。
3.3. 調(diào)度表有兩種類型的啟動(dòng)方式
絕對(duì)啟動(dòng) StartScheduleTableAbs()和相對(duì)啟動(dòng)StartScheduleTableRel0。調(diào)度表在被啟動(dòng)后,將進(jìn)入運(yùn)行態(tài)。
絕對(duì)啟動(dòng)是提供一個(gè)啟動(dòng)值(Start),當(dāng)驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值與Start匹配時(shí),操作系統(tǒng)將啟動(dòng)調(diào)度表,該調(diào)度表的第一個(gè)終結(jié)點(diǎn)將在驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值等于(Start+Initial Offset)時(shí)被處理。
相對(duì)啟動(dòng)是提供一個(gè)偏移(Offset),當(dāng)驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值相對(duì)于現(xiàn)在(Now)增加了Offset個(gè)Tick后,操作系統(tǒng)將啟動(dòng)調(diào)度表,該調(diào)度表上的第一個(gè)終結(jié)點(diǎn)將在驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值與(Now +Offset+lnitial Offset)匹配時(shí)會(huì)被處理。
用戶能在任意時(shí)刻調(diào)用系統(tǒng)服務(wù)StopScheduleTable()立即終止一個(gè)正在處于運(yùn)行態(tài)的調(diào)度表,被終止后,調(diào)度表將進(jìn)入停止態(tài)。無論調(diào)度表被終止時(shí)處理到了哪個(gè)終結(jié)點(diǎn),下次啟動(dòng)時(shí)都將會(huì)從第一個(gè)終結(jié)點(diǎn)開始處理。此外,調(diào)度表在正常運(yùn)行結(jié)束后,也會(huì)進(jìn)入停止態(tài)。
當(dāng)用戶調(diào)用NextScheduleTable0發(fā)出切換調(diào)度表的請(qǐng)求時(shí),操作系統(tǒng)將繼續(xù)處理當(dāng)前調(diào)度表,把被切換入的調(diào)度表的狀態(tài)修改為下一個(gè),直至處理完當(dāng)前調(diào)度表的最后一個(gè)終結(jié)點(diǎn)后,才會(huì)去啟動(dòng)被切換入的調(diào)度表。
4. 調(diào)度表的同步
處理調(diào)度表上的初始終結(jié)點(diǎn)的絕對(duì)時(shí)間是用戶可控的。然后,如果調(diào)度表的運(yùn)行模式是重復(fù)執(zhí)行,將不能保證每次執(zhí)行初始終結(jié)點(diǎn)的時(shí)間是一樣的。
該問題的產(chǎn)生,可能是由于調(diào)度表的持續(xù)時(shí)間不一定等于驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)導(dǎo)致的。
舉例:注:驅(qū)動(dòng)計(jì)數(shù)器通常是用于驅(qū)動(dòng)整個(gè)調(diào)度表的計(jì)數(shù)器。它的作用是根據(jù)預(yù)定的時(shí)間間隔來觸發(fā)調(diào)度表中各個(gè)任務(wù)的執(zhí)行,從而實(shí)現(xiàn)任務(wù)的協(xié)調(diào)和調(diào)度。
假設(shè)調(diào)度表中有三個(gè)任務(wù),任務(wù)A、任務(wù)B和任務(wù)C,它們的執(zhí)行時(shí)間分別為2秒、3秒和4秒,也就是如果想要完整的執(zhí)行三個(gè)任務(wù)需要9秒的時(shí)間。然而驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)為5秒,即當(dāng)計(jì)數(shù)器達(dá)到5秒時(shí)會(huì)重新從0開始計(jì)數(shù)。也就是說任務(wù)C一直處于不執(zhí)行的狀態(tài)。
5. AUTOSAR 操作系統(tǒng)規(guī)范提供了 2 種同步方式
隱式同步:
在隱式同步的情況下,調(diào)度表的更新和OS模塊的調(diào)度是隱式地同步的。即當(dāng)調(diào)度表中的任務(wù)時(shí)間到達(dá)時(shí),OS模塊不會(huì)立即調(diào)度該任務(wù),而是等待下一個(gè)系統(tǒng)節(jié)拍時(shí)再調(diào)度該任務(wù)。因此,在隱式同步的情況下,任務(wù)的執(zhí)行時(shí)間可能存在一定的誤差,并且無法保證任務(wù)的正確執(zhí)行順序和時(shí)間間隔。
對(duì)于隱式同步而言,調(diào)度表的驅(qū)動(dòng)計(jì)數(shù)器就是同步計(jì)數(shù)器,即調(diào)度表上的時(shí)間和驅(qū)動(dòng)計(jì)數(shù)器上的時(shí)間保持一致。
隱式同步的調(diào)度表不需要操作系統(tǒng)的額外支持,但為了使調(diào)度表上的時(shí)間和驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值一致,做了一些限制:調(diào)度表的持續(xù)時(shí)間必須等于驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)。如公式3-4所示:
也就是隱式同步的操作系統(tǒng)模塊的調(diào)度表(ScheduleTable)(每個(gè)調(diào)度表都有一個(gè)持續(xù)時(shí)間(Duration))應(yīng)具有等于其關(guān)聯(lián) OSEK OS 計(jì)數(shù)器的 OsCounterMaxAllowedValue + 1 的持續(xù)時(shí)間。
注意:驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)被定義為OsCounterMaxAllowedValue + 1。其中,OsCounterMaxAllowedValue是一個(gè)常數(shù),表示驅(qū)動(dòng)計(jì)數(shù)器的最大計(jì)數(shù)值。而+1是因?yàn)橛?jì)數(shù)器從0開始計(jì)數(shù),因此最大計(jì)數(shù)值需要加上1才能得到模數(shù)。
為了使調(diào)度表達(dá)到同步,操作系統(tǒng)需要在一個(gè)己知的計(jì)數(shù)值啟動(dòng)調(diào)度表,這意味著調(diào)度表使用隱式同步策略時(shí),只能使用絕對(duì)啟動(dòng),不能使用相對(duì)啟動(dòng)。在調(diào)度表被絕對(duì)啟動(dòng)后,若終結(jié)點(diǎn)的偏移與驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值匹配時(shí),該終結(jié)點(diǎn)將會(huì)被處理。為了保證調(diào)度表和驅(qū)動(dòng)計(jì)數(shù)器同步,通常的做法是在驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值為0時(shí)啟動(dòng)調(diào)度表,即使用StartScheduleTableAbs(Tbl,0),如圖所示:StartScheduleTableAbs(Tbl,0)是一個(gè)API函數(shù),用絕對(duì)啟動(dòng)啟動(dòng)一個(gè)調(diào)度表,并將其絕對(duì)時(shí)間點(diǎn)設(shè)置為0。它的作用是將調(diào)度表的執(zhí)行時(shí)間點(diǎn)設(shè)置為系統(tǒng)啟動(dòng)的時(shí)間點(diǎn),從而讓調(diào)度表從頭開始執(zhí)行。
其實(shí)說白了隱式同步就是在running和SYNC開始的節(jié)點(diǎn),用絕對(duì)啟動(dòng)StartScheduleTableAbs(Tbl,0)使調(diào)度表 OS Counter的計(jì)數(shù)周期應(yīng)該等于任務(wù)調(diào)度表的持續(xù)時(shí)間。讓兩者運(yùn)行一致。從而實(shí)現(xiàn)調(diào)度表的周期性執(zhí)行。
顯示同步:
在顯示同步的情況下,調(diào)度表的更新和OS模塊的調(diào)度是顯式地同步的。即當(dāng)調(diào)度表中的任務(wù)時(shí)間到達(dá)時(shí),OS模塊會(huì)立即調(diào)度該任務(wù),并執(zhí)行該任務(wù)的任務(wù)函數(shù)。因此,在顯示同步的情況下,任務(wù)的執(zhí)行時(shí)間是準(zhǔn)確的,并且可以保證任務(wù)的正確執(zhí)行順序和時(shí)間間隔。
顯式同步是指調(diào)度表的驅(qū)動(dòng)計(jì)數(shù)器和同步計(jì)數(shù)器不是同一個(gè)計(jì)數(shù)器,但是這 2 個(gè)計(jì)數(shù)器 tick 的周期是一樣的。
顯式同步的調(diào)度表(ScheduleTable)需要操作系統(tǒng)模塊的額外支持。調(diào)度表(ScheduleTable)正常情況下,由操作系統(tǒng)模塊的計(jì)數(shù)器驅(qū)動(dòng),被稱為驅(qū)動(dòng)計(jì)數(shù)器(drive Counter)。但處理過程需要與不屬于操作系統(tǒng)模塊的計(jì)數(shù)器對(duì)象的另一種計(jì)數(shù)器進(jìn)行同步,此類進(jìn)行同步的計(jì)數(shù)器被稱為同步計(jì)數(shù)器(synchronization Counter)。
在調(diào)度表(ScheduleTable)、操作系統(tǒng)模塊的計(jì)數(shù)器和同步計(jì)數(shù)器之間必須強(qiáng)制執(zhí)行以下約束:
約束1:顯式同步的調(diào)度表(ScheduleTable)的持續(xù)時(shí)間不應(yīng)大于驅(qū)動(dòng)計(jì)數(shù)器(drive Counter)的模數(shù)。
約束2:顯式同步的調(diào)度表(ScheduleTable)的持續(xù)時(shí)間應(yīng)等于同步計(jì)數(shù)器(synchronization Counter)的模數(shù)。
約束3:同步計(jì)數(shù)器(synchronization Counter)應(yīng)與調(diào)度表(ScheduleTable)相關(guān)聯(lián)的驅(qū)動(dòng)計(jì)數(shù)器drive Counter)具有相同的分辨率。這意味著調(diào)度表(ScheduleTable)上的滴答與同步計(jì)數(shù)器(synchronization Counter)上的滴答具有相同的持續(xù)時(shí)間。
如上圖所示:初始時(shí)調(diào)度表處于狀態(tài) STOPPED,調(diào)用函數(shù) StartScheduleTableSync()后,進(jìn)入狀態(tài) WAITING。WAITING 狀態(tài)一直持續(xù)到用戶調(diào)用 SyncScheduleTable(),
對(duì)每一個(gè)調(diào)度表初次調(diào)用 SyncScheduleTable()之后,調(diào)度表進(jìn)入 RUNNING_AND_SYNCHRONOUS 狀態(tài)。如果用戶對(duì)一個(gè)周期調(diào)度表沒有再次調(diào)用 SyncScheduleTable(),那么調(diào)度表將一直處在 RUNNING_AND_SYNCHRONOUS 狀態(tài),但是當(dāng)用戶由于某種原因再次調(diào)用 SyncScheduleTable()后,系統(tǒng)會(huì)進(jìn)行調(diào)度表與同步計(jì)數(shù)器之間的偏移值計(jì)算。如果計(jì)算出的偏移值大于調(diào)度表偏移的容忍度,那么調(diào)度表就會(huì)進(jìn)入 RUNNING 狀態(tài),并且系統(tǒng)會(huì)進(jìn)行調(diào)度表同步,直到調(diào)度表的偏移值小于等于調(diào)度表的偏移容忍度之后停止同步,調(diào)度表再次進(jìn)入 RUNNING_ AND_SYNCHRONOUS 狀態(tài)。
-
封裝
+關(guān)注
關(guān)注
126文章
7905瀏覽量
142971 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2256瀏覽量
94584 -
AUTOSAR
+關(guān)注
關(guān)注
10文章
362瀏覽量
21591 -
調(diào)度機(jī)制
+關(guān)注
關(guān)注
0文章
4瀏覽量
6786
原文標(biāo)題:AUTOSAR-OS的調(diào)度機(jī)制-調(diào)度表
文章出處:【微信號(hào):汽車電子嵌入式,微信公眾號(hào):汽車電子嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論