小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Autosar通信棧:基礎(chǔ)問(wèn)題知多少

 開心果NeedCar 2023-06-21 發(fā)布于上海
積土而為山,積水而為海?!髯?/section>

QA1:CAN報(bào)文發(fā)送,有優(yōu)先級(jí)嗎?

:有。以英飛凌tc3xx系列為例,MCMCAN模塊有多個(gè)硬件發(fā)送緩沖區(qū),也就是說(shuō)同一時(shí)刻可以緩存多個(gè)待發(fā)送的報(bào)文,這些報(bào)文放入待發(fā)送的緩沖區(qū)以后,會(huì)置位發(fā)送Pending標(biāo)志,等待發(fā)送,誰(shuí)先發(fā)送呢?在回答這個(gè)問(wèn)題之前,我們先說(shuō)待發(fā)送的報(bào)文在硬件緩存區(qū)中的存儲(chǔ)方式:Dedicated Tx Buffers 、Tx FIFO、 Tx Queue。

對(duì)于Dedicated Tx Buffers與 Tx Queue兩種存儲(chǔ)方式,根據(jù)lowest Message ID原則發(fā)送,即:發(fā)送的CanID數(shù)值越小,優(yōu)先級(jí)越高。具體發(fā)送順序示例如下:

對(duì)于Tx FIFO存儲(chǔ)方式,報(bào)文的發(fā)送順序由進(jìn)入FIFO緩存區(qū)的先后順序決定,即:先進(jìn)先出,具體發(fā)送順序如下:

如果使用Dedicated Tx Buffers與 Tx Queue兩種存儲(chǔ)方式,優(yōu)先級(jí)低的報(bào)文(比如:網(wǎng)絡(luò)管理報(bào)文、診斷報(bào)文、標(biāo)定報(bào)文等,優(yōu)先級(jí)比應(yīng)用報(bào)文低),是不是永遠(yuǎn)得不到發(fā)送了?不是,我們要清楚:發(fā)送的硬件緩存區(qū)不止一個(gè),而是多個(gè)(比如:tc397有32個(gè)發(fā)送緩沖區(qū)),足以在某一時(shí)刻緩存多個(gè)待發(fā)送的報(bào)文。是否存在某一時(shí)刻(如下t1),發(fā)送報(bào)文的個(gè)數(shù)超過(guò)硬件緩存區(qū)個(gè)數(shù)?這種可能性是存在的,這也是為什么會(huì)有發(fā)送報(bào)文丟幀的原因。

為了避免發(fā)送丟幀或者周期性報(bào)文抖動(dòng)問(wèn)題,我們可以將相同周期性報(bào)文的發(fā)送做一個(gè)Offset處理,避免周期性相同的報(bào)文以同一個(gè)基準(zhǔn)時(shí)間計(jì)時(shí)。比如:通信啟動(dòng)后,周期性報(bào)文Msg01(周期10ms)在t0時(shí)刻開始周期性發(fā)送;而周期性報(bào)文Msg02(周期10ms)在t1時(shí)刻開始周期性發(fā)送,這樣即可避免兩者在某一時(shí)刻的發(fā)送重疊,如下所示:

QA2:Tx FIFO發(fā)送方式可能引發(fā)的問(wèn)題有什么?

答:對(duì)于CAN報(bào)文,使用FIFO方式發(fā)送,我能想到的場(chǎng)景:診斷中,發(fā)送診斷指令使用FIFO緩存,保證診斷指令請(qǐng)求的順序。不知道大家在何種情況下使用過(guò)Tx FIFO,還請(qǐng)大家給普及。

這里思考到了一種工況,可能會(huì)因使用FIFO發(fā)送方式,導(dǎo)致報(bào)文的發(fā)送延遲,具體如下所示:

假設(shè):CAN BUS上有兩個(gè)節(jié)點(diǎn):ECU1::CAN1和ECU2::CAN1,ECU1::CAN1使用Tx FIFO緩存待發(fā)送數(shù)據(jù),ECU2::CAN1使用Dedicated Tx Buffers方式緩存待發(fā)送數(shù)據(jù)。在某一時(shí)刻,ECU1::CAN1的Buffer Index0待發(fā)送報(bào)文的CAN ID = 0x30,ECU2::CAN1待發(fā)送的6個(gè)報(bào)文的CAN ID <0x30,所以,每次總線仲裁,都會(huì)優(yōu)先發(fā)送ECU2::CAN1緩存的報(bào)文,而ECU1::CAN1因?yàn)榭偩€仲裁失敗,導(dǎo)致ECU1::CAN1 FIFO中的高優(yōu)先級(jí)報(bào)文無(wú)法及時(shí)發(fā)送出去,如下所示:

所以,在使用Tx FIFO方式時(shí),需要注意此工況。

QA3:程序應(yīng)先處理發(fā)送報(bào)文還是應(yīng)該先處理接收?qǐng)?bào)文?

:TBD。為什么是未定義呢?在實(shí)際的項(xiàng)目開發(fā)中,先處理Rx報(bào)文還是先處理Tx報(bào)文確實(shí)沒有明確規(guī)定,在項(xiàng)目不出問(wèn)題之前,沒有人會(huì)留意兩者的處理順序。這里我們討論一下先處理Rx Msg,再處理Tx Msg的情況,實(shí)質(zhì)就是討論Task中,Com_MainFunctionRx()/Com_MainFunctionTx()的處理順序。
假設(shè):Com_MainFunctionRx()/Com_MainFunctionTx()均在5ms的Task中,且先處理Com_MainFunctionRx(),再處理Com_MainFunctionTx(),如果此節(jié)點(diǎn)收/發(fā)的報(bào)文數(shù)量不多,任務(wù)在規(guī)定的時(shí)間內(nèi)處理完(t1時(shí)刻之前),不會(huì)引發(fā)問(wèn)題,如下所示:

