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

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

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

3天內不再提示

CAN報文發(fā)送有優(yōu)先級嗎?

冬至子 ? 來源:開心果 Need Car ? 作者:開心果 Need Car ? 2022-11-15 14:34 ? 次閱讀

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

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

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

圖片

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

圖片

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

圖片

為了避免發(fā)送丟幀或者周期性報文抖動問題,我們可以將相同周期性報文的發(fā)送做一個Offset處理, 避免周期性相同的報文以同一個基準時間計時

比如:通信啟動后,周期性報文Msg01(周期10ms)在t0時刻開始周期性發(fā)送;而周期性報文Msg02(周期10ms)在t1時刻開始周期性發(fā)送,這樣即可避免兩者在某一時刻的發(fā)送重疊,如下所示:

圖片

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

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

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

假設:CAN BUS上有兩個節(jié)點:ECU1::CAN1和ECU2::CAN1,ECU1::CAN1使用Tx FIFO緩存待發(fā)送數(shù)據(jù),ECU2::CAN1使用Dedicated Tx Buffers方式緩存待發(fā)送數(shù)據(jù)。

在某一時刻,ECU1::CAN1的Buffer Index0待發(fā)送報文的CAN ID = 0x30,ECU2::CAN1待發(fā)送的6個報文的CAN ID <0x30,所以,每次總線仲裁,都會優(yōu)先發(fā)送ECU2::CAN1緩存的報文,而ECU1::CAN1因為總線仲裁失敗,導致ECU1::CAN1 FIFO中的高優(yōu)先級報文無法及時發(fā)送出去,如下所示:

圖片

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

QA3:程序應先處理發(fā)送報文還是應該先處理接收報文?

:TBD。為什么是未定義呢?在實際的項目開發(fā)中,先處理Rx報文還是先處理Tx報文確實沒有明確規(guī)定,在項目不出問題之前,沒有人會留意兩者的處理順序。

這里我們討論一下先處理Rx Msg,再處理Tx Msg的情況,實質就是討論Task中,Com_MainFunctionRx()/Com_MainFunctionTx()的處理順序。

假設:Com_MainFunctionRx()/Com_MainFunctionTx()均在5ms的Task中,且先處理Com_MainFunctionRx(),再處理Com_MainFunctionTx(),如果此節(jié)點收/發(fā)的報文數(shù)量不多,任務在規(guī)定的時間內處理完(t1時刻之前),不會引發(fā)問題,如下所示:

圖片

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

圖片

對于一個節(jié)點,接收報文數(shù)量存在不確定性,比如:接收的報文類型如果有事件性應用報文、高周期應用報文(如:1ms周期性應用報文)等。

那么Com_MainFunctionRx()的處理時間就會存在一定的不確定性。相對于接收報文,節(jié)點發(fā)送報文的數(shù)量相對比較確定,發(fā)送所消耗的時間也比較確定,所以,從處理順序上來說, 先處理確定的發(fā)送再處理不確定的發(fā)送比較合理 ,這樣可以確保發(fā)送報文的時間。

而對于接收,即使超一點時間,如果Task沒有超過Deadline Time,對程序的運行也不會造成太大影響。

再者,對于CAN報文,發(fā)送報文還需要進行總線仲裁,仲裁失敗也會存在一定的延時(參考QA2)。

注意 :上述假設OS所使用的基準計數(shù)器是可信的,即:基礎計數(shù)器準確,一般由GPT或者STM驅動。

QA4:周期型報文Offset的作用是啥?

答: 降低同一時刻,多個發(fā)送報文的Burst Send問題。這個問題屬于QA1的延申。

一個節(jié)點,發(fā)送的報文類型可以有多種(QA1提到)。其中,節(jié)點外發(fā)的應用報文從幾個到幾十個不等。應用報文又分為事件型、周期型、混合型。以周期型應用報文為例,可能有5ms、10ms、20ms、50ms等周期。

如果本節(jié)點外發(fā)的報文數(shù)量較大,在某一時刻會存在大量并發(fā)請求。比如:MsgA Cycle =5ms,MsgB Cycle = 10ms,MsgC Cycle = 10ms,如果MsgA的發(fā)送時刻為5ms、10ms、15ms、20ms、25ms、30ms.....MsgB、MsgC的發(fā)送時刻為10ms、20ms、30ms.....,在time=10ms、time=30ms......等時刻,MsgA 、MsgB、MsgC會同時請求發(fā)送,節(jié)點要發(fā)送的報文數(shù)量越多,某一時刻(如下圖time = 10ms 時刻),請求發(fā)送的報文數(shù)量可能就越多。

圖片

