AUTOSAR基础篇之StbM

news/2024/5/17 17:14:45/文章来源:https://blog.csdn.net/wto9109/article/details/126963685

AUTOSAR基础篇之StbM

前言

首先,请问大家几个小小问题,你清楚:

  • 基于AUTOSAR的应用层如何获取准确的时间戳吗?
  • 时间同步的具体过程包含哪些细节呢?
  • 如何正确的获取到全局时间戳呢?

今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:

在这里插入图片描述


正文

时间同步软件框架

正如前文《AUTOsar基础篇之CanTsync》所述,CanTsyn模块负责时间同步之间的协议处理,StbM模块则用来负责抽象底层不同的时间同步协议,为上层提供统一的时间戳接口以及当前的时间同步状态的接口。

通过如下图1所示的Tsync则用来代表基于不同总线通讯的时间同步协议,StbM则是时间同步协议层基础上的抽象,OS作为Triggered Customer,SW-C则作为Active Customer,后文将解释这两者之间的区别。

在这里插入图片描述

图1 AUTOSAR时间同步协议软件框架

在上图中,我们可以看到存在5个不一样的数据流,下面将一一解释每个数据流的基本作用:

  • 数据流1表示StbM主动调用TriggerCustomer提供的函数接口来完成时间同步,当前主要应用场景为OS Schedule Table的同步;
  • 数据流2表示Active Customer(SW-C)主动调用StbM提供的标准接口来获取当前时间戳或者时间同步状态;
  • 数据流3表示Active Customer(SW-C)主动调用StbM提供的标准接口来更新StbM维护的时间基准;
  • 数据流4表示StbM模块通过Tsyn模块提供的标准函数接口来更新StbM的时间基准;
  • 数据流5表示StbM模块主动通过Tsyn模块提供的标砖函数接口来将当前的时间同步信息发送到相应的bus总线上。

在时间同步领域内涉及到诸多专有名词,因此为了便于大家理解后续的内容,有必要在此跟大家解释些重要的标准术语,具体细节如下图2所示:

在这里插入图片描述

图2 时间同步标准术语解释

启动阶段

在该阶段StbM模块将会提供完成必要的初始化来提供针对上层应用的时间同步服务。

前置条件

StbM模块通过调用函数接口StbM_Init来完成初始化工作,但是在此之前需务必完成基础通讯模块的初始化,如Canif模块初始化,CanTsyn模块初始化等。

初始化

通过调用上述函数完成初始化之后,将会完成如下基本动作:

  • 变量StbMSynchrinizedTimeBase将会被初始化为0;
  • timeBaseStatus将会将所有的bit初始化为0;
  • 如果参数StbMStoreTimebaseNonVolatile等于STORAGE_AT_SHUTDOWN,那么就会从NVM中获取数据(一般包含s跟ns部分),如果NVM获取数据不成功,则都会赋值为0处理。

正常工作

Synchronized Time Base

每一次调用函数接口StbM_BusSetGlobalTime()时就会更新对应的同步time base以及对应的Time Base Status。

Time Master 同步状态监控

如下图3所示,一个全局时间网络至少一个Time Master跟一个Time Slave, Time Master将会将其时间信息传递至在同一Time Domain下的Time Slave。

在这里插入图片描述

图3 Time Master 同步状态更新示意图

由上图可知,Time Master通过reference本地clock来更新本地全局时间,然后通过sync/FUP报文发送给到总线上。其中,如果Time Domain为0-15则为synchronized time base,而Time Domain 16-31则为Offset Time Base。

  • 通过调用函数接口 StbM_GetCurrentTime() 来获取当前对应Time Domain下的Time Base,对应的timebasestatus以及user data;

  • 通过调用函数接口StbM_GetCurrentTimeRaw() 来获取当前时间Time Base的ns部分;

  • 通过调用函数接口StbM_GetCurrentTimeDiff() 来获取输入的时间戳与当前时间戳的时间间隔,单位为ns;

  • 通过调用函数接口**StbM_BusSetGlobalTime()**来更新当前的Time Base以及设置对应的timebaseStatus;

  • 通过调用函数接口 **StbM_SetGlobalTime()**并且会就将GLOBAL_TIME_BASE bit位置1,同时清除其他bit 位;

Time Slave 同步状态监控

如下图4所示体现了Time Slave的数据流交互关系,在下图中我们可以看到Time Slave会接收来自同一Time Domin下的sync/fup 报文,同时加上本地计算出来的接收sync/fup报文的时间差最终用于更新当前StbM的Time Base,该Time Base将最终被应用到应用层。
在这里插入图片描述