如果當(dāng)前節(jié)點(diǎn)接收的報(bào)文數(shù)量較多,Com_MainFunctionRx()消耗了任務(wù)處理的大部分時(shí)間,導(dǎo)致Com_MainFunctionTx()處理被Delay,可能會(huì)導(dǎo)致本節(jié)點(diǎn)發(fā)送報(bào)文的周期抖動(dòng)問(wèn)題,比如:本來(lái)10ms的Tx Msg,由于延遲導(dǎo)致Tx Msg>10ms + 容差值,假設(shè)容差值±10%(1ms),比如:實(shí)際Tx Msg周期13ms,導(dǎo)致通信出問(wèn)題。

對(duì)于一個(gè)節(jié)點(diǎn),接收?qǐng)?bào)文數(shù)量存在不確定性,比如:接收的報(bào)文類型如果有事件性應(yīng)用報(bào)文、高周期應(yīng)用報(bào)文(如:1ms周期性應(yīng)用報(bào)文)等。那么Com_MainFunctionRx()的處理時(shí)間就會(huì)存在一定的不確定性。相對(duì)于接收?qǐng)?bào)文,節(jié)點(diǎn)發(fā)送報(bào)文的數(shù)量相對(duì)比較確定,發(fā)送所消耗的時(shí)間也比較確定,所以,從處理順序上來(lái)說(shuō),先處理確定的發(fā)送再處理不確定的發(fā)送比較合理,這樣可以確保發(fā)送報(bào)文的時(shí)間。而對(duì)于接收,即使超一點(diǎn)時(shí)間,如果Task沒有超過(guò)Deadline Time,對(duì)程序的運(yùn)行也不會(huì)造成太大影響。

再者,對(duì)于CAN報(bào)文,發(fā)送報(bào)文還需要進(jìn)行總線仲裁,仲裁失敗也會(huì)存在一定的延時(shí)(參考QA2)。

注意:上述假設(shè)OS所使用的基準(zhǔn)計(jì)數(shù)器是可信的,即:基礎(chǔ)計(jì)數(shù)器準(zhǔn)確,一般由GPT或者STM驅(qū)動(dòng)。

QA4:周期型報(bào)文Offset的作用是啥?

答:降低同一時(shí)刻,多個(gè)發(fā)送報(bào)文的Burst Send問(wèn)題。這個(gè)問(wèn)題屬于QA1的延申。

一個(gè)節(jié)點(diǎn),發(fā)送的報(bào)文類型可以有多種(QA1提到)。其中,節(jié)點(diǎn)外發(fā)的應(yīng)用報(bào)文從幾個(gè)到幾十個(gè)不等。應(yīng)用報(bào)文又分為事件型、周期型、混合型。以周期型應(yīng)用報(bào)文為例,可能有5ms、10ms、20ms、50ms等周期。如果本節(jié)點(diǎn)外發(fā)的報(bào)文數(shù)量較大,在某一時(shí)刻會(huì)存在大量并發(fā)請(qǐng)求。比如:MsgA Cycle =5ms,MsgB Cycle = 10ms,MsgC Cycle = 10ms,如果MsgA的發(fā)送時(shí)刻為5ms、10ms、15ms、20ms、25ms、30ms.....MsgB、MsgC的發(fā)送時(shí)刻為10ms、20ms、30ms.....,在time = 10ms、time = 30ms......等時(shí)刻,MsgA 、MsgB、MsgC會(huì)同時(shí)請(qǐng)求發(fā)送,節(jié)點(diǎn)要發(fā)送的報(bào)文數(shù)量越多,某一時(shí)刻(如下圖time = 10ms 時(shí)刻),請(qǐng)求發(fā)送的報(bào)文數(shù)量可能就越多。

在某一時(shí)刻,發(fā)送報(bào)文數(shù)量過(guò)多會(huì)帶來(lái)什么問(wèn)題呢?這就是QA3中的問(wèn)題,會(huì)使得某個(gè)發(fā)送報(bào)文發(fā)送延遲,使得其發(fā)送周期出現(xiàn)抖動(dòng),即:超過(guò)該周期報(bào)文的允許誤差值,一般來(lái)說(shuō),≤100ms的周期性應(yīng)用報(bào)文允許的偏差為3%,>100ms的周期性應(yīng)用報(bào)文允許的偏差為1%(看OEM要求)。既然應(yīng)用報(bào)文會(huì)Burst Send,如何降低這種并發(fā)請(qǐng)求行為呢?偏移相同周期報(bào)文的發(fā)送時(shí)機(jī),比如:MsgB Offset 5 ms,MsgC Offset 10ms,這樣兩者的發(fā)送就不會(huì)重疊,如下所示:

那偏移不同周期的應(yīng)用報(bào)文有用嗎?因?yàn)橹芷谛詧?bào)文發(fā)送取決于Com_MainFunctionTx()所在任務(wù)周期,Offset Value = n * Cycle(n為非負(fù)整數(shù),Cycle指Com_MainFunctionTx()的任務(wù)周期),所以,Offset Value是Com_MainFunctionTx()任務(wù)周期的整數(shù)倍。這樣,即使設(shè)置MsgA、MsgB的Offset Value不同,也不能避免某一時(shí)刻(如:time = 10ms時(shí)刻),兩者的并發(fā)請(qǐng)求,如下所示:

參考資料

SIMPLE TITLE

Infineon-AURIX_TC3xx_Part2-UserManual-v01_00-EN.pdf

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章