在某一時刻,發(fā)送報文數(shù)量過多會帶來什么問題呢?這就是QA3中的問題,會使得某個發(fā)送報文發(fā)送延遲,使得其發(fā)送周期出現(xiàn)抖動,即:超過該周期報文的允許誤差值,一般來說,≤100ms的周期性應用報文允許的偏差為3%,>100ms的周期性應用報文允許的偏差為1%(看OEM要求)。

既然應用報文會Burst Send,如何降低這種并發(fā)請求行為呢? 偏移相同周期報文的發(fā)送時機 ,比如:MsgBOffset 5 ms,MsgC Offset 10ms,這樣兩者的發(fā)送就不會重疊,如下所示:

圖片

那偏移不同周期的應用報文有用嗎?因為周期性報文發(fā)送取決于Com_MainFunctionTx()所在任務周期,Offset Value = n * Cycle(n為非負整數(shù),Cycle指Com_MainFunctionTx()的任務周期),所以,Offset Value是Com_MainFunctionTx()任務周期的整數(shù)倍。

這樣,即使設置MsgA、MsgB的Offset Value不同,也不能避免某一時刻(如:time = 10ms時刻),兩者的并發(fā)請求,如下所示:

圖片

審核編輯:劉清

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

    關注

    57

    文章

    2762

    瀏覽量

    464014
  • fifo
    +關注

    關注

    3

    文章

    389

    瀏覽量

    43772
  • STM
    STM
    +關注

    關注

    1

    文章

    556

    瀏覽量

    42533