图4 Time Slave同步状态更新图

Time Slave在完成上述时间同步的过程中,需要注意几点:

  • 每次更新调用函数StbM_BusSetGlobalTime时,都会比较下当前更新的时间戳与当前内部正在使用的时间戳的差值是否超过StbMSyncLossThreshold参数设定的值,如果该值为0,则会取消该部分的检查,如果超过了设定的值, 那么将会将timeBaseStatus中的状态位TIMELEAP 置1;

  • 如果下一次更新,差值保证在范围内,那么timeBaseStatus中的状态位TIMELEAP将会被清0;

  • TIme Slave会实时确认下当前的时间戳与最近一次调用该函数的时间差距是否在参数StbMSyncLossTimeout设定的范围内,如果Timeout发生,那么需置timeBaseStatus中的TIMEOUT bit位,一旦调用StbM_BusSetGlobalTime函数将会清除该TIMEOUT bit位。

  • 如果从来没有发生过时间同步, 那么TIMEOUT位将不会置位,只要发生过一次成功的时间同步,后续同步没有按照预期发送,那么就会启动这个Timeout检查。

  • 如果参数syncToTimeBase设定为sync to GTM,那么调用StbM_BusSetGlobalTime() 将会清除timeBaseStatus中的SYNC_TO_GATEWAY bit位;

  • 如果参数syncToTimeBase设定为sync to subdomain,那么调用StbM_BusSetGlobalTime() 将会置位timeBaseStatus中的SYNC_TO_GATEWAY bit位;

  • 一旦调用函数接口fStbM_BusSetGlobalTime(),那么就会设置timeBaseStatus中的GLOBAL_TIME_BASE Bit位,一旦置位,则不会清除。

Time Gateway同步状态监控

Time Gateway既作为属于某个Time Domain的Time slave,同时也会作为某个Time Domain下的Time Master而存在,如果存在Time Gateway的节点,那么必然存在Time SubDomain的概念。

如果Time Gateway作为某个Time Domain的Time Slave存在,同样存在着如下特性需要了解:

  • 每次更新调用函数StbM_BusSetGlobalTime时,都会比较下当前更新的时间戳与当前内部正在使用的时间戳的差值是否超过StbMSyncLossThreshold参数设定的值,如果该值为0,则会取消该部分的检查,如果超过了设定的值, 那么将会将timeBaseStatus中的状态位TIMELEAP 置1;

  • 如果下一次更新,差值保证在范围内,那么timeBaseStatus中的状态位TIMELEAP将会被清0;

  • TIme Slave会实时确认下当前的时间戳与最近一次调用该函数的时间差距是否在参数StbMSyncLossTimeout设定的范围内,如果Timeout发生,那么需置timeBaseStatus中的TIMEOUT bit位,一旦调用StbM_BusSetGlobalTime函数将会清除该TIMEOUT bit位。

  • 如果从来没有发生过时间同步, 那么TIMEOUT位将不会置位,只要发生过一次成功的时间同步,后续同步没有按照预期发送,那么就会启动这个Timeout检查。

  • 如果参数syncToTimeBase设定为sync to GTM,那么调用StbM_BusSetGlobalTime() 将会清除timeBaseStatus中的SYNC_TO_GATEWAY bit位;

  • 如果参数syncToTimeBase设定为sync to subdomain,那么调用StbM_BusSetGlobalTime() 将会置位timeBaseStatus中的SYNC_TO_GATEWAY bit位;

  • 一旦调用函数接口fStbM_BusSetGlobalTime(),那么就会设置timeBaseStatus中的GLOBAL_TIME_BASE Bit位,一旦置位,则不会清除。

Offset Time Base

对于Offset Time Base,相比Synchronized Time Base存在着如下一些特性:

  • 每次调用**StbM_SetOffset()**就会用来更新相应的Time base的 Offset Time;
  • 函数StbM_SetOffset() 与StbM_GetOffset() 只能接收16-31的TimeBaseId;
  • 每一次调用函数StbM_GetOffset()将会返回对应的Offset Time Base的Offset Time;
  • 在配置上也会存在限制,即只有StbMSynchronizedTimeBaseIdentifier为16至31,StbMOffsetTimeBase才会真实有效。

Customer

Customers作为理解为基于StbM模块基础之上的一种应用角色,按照其功能作用可划分为如下两种角色:

  • Active customers:顾名思义就是一种主动触发调用StbM相关函数接口的应用角色;

  • Triggered customers:就是一种被动被StbM模块调用其自身接口的应用角色;

