一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于AUTOSAR的應(yīng)用層如何獲取準(zhǔn)確的時(shí)間戳呢

汽車(chē)ECU開(kāi)發(fā) ? 來(lái)源:ADAS與ECU之吾見(jiàn) ? 作者:奮斗的農(nóng)民工 ? 2022-09-21 14:42 ? 次閱讀

前言

首先,請(qǐng)問(wèn)大家?guī)讉€(gè)小小問(wèn)題,你清楚:

基于AUTOSAR的應(yīng)用層如何獲取準(zhǔn)確的時(shí)間戳嗎?

時(shí)間同步的具體過(guò)程包含哪些細(xì)節(jié)呢?

如何正確地獲取到全局時(shí)間戳呢?

今天,我們來(lái)一起探索并回答這些問(wèn)題。為了便于大家理解,以下是本文的主題大綱:

eb2ee662-396f-11ed-9e49-dac502259ad0.png

正文

時(shí)間同步軟件框架

正如前文《AUTOSAR基礎(chǔ)篇之CanTsyn》所述,CanTsyn模塊負(fù)責(zé)時(shí)間同步之間的協(xié)議處理,StbM模塊則用來(lái)負(fù)責(zé)抽象底層不同的時(shí)間同步協(xié)議,為上層提供統(tǒng)一的時(shí)間戳接口以及當(dāng)前的時(shí)間同步狀態(tài)的接口。

通過(guò)如下圖1所示的Tsync則用來(lái)代表基于不同總線通訊的時(shí)間同步協(xié)議,StbM則是時(shí)間同步協(xié)議層基礎(chǔ)上的抽象,OS作為T(mén)riggered Customer,SW-C則作為Active Customer,后文將解釋這兩者之間的區(qū)別。

ebe2bf48-396f-11ed-9e49-dac502259ad0.png

圖1 AUTOSAR時(shí)間同步協(xié)議軟件框架

在上圖中,我們可以看到存在5個(gè)不一樣的數(shù)據(jù)流,下面將一一解釋每個(gè)數(shù)據(jù)流的基本作用:

數(shù)據(jù)流1表示StbM主動(dòng)調(diào)用TriggerCustomer提供的函數(shù)接口來(lái)完成時(shí)間同步,當(dāng)前主要應(yīng)用場(chǎng)景為OS Schedule Table的同步;

數(shù)據(jù)流2表示Active Customer(SW-C)主動(dòng)調(diào)用StbM提供的標(biāo)準(zhǔn)接口來(lái)獲取當(dāng)前時(shí)間戳或者時(shí)間同步狀態(tài);

數(shù)據(jù)流3表示Active Customer(SW-C)主動(dòng)調(diào)用StbM提供的標(biāo)準(zhǔn)接口來(lái)更新StbM維護(hù)的時(shí)間基準(zhǔn);

數(shù)據(jù)流4表示StbM模塊通過(guò)Tsyn模塊提供的標(biāo)準(zhǔn)函數(shù)接口來(lái)更新StbM的時(shí)間基準(zhǔn);

數(shù)據(jù)流5表示StbM模塊主動(dòng)通過(guò)Tsyn模塊提供的標(biāo)準(zhǔn)函數(shù)接口來(lái)將當(dāng)前的時(shí)間同步信息發(fā)送到相應(yīng)的bus總線上。

在時(shí)間同步領(lǐng)域內(nèi)涉及到諸多專(zhuān)有名詞,因此為了便于大家理解后續(xù)的內(nèi)容,有必要在此跟大家解釋些重要的標(biāo)準(zhǔn)術(shù)語(yǔ),具體細(xì)節(jié)如下圖2所示:

ebffe0fa-396f-11ed-9e49-dac502259ad0.png

圖2 時(shí)間同步標(biāo)準(zhǔn)術(shù)語(yǔ)解釋

啟動(dòng)階段