收藏 人收藏

    評論

    相關推薦

    RTOS應用中的優(yōu)先級反轉問題

    在嵌入式系統(tǒng)中,如果使用基于優(yōu)先級調度算法的RTOS,系統(tǒng)中可能發(fā)生優(yōu)先級反轉現(xiàn)象。優(yōu)先級反轉用來描述系統(tǒng)中高優(yōu)先級任務由于等待低優(yōu)先級任務
    發(fā)表于 12-14 11:00 ?1241次閱讀

    使用CY8C4147AZI-S475的CAN通信功能,CAN驅動會如何處理?

    現(xiàn)在使用CY8C4147AZI-S475的CAN通信功能,如果CAN發(fā)出了一個低優(yōu)先級報文出去,但是沒發(fā)送成功或者出現(xiàn)錯誤需要重發(fā),此時也
    發(fā)表于 02-21 07:37

    can協(xié)議 發(fā)送自動重傳的問題

    報文。現(xiàn)在問題來了,如果發(fā)送郵箱有空郵箱,也就是可以發(fā)送第2幀數(shù)據(jù),那么在自動重傳中的第一幀數(shù)據(jù),和后來過來的第2幀數(shù)據(jù)哪個先發(fā)送呢??(因為是同一個
    發(fā)表于 01-02 10:23

    cortex M搶占優(yōu)先級和子優(yōu)先級什么用

    Cortex M內核中每個中斷都有一個8位的優(yōu)先級設置寄存器這個8位的寄存器可以分為搶占優(yōu)先級和子優(yōu)先級兩個部分(通過設置優(yōu)先級組設置)搶占優(yōu)先級
    發(fā)表于 01-25 06:07

    nano版本開啟tshell的情況下線程優(yōu)先級低于tshell線程優(yōu)先級的無法運行怎么解決?

    nano版本在開發(fā)的時候將心跳報文線程的優(yōu)先級設置得比 tshell 的優(yōu)先級還低發(fā)現(xiàn)心跳報文線程沒有運行,仿真發(fā)現(xiàn)不但沒有進入心跳報文線程
    發(fā)表于 02-22 13:56

    CANOpen系列教程05_ CAN總線同步與位填充、優(yōu)先級的決定

    CANOpen系列教程05_CAN總線同步與位填充、優(yōu)先級的決定
    的頭像 發(fā)表于 03-06 16:13 ?5893次閱讀

    cortex M內核優(yōu)先級設置

    Cortex M內核中每個中斷都有一個8位的優(yōu)先級設置寄存器這個8位的寄存器可以分為搶占優(yōu)先級和子優(yōu)先級兩個部分(通過設置優(yōu)先級組設置)搶占優(yōu)先級
    發(fā)表于 12-01 11:51 ?4次下載
    cortex M內核<b class='flag-5'>優(yōu)先級</b>設置

    2.FreeRTOS中斷優(yōu)先級和任務優(yōu)先級

    FreeRTOS中斷優(yōu)先級和任務優(yōu)先級架構:Cortex-M3版本:FreeRTOS V9.0.0前言:最開始,我并沒有搞清楚什么是中斷優(yōu)先級和任務優(yōu)先級,但看了部分資料后發(fā)現(xiàn)這兩個并
    發(fā)表于 12-04 20:21 ?9次下載
    2.FreeRTOS中斷<b class='flag-5'>優(yōu)先級</b>和任務<b class='flag-5'>優(yōu)先級</b>

    STM32F103芯片中斷優(yōu)先級以及FreeRTOS優(yōu)先級設置

    STM32F103只用了4個位來表達優(yōu)先級,因此最多支持16的可編程優(yōu)先級(0~15),15為最低優(yōu)先級
    發(fā)表于 01-25 18:59 ?1次下載
    STM32F103芯片中斷<b class='flag-5'>優(yōu)先級</b>以及FreeRTOS<b class='flag-5'>優(yōu)先級</b>設置

    uC/OS-II學習筆記——優(yōu)先級反轉與優(yōu)先級繼承機制

    優(yōu)先級反轉,是指某同步資源被較低優(yōu)先級的進程/線程所擁有,較高優(yōu)先級的進程/線程競爭該同步資源未獲得該資源,而使得較高優(yōu)先級進程/線程反而推遲被調度執(zhí)行的現(xiàn)象。
    發(fā)表于 02-09 10:33 ?2次下載
    uC/OS-II學習筆記——<b class='flag-5'>優(yōu)先級</b>反轉與<b class='flag-5'>優(yōu)先級</b>繼承機制

    中斷優(yōu)先級處理的原則及配置 搶占優(yōu)先級和響應優(yōu)先級的區(qū)別

    首先我們需要知道什么是中斷優(yōu)先級:中斷優(yōu)先級是CPU響應中斷的先后順序
    的頭像 發(fā)表于 05-18 15:10 ?2.8w次閱讀
    中斷<b class='flag-5'>優(yōu)先級</b>處理的原則及配置 搶占<b class='flag-5'>優(yōu)先級</b>和響應<b class='flag-5'>優(yōu)先級</b>的區(qū)別

    FreeRTOS任務的優(yōu)先級示例

    任務的優(yōu)先級:0~24之間。數(shù)字越大,任務優(yōu)先等級越高。高優(yōu)先級的任務優(yōu)先執(zhí)行。
    的頭像 發(fā)表于 09-15 11:13 ?2835次閱讀

    Free RTOS的優(yōu)先級翻轉

    優(yōu)先級翻轉簡介:就是高優(yōu)先級的任務運行起來的效果好像成了低優(yōu)先級,而低優(yōu)先級比高優(yōu)先級先運行;
    的頭像 發(fā)表于 02-10 15:31 ?1358次閱讀
    Free RTOS的<b class='flag-5'>優(yōu)先級</b>翻轉

    什么是優(yōu)先級反轉

    假設現(xiàn)在有三個任務TaskA(優(yōu)先級高)、TaskB(優(yōu)先級中)、TaskC(優(yōu)先級低),一個信號量(Semaphore),此信號量用于任務之間爭奪某個資源。在某一時刻,高優(yōu)先級的Ta
    的頭像 發(fā)表于 04-24 13:01 ?2322次閱讀
    什么是<b class='flag-5'>優(yōu)先級</b>反轉

    CAN報文為什么會發(fā)送失敗?

    CAN總線調試過程中出現(xiàn)報文發(fā)送失敗。很多工程師都對此只知其一不知其二,今天我們就以CAN報文發(fā)送
    的頭像 發(fā)表于 04-12 08:25 ?2232次閱讀
    <b class='flag-5'>CAN</b><b class='flag-5'>報文</b>為什么會<b class='flag-5'>發(fā)送</b>失敗?
    主站蜘蛛池模板: 国产玖玖| 一级不卡毛片| 日韩午夜大片| 成年女人毛片免费观看97| 毛色毛片| 亚洲国产欧美精品一区二区三区| 国产2021成人精品| 在线三级播放| 四虎影院观看| 美女视频毛片| www.夜色| 国产亚洲综合色就色| 国产欧美色图| 亚洲理论在线| 成人a毛片免费全部播放| 二级黄色大片| 午夜免费片| 国产中文99视频在线观看| 国产理论片在线观看| 日日操夜夜骑| 高清影院在线欧美人色| 欧美a级网站| 久久在线播放| 四虎影院视频在线观看| 两性色午夜视频免费国产| 欧美日韩一区二区三区视视频| 黄色字幕网| 午夜大片男女免费观看爽爽爽尤物| xxxxxx日本人免费| 深夜国产成人福利在线观看女同| 爱夜夜性夜夜夜夜夜夜爽| 成人午夜小视频手机在线看| h在线视频| 亚洲黄色小视频| 女人大毛片一级毛片一| 第四色播日韩第一页| 免费一级毛片在级播放| 色五月情| h视频在线观看视频观看| 一个色中文字幕| 毛片大全在线|