Active customers

对于Active customers,为了便于理解,我们可以列出如下场景来体现其基本作用:

  • 读取当前的time base value,同步状态以及user data;
  • 设置对应time base的value以及相应的user data;

Triggered customers

对于Triggered customer,当前仅用于同步OS的schedule table,通过调用OS提供的API函数 SyncScheduleTable() 来实现Schedule Table之间的counter同步。

通过配置参数STBM_TRIGGERED_CUSTOMER_PERIOD来完成StbM定周期调用上述函数接口来完成各个sechdule table的os counter间的同步;

同时StbM仅在Schedule Table 处于WAITING,RUNNING,或者 RUNNING_SYNCHRONOUS状态时完成同步,因此也就意味着StbM在同步前先要确认下当前需同步的Schedule Table的状态,然后才能进行同步。

关闭阶段

针对Shutdown阶段,仅存在一个需要做的操作,如果参数StbMStoreTimebaseNonVolatile等于STORAGE_AT_SHUTDOWN,那么便会将当前实时时间戳(S跟ns部分)存储仅NVM中。

常用函数接口说明

为了便于大家了解StbM模块所提供的基本功能,因此将常见的函数接口列举如下,以方便大家的查阅:

在这里插入图片描述

图5 StbM模块常用函数接口

更多精彩内容,敬请关注公众号“ADAS与ECU之吾见!”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_11397.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(Java数据结构)链表题

文章目录环形链表判断链表中是否有环找到链表开始入环的第一个节点链表分割环形链表 判断链表中是否有环 leetcode 141. 环形链表类似追及相遇问题,定义快慢指针,如果没有环,快指针会走到null;如果有环,快慢指针肯定…

QT5.15使用VISA接口连接GPIB设备和USB设备

本文是之前再外网找到的解决方法,本着分享目的共享出来。 1. 首先安装NI-VISA环境包:点击下载 如果使用GPIB还需要安装GPIB的环境包:点击下载(这个忘记了,似乎不安装也行) 2. 安装完成后,检查目…

Cent OS安装中文字体

文章目录前期准备拷贝字体拷贝Mac电脑的字体拷贝Windows的字体Centos上生成字体前期准备 添加字体需要先安装: sudo yum install -y fontconfig mkfontscale首先确认支持的字体: fc-list # 全部字体 fc-list :langzh-cn # 支持中文的字体然后开始添加…

SpringSecurity+JWT认证流程分析

对Spring SecurityJWT认证,对整体运行流程分析。 第一步先简单了解JWT是什么,生成规则。由于我们是JWT的认证模式,需要一个操作Token的工具类,能够创建token、验证token、反解析token中的信息。 WebSecurityConfigurer 1.引入S…

类——C++

C是面向过程的编程语言,重在过程,比如进行栈的操作,需要建立一个栈,初始化,push数据,pop数据,销毁栈等操作,这就是过程 C是面向对象的编程语言,重在处理对象与对象之间的…

vue打包项目版本号自加

原因 项目每次打包后都需要改动项目版本号,这个改动每次都需要在package.json中修改version,比较麻烦,到底有没有一种打包后版本号自加的办法。 方案 版本号自加其实可以使用fs修改文件来实现的。 具体思路是:在执行打包命令npm run build时,同时执行一段js代码,该代码通…

第六章 logstash学习(二)

一、ELK搭建 1.ES搭建 2.logstash搭建 1)安装java环境 2)安装logstash 3)配置环境变量 4)logstash的插件 INPUT:插件使Logstash能够读取特定的事件源。 OUTPUT:插件将事件数据发送到特定的目的地,OUTPUT是事件流水线中的最后阶段。INPUT支持事件源 OUTPUT支持输出源 COD…

【概率论与数理统计】【线性代数】计算机保研复习

我他妈写一上午了直接没了,这狗csdn,别在已发布的文章上改,辣鸡玩意儿。 复习概率论与数理统计1.基础2.贝叶斯公式3.大数定律(Law of the large numbers)4.中心极限定理5.最大似然估计6. 期望、方差和协方差面试题线性…

软件设计师2014上午题基础知识(易错整理)

软件设计师2014上午题基础知识&#xff08;易错整理&#xff09; 2014 上半年 木马程序的客户端运行在攻击者的机器上 海明码检验位计算&#xff1a;有效信息位 校验位个数 < 2^校验位个数 - 1 防火墙工作层次越低&#xff0c;工作效率越高&#xff0c;安全性越低 读音…