在該階段StbM模塊將會(huì)提供完成必要的初始化來(lái)提供針對(duì)上層應(yīng)用的時(shí)間同步服務(wù)。

前置條件

StbM模塊通過(guò)調(diào)用函數(shù)接口StbM_Init來(lái)完成初始化工作,但是在此之前需務(wù)必完成基礎(chǔ)通訊模塊的初始化,如Canif模塊初始化,CanTsyn模塊初始化等。

初始化

通過(guò)調(diào)用上述函數(shù)完成初始化之后,將會(huì)完成如下基本動(dòng)作:

變量StbMSynchrinizedTimeBase將會(huì)被初始化為0;

timeBaseStatus將會(huì)將所有的bit初始化為0;

如果參數(shù)StbMStoreTimebaseNonVolatile等于STORAGE_AT_SHUTDOWN,那么就會(huì)從NVM中獲取數(shù)據(jù)(一般包含s跟ns部分),如果NVM獲取數(shù)據(jù)不成功,則都會(huì)賦值為0處理。

正常工作

Synchronized Time Base

每一次調(diào)用函數(shù)接口StbM_BusSetGlobalTime()時(shí)就會(huì)更新對(duì)應(yīng)的同步time base以及對(duì)應(yīng)的Time Base Status。

Time Master 同步狀態(tài)監(jiān)控

如下圖3所示,一個(gè)全局時(shí)間網(wǎng)絡(luò)至少一個(gè)Time Master跟一個(gè)Time Slave, Time Master將會(huì)將其時(shí)間信息傳遞至在同一Time Domain下的Time Slave。

ec2e2d34-396f-11ed-9e49-dac502259ad0.png

圖3 Time Master 同步狀態(tài)更新示意圖

由上圖可知,Time Master通過(guò)reference本地clock來(lái)更新本地全局時(shí)間,然后通過(guò)sync/FUP報(bào)文發(fā)送給到總線上。其中,如果Time Domain為0-15則為synchronized time base,而Time Domain 16-31則為Offset Time Base。

通過(guò)調(diào)用函數(shù)接口 StbM_GetCurrentTime() 來(lái)獲取當(dāng)前對(duì)應(yīng)Time Domain下的Time Base,對(duì)應(yīng)的timebasestatus以及user data;

通過(guò)調(diào)用函數(shù)接口StbM_GetCurrentTimeRaw() 來(lái)獲取當(dāng)前時(shí)間Time Base的ns部分;

通過(guò)調(diào)用函數(shù)接口StbM_GetCurrentTimeDiff() 來(lái)獲取輸入的時(shí)間戳與當(dāng)前時(shí)間戳的時(shí)間間隔,單位為ns;

通過(guò)調(diào)用函數(shù)接口StbM_BusSetGlobalTime()來(lái)更新當(dāng)前的Time Base以及設(shè)置對(duì)應(yīng)的timebaseStatus;

通過(guò)調(diào)用函數(shù)接口 StbM_SetGlobalTime()并且會(huì)就將GLOBAL_TIME_BASE bit位置1,同時(shí)清除其他bit 位;

Time Slave 同步狀態(tài)監(jiān)控

如下圖4所示體現(xiàn)了Time Slave的數(shù)據(jù)流交互關(guān)系,在下圖中我們可以看到Time Slave會(huì)接收來(lái)自同一Time Domin下的sync/fup 報(bào)文,同時(shí)加上本地計(jì)算出來(lái)的接收sync/fup報(bào)文的時(shí)間差最終用于更新當(dāng)前StbM的Time Base,該Time Base將最終被應(yīng)用到應(yīng)用層。

ec4ef06e-396f-11ed-9e49-dac502259ad0.png

圖4 Time Slave同步狀態(tài)更新圖

Time Slave在完成上述時(shí)間同步的過(guò)程中,需要注意幾點(diǎn):

每次更新調(diào)用函數(shù)StbM_BusSetGlobalTime時(shí),都會(huì)比較下當(dāng)前更新的時(shí)間戳與當(dāng)前內(nèi)部正在使用的時(shí)間戳的差值是否超過(guò)StbMSyncLossThreshold參數(shù)設(shè)定的值,如果該值為0,則會(huì)取消該部分的檢查,如果超過(guò)了設(shè)定的值, 那么將會(huì)將timeBaseStatus中的狀態(tài)位TIMELEAP 置1;

如果下一次更新,差值保證在范圍內(nèi),那么timeBaseStatus中的狀態(tài)位TIMELEAP將會(huì)被清0;

TIme Slave會(huì)實(shí)時(shí)確認(rèn)下當(dāng)前的時(shí)間戳與最近一次調(diào)用該函數(shù)的時(shí)間差距是否在參數(shù)StbMSyncLossTimeout設(shè)定的范圍內(nèi),如果Timeout發(fā)生,那么需置timeBaseStatus中的TIMEOUT bit位,一旦調(diào)用StbM_BusSetGlobalTime函數(shù)將會(huì)清除該TIMEOUT bit位。

如果從來(lái)沒(méi)有發(fā)生過(guò)時(shí)間同步, 那么TIMEOUT位將不會(huì)置位,只要發(fā)生過(guò)一次成功的時(shí)間同步,后續(xù)同步?jīng)]有按照預(yù)期發(fā)送,那么就會(huì)啟動(dòng)這個(gè)Timeout檢查。

如果參數(shù)syncToTimeBase設(shè)定為sync to GTM,那么調(diào)用StbM_BusSetGlobalTime() 將會(huì)清除timeBaseStatus中的SYNC_TO_GATEWAY bit位;

如果參數(shù)syncToTimeBase設(shè)定為sync to subdomain,那么調(diào)用StbM_BusSetGlobalTime() 將會(huì)置位timeBaseStatus中的SYNC_TO_GATEWAY bit位;

一旦調(diào)用函數(shù)接口fStbM_BusSetGlobalTime(),那么就會(huì)設(shè)置timeBaseStatus中的GLOBAL_TIME_BASE Bit位,一旦置位,則不會(huì)清除。

Time Gateway同步狀態(tài)監(jiān)控

Time Gateway既作為屬于某個(gè)Time Domain的Time slave,同時(shí)也會(huì)作為某個(gè)Time Domain下的Time Master而存在,如果存在Time Gateway的節(jié)點(diǎn),那么必然存在Time SubDomain的概念。

如果Time Gateway作為某個(gè)Time Domain的Time Slave存在,同樣存在著如下特性需要了解:

每次更新調(diào)用函數(shù)StbM_BusSetGlobalTime時(shí),都會(huì)比較下當(dāng)前更新的時(shí)間戳與當(dāng)前內(nèi)部正在使用的時(shí)間戳的差值是否超過(guò)StbMSyncLossThreshold參數(shù)設(shè)定的值,如果該值為0,則會(huì)取消該部分的檢查,如果超過(guò)了設(shè)定的值, 那么將會(huì)將timeBaseStatus中的狀態(tài)位TIMELEAP 置1;

如果下一次更新,差值保證在范圍內(nèi),那么timeBaseStatus中的狀態(tài)位TIMELEAP將會(huì)被清0;

TIme Slave會(huì)實(shí)時(shí)確認(rèn)下當(dāng)前的時(shí)間戳與最近一次調(diào)用該函數(shù)的時(shí)間差距是否在參數(shù)StbMSyncLossTimeout設(shè)定的范圍內(nèi),如果Timeout發(fā)生,那么需置timeBaseStatus中的TIMEOUT bit位,一旦調(diào)用StbM_BusSetGlobalTime函數(shù)將會(huì)清除該TIMEOUT bit位。

如果從來(lái)沒(méi)有發(fā)生過(guò)時(shí)間同步, 那么TIMEOUT位將不會(huì)置位,只要發(fā)生過(guò)一次成功的時(shí)間同步,后續(xù)同步?jīng)]有按照預(yù)期發(fā)送,那么就會(huì)啟動(dòng)這個(gè)Timeout檢查。