git 命令 简单介绍

爱无路&#xff0c;恨无情。相思无缘&#xff0c;相爱无份。曾相识&#xff0c;恨离别。无风雨&#xff0c;无同舟&#xff0c;何结果。情远天边&#xff0c;心无挂碍&#xff0c;唯爱你独一。 git简单介绍 三个区 工作区(working diretory) 用于修改文件 缓存区(stage) 是用…

zabbix的rpm包部署

1. 环境准备&#xff1a; 镜像版本虚拟机地址Rocky Linux release 8.6192.168.188.201 2. RockyLinux更换镜像源&#xff1a; [rootzabbix ~]# sed -i.bak \ -e s|^mirrorlist|#mirrorlist| \ -e s|^#baseurl|baseurl| \ -e s|dl.rockylinux.org/$contentdir|mirrors.nju.e…

计算机毕业设计之java+javaweb的新冠疫情下的校园出入系统

计算机毕业设计之javajavaweb的新冠疫情下的校园出入系统 项目介绍 随着信息化时代的到来,管理系统都趋向于智能化、系统化,新冠疫情下的校园出入系统也不例外,但目前国内的市场仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,而…

内核中oops 错误解析以及问题定位

目录 一、oops输出解析 二、工具 1、objdump 2、gdb 3、addr2line 4、decodecode 5、faddr2line 文档最后有完整的oops输出文件&#xff0c;此处将输出分成多个小块进行分析。 一、oops输出解析 [ 2620.950912] oops_tryv1:try_oops_init():37: Lets Oops!Now …

vue里使用虚拟列表处理element-ui的el-select选择器组件数据量大时卡顿问题

问题 当我们使用el-select选择器下拉数据很大的时候&#xff0c;会出现页面卡顿&#xff0c;甚至卡死的情况&#xff0c;用户体验很不好。我目前采取的方案是使用虚拟列表的方式去处理这个问题。 实现效果 数据获取完毕&#xff1a; 点击输入框&#xff1a;我们可以看到 2 万…

高频读写头CK-FA521-2M应用与选型注意事项

CK-FA521-2M为高频读写头&#xff0c;工作频率为13.56Mhz&#xff0c;通过同轴线缆与读卡器相连。使用ABS&#xff0b;铝合金作为读写头的外壳&#xff0c;适用于潮湿、粉尘、油污等恶劣环境&#xff0c;防护等级高。读写头具有识别标签距离远&#xff0c;抗干扰能力强&#xf…

Android移动应用开发之界面跳转

文章目录主要文件目录activity_main.xmldemo.xmlMainActivityActivity_Demo运行主要文件目录 主要实现的功能就是点击按钮能够实现界面的跳转。 activity_main.xml 主界面&#xff0c;包含一个按钮 <?xml version"1.0" encoding"utf-8"?> <a…

pdf转ppt的简单方法,包你一学就会

每个职场人的必备技能就是要能做一个“完美”的PPT&#xff0c;在做PPT之前肯定也少不了资料收集的过程。有的人收集资料时找到的是PDF格式的文档&#xff0c;这时候你可能就会想&#xff0c;如果能把PDF的内容直接就转还成一个PPT文档就好了。事实上这的确能办到&#xff0c;而…

2020年居家实习日志

这篇文章是我2020年在校期间疫情居家实习的日志&#xff0c;当时实习获得了很高的成绩&#xff0c;因为已经毕业挺久了觉得现在就放上来也对我也没有影响&#xff0c;还能给大家提供一个实习的模板&#xff08;膨胀&#xff09;帮助当前同样因疫情被迫居家实习广大计算机类专业…

新书推荐——华为·无线局域网应用技术(微课版丨第2版)

新书推荐——华为无线局域网应用技术&#xff08;微课版丨第2版&#xff09; 近日&#xff0c;由正月十六工作室组编&#xff0c;黄君羡主编的教材《无线局域网应用技术&#xff08;微课版丨第2版&#xff09;》在人民邮电出版社正式出版。 无线局域网应用技术微课版丨第2版组…

app自动化测试(iOS)元素定位

除了通用定位方式外&#xff0c;iOS 还有其他特殊的定位方式&#xff0c;本章节仅介绍 iOS 特有定位。 PredicateString定位 样本元素截图&#xff1a; 使用 PredicateString&#xff0c;基本定位方式是由元素属性名、运算符、目标值组成。 元素属性 比较运算符 &#xff…