如果參數(shù)syncToTimeBase設(shè)定為sync to GTM,那么調(diào)用StbM_BusSetGlobalTime() 將會(huì)清除timeBaseStatus中的SYNC_TO_GATEWAY bit位;

如果參數(shù)syncToTimeBase設(shè)定為sync to subdomain,那么調(diào)用StbM_BusSetGlobalTime() 將會(huì)置位timeBaseStatus中的SYNC_TO_GATEWAY bit位;

一旦調(diào)用函數(shù)接口fStbM_BusSetGlobalTime(),那么就會(huì)設(shè)置timeBaseStatus中的GLOBAL_TIME_BASE Bit位,一旦置位,則不會(huì)清除。

Offset Time Base

對(duì)于Offset Time Base,相比Synchronized Time Base存在著如下一些特性:

每次調(diào)用StbM_SetOffset()就會(huì)用來(lái)更新相應(yīng)的Time base的 Offset Time;

函數(shù)StbM_SetOffset() 與StbM_GetOffset() 只能接收16-31的TimeBaseId;

每一次調(diào)用函數(shù)StbM_GetOffset()將會(huì)返回對(duì)應(yīng)的Offset Time Base的Offset Time;

在配置上也會(huì)存在限制,即只有StbMSynchronizedTimeBaseIdentifier為16至31,StbMOffsetTimeBase才會(huì)真實(shí)有效。

Customer

Customers作為理解為基于StbM模塊基礎(chǔ)之上的一種應(yīng)用角色,按照其功能作用可劃分為如下兩種角色:

Active customers:顧名思義就是一種主動(dòng)觸發(fā)調(diào)用StbM相關(guān)函數(shù)接口的應(yīng)用角色;

Triggered customers:就是一種被動(dòng)被StbM模塊調(diào)用其自身接口的應(yīng)用角色;

Active customers

對(duì)于Active customers,為了便于理解,我們可以列出如下場(chǎng)景來(lái)體現(xiàn)其基本作用:

讀取當(dāng)前的time base value,同步狀態(tài)以及user data;

設(shè)置對(duì)應(yīng)time base的value以及相應(yīng)的user data;

Triggered customers

對(duì)于Triggered customer,當(dāng)前僅用于同步OS的schedule table,通過(guò)調(diào)用OS提供的API函數(shù) SyncScheduleTable() 來(lái)實(shí)現(xiàn)Schedule Table之間的counter同步。

通過(guò)配置參數(shù)STBM_TRIGGERED_CUSTOMER_PERIOD來(lái)完成StbM定周期調(diào)用上述函數(shù)接口來(lái)完成各個(gè)sechdule table的os counter間的同步;

同時(shí)StbM僅在Schedule Table 處于WAITING,RUNNING,或者 RUNNING_SYNCHRONOUS狀態(tài)時(shí)完成同步,因此也就意味著StbM在同步前先要確認(rèn)下當(dāng)前需同步的Schedule Table的狀態(tài),然后才能進(jìn)行同步。

關(guān)閉階段

針對(duì)Shutdown階段,僅存在一個(gè)需要做的操作,如果參數(shù)StbMStoreTimebaseNonVolatile等于STORAGE_AT_SHUTDOWN,那么便會(huì)將當(dāng)前實(shí)時(shí)時(shí)間戳(S跟ns部分)存儲(chǔ)在NVM中。

常用函數(shù)接口說(shuō)明

為了便于大家了解StbM模塊所提供的基本功能,因此將常見(jiàn)的函數(shù)接口列舉如下,以方便大家的查閱:

ec6cefa6-396f-11ed-9e49-dac502259ad0.png

圖5 StbM模塊常用函數(shù)接口




審核編輯:劉清

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

    關(guān)注

    10

    文章

    370

    瀏覽量

    22318
  • NVM
    NVM
    +關(guān)注

    關(guān)注

    1

    文章

    42

    瀏覽量

    19312
  • Bus總線
    +關(guān)注

    關(guān)注

    1

    文章

    6

    瀏覽量

    8027
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    AUTOSAR通信對(duì)自動(dòng)駕駛的影響 AUTOSAR通信與嵌入式系統(tǒng)設(shè)計(jì)

    AUTOSAR通信與嵌入式系統(tǒng)設(shè)計(jì)緊密相連,共同推動(dòng)著自動(dòng)駕駛技術(shù)的發(fā)展。 AUTOSAR通信對(duì)自動(dòng)駕駛的影響 提高通信效率和可靠性 AUTOSAR通信協(xié)議棧通過(guò)標(biāo)準(zhǔn)化的接口和協(xié)議,實(shí)現(xiàn)了汽車(chē)電子控制單元(ECU)之間的高效、
    的頭像 發(fā)表于 12-17 15:09 ?594次閱讀

    AUTOSAR通信與網(wǎng)絡(luò)安全 AUTOSAR通信在車(chē)輛中的應(yīng)用

    架構(gòu)合作伙伴計(jì)劃,旨在創(chuàng)建并建立一個(gè)開(kāi)放的標(biāo)準(zhǔn)化軟件架構(gòu),以簡(jiǎn)化汽車(chē)電子控制單元(ECU)的開(kāi)發(fā)和生產(chǎn)。 1. AUTOSAR通信概述 AUTOSAR定義了一個(gè)分層的軟件架構(gòu),其中包括了通信
    的頭像 發(fā)表于 12-17 15:06 ?706次閱讀

    AUTOSAR中通信堆棧的配置 AUTOSAR通信模塊測(cè)試方法

    )的開(kāi)發(fā)和生產(chǎn)。通信堆棧是AUTOSAR架構(gòu)中的關(guān)鍵組成部分,負(fù)責(zé)處理ECU之間的通信。 AUTOSAR中通信堆棧的配置 通信模型 : AUTOSAR定義了一種分層的通信模型,包括應(yīng)用層
    的頭像 發(fā)表于 12-17 15:01 ?708次閱讀

    AUTOSAR通信與CAN協(xié)議的關(guān)系

    AUTOSAR通信模型: AUTOSAR定義了一個(gè)分層的軟件架構(gòu),其中包括應(yīng)用層、基礎(chǔ)軟件和微控制器抽象。在這些
    的頭像 發(fā)表于 12-17 14:57 ?782次閱讀

    AUTOSAR通信組件介紹 AUTOSAR通信功能分析

    實(shí)現(xiàn)汽車(chē)電子控制單元(ECU)的軟件設(shè)計(jì)和開(kāi)發(fā)。這個(gè)架構(gòu)包括多個(gè),其中通信AUTOSAR架構(gòu)中的關(guān)鍵組成部分之一。 1. 通信組件概述 AUTOSAR通信組件主要負(fù)責(zé)ECU之間的
    的頭像 發(fā)表于 12-17 14:55 ?1162次閱讀

    Java中時(shí)間的使用

    Java中時(shí)間的使用
    的頭像 發(fā)表于 11-06 16:04 ?420次閱讀
    Java中<b class='flag-5'>時(shí)間</b><b class='flag-5'>戳</b>的使用

    PCM2707C是否支持Android系統(tǒng)?PCM2707C Android應(yīng)用層怎么寫(xiě)?

    有如下兩個(gè)問(wèn)題,幫忙看看,謝謝! 1,PCM2707C是否支持Android系統(tǒng) 2,PCM2707C Android應(yīng)用層怎么寫(xiě)?如何獲取USB上的音頻數(shù)據(jù)。
    發(fā)表于 10-30 07:46

    Linux應(yīng)用層控制外設(shè)的兩種不同的方式

    眾所周知,linux下一切皆文件,那么應(yīng)用層如何控制硬件,同樣是通過(guò) 文件I/O的方式來(lái)實(shí)現(xiàn)的,那么應(yīng)用層控制硬件通常有兩種方式。
    的頭像 發(fā)表于 10-05 19:03 ?1067次閱讀
    Linux<b class='flag-5'>應(yīng)用層</b>控制外設(shè)的兩種不同的方式

    物聯(lián)網(wǎng)中的普通傳感器如何通過(guò)DTU/RTU透?jìng)鲙в?b class='flag-5'>時(shí)間和IMEI的數(shù)據(jù)

    一 概述 時(shí)間是指格林威治時(shí)間1970年01月01日00時(shí)00分00秒(北京時(shí)間1970年01月01日08時(shí)00分00秒)起至現(xiàn)在的總秒數(shù)。時(shí)間
    的頭像 發(fā)表于 09-25 16:35 ?1648次閱讀
    物聯(lián)網(wǎng)中的普通傳感器如何通過(guò)DTU/RTU透?jìng)鲙в?b class='flag-5'>時(shí)間</b><b class='flag-5'>戳</b>和IMEI的數(shù)據(jù)

    合宙LuatOS應(yīng)用,與時(shí)間相關(guān)那些事

    ()函數(shù)了。 接下來(lái),我會(huì)講一些與這個(gè)函數(shù)以及其他時(shí)間函數(shù)相關(guān)的知識(shí)。 一、時(shí)間相關(guān) os.time()這個(gè)函數(shù),只能獲取當(dāng)前時(shí)間
    的頭像 發(fā)表于 09-25 07:25 ?517次閱讀
    合宙LuatOS應(yīng)用,與<b class='flag-5'>時(shí)間</b>相關(guān)那些事

    請(qǐng)問(wèn)如何將esp32-idf內(nèi)部的應(yīng)用層網(wǎng)絡(luò)協(xié)議關(guān)聯(lián)到自己寫(xiě)的網(wǎng)絡(luò)設(shè)備上?

    使用ESP32-IDF里面的應(yīng)用層協(xié)議如MQTT、HTTP。但網(wǎng)絡(luò)設(shè)備是自己添加的4G模塊,請(qǐng)問(wèn)有沒(méi)有類(lèi)似的應(yīng)用例程,如何將4G網(wǎng)絡(luò)模塊關(guān)聯(lián)到MQTT應(yīng)用層協(xié)議里面。
    發(fā)表于 06-21 13:47

    在ESP32里使用esp-idf框架該如何獲取系統(tǒng)上電時(shí)間?

    ESP8266里面可以通過(guò) esp_get_time()函數(shù) 獲取系統(tǒng)上電時(shí)間, 在 ESP32 里使用 esp-idf 框架 該如何獲取系統(tǒng)上電時(shí)間
    發(fā)表于 06-19 07:13

    esp32獲取時(shí)間的相關(guān)函數(shù)是哪個(gè)?

    esp32 獲取時(shí)間的相關(guān)函數(shù)是哪個(gè),我用了sntp_get_current_timestamp這個(gè)函數(shù),編譯的時(shí)候說(shuō)找不到,有沒(méi)有相關(guān)的例程參考?
    發(fā)表于 06-11 07:26

    IDF4.4的SNTP接口是否有獲取毫秒級(jí)別時(shí)間的方法?

    基于例程中SNTP接口實(shí)現(xiàn)獲取網(wǎng)絡(luò)時(shí)間后,發(fā)現(xiàn)精度只能到秒級(jí),SNTP是否有獲取毫秒級(jí)時(shí)間的辦法
    發(fā)表于 06-11 07:05

    如何在TLE9893系列中實(shí)現(xiàn)RTC時(shí)間?

    我正試圖在 TLE9893 系列中實(shí)現(xiàn) RTC 時(shí)間。 能否提供一個(gè)基本 RTC 示例的想法或示例源項(xiàng)目?
    發(fā)表于 05-27 06:20