WDG_集成手册
目标
本文档用于指导客户进行WDG集成,文档主要包括的内容为:WDG集成指导、基于普通应用的集成示例讲解、项目集成特殊说明。
通过阅读本文档,用户可以了解代码集成过程,ORIENTAIS配置工具的配置过程,以及如何应用配置工具生成的配置文件。由于各项目的需求不同,集成示例不会针对于特定的商业项目做详细讲解。
缩写词和术语
缩写词/术语 |
描述 |
OS |
Operating System 操作系统 |
ECU |
Electronic Control Unit 电控单元 |
WDG |
Watchdog 看门狗 |
WdgM |
Watchdog Manager 看门狗管理 |
WdgIf |
Watchdog Interface 看门狗接口 |
CP |
CheckPoint 监控点 |
SE |
Supervised Entity 监控实体 |
参考文档
[1] 参考手册_ORIENTAIS_Configurator_WDG.pdf
[2] 参考手册_ORIENTAIS_WDG.pdf
WDG集成
WDG各配置模块的功能介绍,参见表4-1 WDG各配置模块介绍。
使用WDG源码和配置工具,进行WDG的集成的步骤,参见表 4‑2 WDG集成的步骤。
模块名 |
功能 |
Wdg |
wdg驱动配置。 |
WdgIf |
1.允许WdgM访问多个底层Wdg抽象模块。 2.该模块的API都映射到下层Wdg抽象模块的API。 |
WdgM |
1.Watchdog的管理操作,实现各种状态机制管理。 2.为用户App提供Watchdog的Api。 3.下发指令给下层WdgIf,并获取其反馈结果。 |
步 骤 |
操作 |
说明 |
1 |
ORIENTAIS Configurator配置工 具工程搭建和WDG模块加载 |
若配置工具已经搭 建,则仅需进行WDG模块的加载操作。 |
2 |
模块配置及配置文件生成 |
NA |
3 |
代码集成 |
现有工程 、WDG源代码和配置生成文件的集成。 |
4 |
验证测试 |
NA |
注意:WDG集成之前,用户须确保已经有基础工程,且WDG相关的其他协议栈能正常工作。
新建ORIENTAIS Configurator配置工程及模块加载
安装ORIENTAIS Configurator软件后,双击软件图标打开软件。
图 4‑1软件主界面
菜单栏File🡪New🡪Project,新建工程。
在弹出的新建窗口中选择Autosar下的 [BSW Project],选择Next。
图 4‑3新建工程
在弹出的窗口中输入工程名,选择Finish。
图 4‑4新建工程
在弹出的窗口中选择Yes。
图 4‑5完成新建工程
选择[Bsw_Builder],右键单击,选择New ECU Configuration。
图 4‑6新建ECU
在弹出的窗口中输入ECU名,然后选择Next。
图 4‑7选择芯片平台
在弹出的窗口中勾选需添加的模块,点击Finish。
图 4‑8完成ECU配置
新建工程如下所示,步骤⑧中添加的模块已经被加入到工程中。
图 4‑9工程列表界面
模块配置及生产代码
模块配置
模块的具体配置,取决于具体的项目需求。该协议栈各模块配置项的详细介绍,参见表 4-3协议栈各模块配置参考文档。
模块 |
参考文档及其章节 |
说明 |
WdgIf |
Autosar R19-11_参考手册_WdgIf.pdf |
|
WdgM |
Autosar R19-11_参考手册_WdgM.pdf |
配置代码生成
在ORIENTAIS Configurator主界面左方,选择对应的协议栈,单击右键弹出Validate All和Generate All菜单。
图 4‑10代码生成
选择Validate All对本协议栈各配置选项进行校验,没有错误提示信息即校验通过。若有错误信息,请按照错误提示修改。
选择Generate All,生成配置文件。右下角的Console窗口输出生成的配置文件信息。
图 4‑11代码生成提示界面
将ORIENTAIS Configurator切换到Resource模式,即可查看生成的配置文件。
功能集成
代码集成
WDG代码包括两部分:项目提供的WDG源码和ORIENTAIS Configurator配置生成代码。
用户须将WDG源码和章节4.2.2生成的源代码添加到集成开发工具的对应文件夹。WDG集成的文件结构,见章节5。
注意:WDG集成之前,用户须确保已经有基础工程,且WDG相关的其他协议栈能正常工作。
集成注意事项
对于集成过程中,WDG特殊要求和用户经常出现的问题,归类总结形成表 4‑4 WDG集成约束清单。用户需逐一排查表中的约束项,以避免集成问题出现。
编 号 |
类别 |
约束限制 |
1 |
堆栈 |
用户需确保为任务堆栈和中断堆栈分配足够的堆栈空间。 |
2 |
头文件 |
栈代码之后,用户需更新集成开发工具中的头文件路径。
|
3 |
初始化 |
WDG的初始化顺序为:WdgDriver_Init,WdgM_Init |
4 |
周 期函数 |
Gtm_IsrTomModule ,WdgM_MainFunction需要被周期性任务函数调用。 |
5 |
Al ive监控 |
1. 上电启动OS之后,由于第一个OS 周期Task的不确定性,需要在初次执行WdgM_MainFunction 之后,才开始执行Alive相关的WdgM_CheckPointReached。 2. WdgM_SetMode需要在WdgM_MainFunction之后执行,避 免两个Mode都使用同一Alive监控的阈值差异造成的错误。 |
6 |
Fi rstExpi redSEID |
WDGM_FIRST_EXPIRED_SEID和WDGM _FIRST_EXPIRED_INVERSE_SEID各占用RAM空间的16Bytes, 应在链接脚本中进行保护,避免其他变量占用该RAM区域。 |
7 |
依赖 |
CP的时间戳监控时间间隔功能。时间戳从定时器外设获取
是芯片上的看门狗,也可以是外部看门狗,或者两者都有
用于设置模式的函数,设置触发条件的函数,喂狗函数。
:调用该模块以重置OS-Application,该模块不是强制的。 |
集成示例
本章节向用户展示WDG的集成过程。用户可以据此熟悉WDG配置工具的配置过程,以及如何应用配置工具生成的配置文件。示例是基于Wdg驱动正常工作之上。
本章节先完成基本WDG配置,使得工程可以编译通过,并实现基础WDG监控,然后根据具体需求服务进行添加或修改。
注意:本示例不代表用户的实际配置情况,用户需要根据自己的实际需求,决定各个参数的配置。
集成目标
通过搭建基础工程,实现简单的Wdg监控功能。具体监控功能如下:
Alive supervision -用于监控定期软件的时间。参数配置如表5-1:
监 控类型 |
描述 |
监 控 实 体 个 数 |
监 控 点 个 数 |
参 考 周 期 |
监 控 失 败 门 限 |
监 控 失 效 门 限 |
期 望 执 行 次 数 |
次 数 上 偏 差 |
次 数 下 偏 差 |
Alive 监控 |
监控一 次mainfun ction周期a live监控点 执行的次数 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
Deadline supervision–用于非周期软件的时间监控。参数配置如表5-2
监控类型 |
描述 |
监 控 实 体 个 数 |
监 控 点 个 数 |
参 考 周 期 |
监 控 失 败 门 限 |
监 控 失 效 门 限 |
最 大 时 间 间 隔 ( S) |
最 小 时 间 间 隔 ( S) |
Deadline 监控 |
监控两C P的时间间隔 |
1 |
2 |
1 |
0 |
0 |
0 .05 |
0 |
③ Logical supervision-用于监控执行顺序的正确性。参数配置如表5-3:
监控类型 |
描述 |
监控 实体 个数 |
监 控点 个数 |
参考 周期 |
监控 失败 门限 |
监控 失效 门限 |
Logical 监控 |
监控CP执行顺序 |
1 |
2 |
1 |
0 |
0 |
模块的配置
新建配置工程及模块加载操作,请参考本文档4.1章节。生成代码过程请参考章节4.2。
导入MCAL的WDG Driver 信息
选择如下图所示的 Import Module From Other Arxml选项
选择Mcal生成的ARXML文件,Supplier选择EB Arxml文件,勾选WDG模块。
WdgIf配置
双击WdgIf模块,打开WdgIf模块配置界面。
Dev_Error_Detect: 是否开启对开发过程中错误的检查。
Version_Info_Api: 是否使能版本检查API函数
添加WdgIfDevice配置,分为WdgIfInternalDevice与WdgIfExternalDevice,可只存在一个或同时存在。添加步骤为:鼠标选中WdgIfInternalDevice—单击右键—New WdgIfInternalDevice。详见图5-4。
图 5‑4新添加WdgIfInternalDevice
添加WdgIfDevice后配置界面如图5-5.
图 5‑5 WdgIfInternalDevice配置界面
TriggerConditionFunction:此配置填写Wdg Driver中API函数名称。通过这个API可以实现为设定trigger counter时设置超时数值(milliseconds)。
SetModeFunction:此配置填写Wdg Driver中API函数名称。通过这个API可以实现在WDGIF_OFF_MODE(0), WDGIF_FAST_MODE(1)以及WDGIF_SLOW_MODE(2).间切换。
Device Ref:选择对应的底层Watchdog。
WdgIf模块到此配置结束。可以在模块上右键,然后选择校验,查看是否配置有错误。校验后提示窗口没有错误信息,即校验通过。
WdgM模块配置
双击WdgM模块,打开WdgM模块配置界面。
WdgMDemStoppedSupervisionReport:是否需要将错误信息报告给Dem模块。
WdgMDevErrorDetect: 打开或关闭错误追踪(Det)功能。若开启,一旦检测到配置出错,则代码停留在故障出错位置。量产用代码,需关闭该配置。
WdgMImmediateReset: 使能/失能在Global status Stopped状态时立即复位。
WdgMOffModeEnabled: 是否允许Watchdog Driver配置为Off Mode模式。true: 允许 “OffMode”, false: 不允许“OffMode”。
WdgMVersionInfoApi:预处理器开关,用于启用/禁用API WdgM_GetVersionInfo的存在。用于删除不需要的代码段。
Address For FIRST_EXPIRED_SEID:FIRST_EXPIRED_SEID存储地址。存储在此区域的数据必须不会因热启动而擦除或复位。
Address For FIRST_EXPIRED_INVERSE_SEID:FIRST_EXPIRED_INVERSE_SEID存储地址。存储在此区域的数据必须不会因热启动而擦除或复位。
WdgMSupervisedEntitys添加如图5-7。
WdgMCheckpoint添加如图5-8。
WdgMSupervisedEntitys配置界面如图5-9。
Supervised Entity Id:此参数应该包含一个唯一的SEID。
Internal Transition Id:外部逻辑监控ID。
OS Application Ref:该SE属于哪个Application。用于SE故障时的部分代码重启。
Internal Checkpoint Initial Ref:该SE的Internal Logical supervision的初始Checkpoint。
WdgMInternalCheckpoint FinalRef:该SE的Internal Logical supervision的最终Checkpoint
WdgMInternalTransition配置界面如图5-10。
图 5‑10 WdgMInternalTransition配置界面
Internal Transition Dest Ref:InternalLogicalSupervision中的某执行段的目的CP。
Internal Transition Source Ref:InternalLogicalSupervision中的某执行段的起始CP
WdgMWatchdog配置界面如图5-11。
Watchdog Name:该参数包含Watchdog硬件实例的命名。
Watchdog Device Ref:该参数应包含看门狗实例的符号名称。
WdgMConfigSet配置界面如图5-12。
图 5‑12WdgMConfigSet中Initial Mode配置界面
Initial Mode:看门狗管理器初始化后所处的模式。
WdgMDemEventParamenterRef添加。
WdgMDemEventParamenterRef添加步骤为:鼠标选中WdgMConfigSet—单击右键—New—WdgMDemEventParamenterRefs。用来关联Dem模块的DTC详见图5-13。
WdgMDemEventParamenterRefs配置界面如图5-14。
图 5‑2 WdgMDemEventParamenterRefs配置界面
添加WdgMMode配置项步骤。
鼠标选中WdgMMode—单击右键—New—WdgMAliveSupervisoin。详见图5-15。
或WdgMDeadlineSupervisionWdgM
或ExternalLogicalSupervision
或 WdgMLocalStatusParams或 WdgMTrigger
注意:在增加或删除WdgMAliveSupervision后,若其它WdgMAliveSupervision ID会发生变化,务必单击打开会发生变化的WdgMAliveSupervision,以保证其ID能正确更新。
WdgMAliveSupervision配置界面如图5-16。
Expected Alive Indications:期望该CP在SupervisionReferenceCycle的Main Function中,出现的次数
Max Margin:Expected Alive Indications与实际情况的最大允许偏差。
Min Margin:Expected Alive Indications与实际情况的最小允许偏差。
Supervision Reference Cycle:该AliveSupervision执行多少个MainFuncation周期
Alive Supervision Checkpoint Ref:该AliveSupervision监控的检查点
WdgMDeadlineSupervisoin添加及配置界面介绍。
添加步骤为:鼠标选中WdgMMode—单击右键—New—WdgMDeadlineSupervisoin。默认情况,无该配置项。详见图5-17。
注意:在增加或删除WdgMDeadlineSupervisoin后,若其它WdgMDeadlineSupervisoin ID会发生变化,务必单击打开会发生变化的WdgMDeadlineSupervisoin,以保证其ID能正确更新。
Deadline Max:Deadline监控两个Checkpoint直接的最大时间间隔单位:s。
Deadline Min:Deadline监控两个Checkpoint直接的最小时间间隔单位:s。
Deadline Start Ref:Deadline监控的起始Checkpoint。
Deadline Stop Ref:Deadline监控的结束Checkpoint。
WdgMExternalTransition添加步骤及配置项介绍。
WdgMExternalLogicalSupervisoin添加步骤为:鼠标选中WdgMMode—单击右键—New—WdgMExternalLogicalSupervisoin。
右键单击WdgMExternalLogicalSupervisoin_xx —New—ExternalTransition。。
鼠标选中WdgMExternalLogicalSupervisoin_xx —鼠标移到右方窗口的InitialRef 或 StopRef—单击右键—Add Reference—下拉选择Checkpoint。
配置描述如图5-18。
External Transition Source Ref:ExternalLogicalSupervision中的某执行段的目的CP。
Deadline Stop Ref:ExternalLogicalSupervision中的某执行段的结束CP
WdgMLocalStatusParams添加步骤及介绍
鼠标选中WdgMMode—单击右键—New—WdgMLocalStatusParams。配置界面如图5-19。
Failed Alive Supervision Ref Cycle Tol:Alive Supervision出现故障时,能接受的故障次数。达到故障次数时,Local Status的状态从Failed切换到Expired。
Local Status Supervision Entity Ref:选择当前Mode,被使用的Supervision Entity。
WdgMTrigger添加步骤及配置项介绍
鼠标选中WdgMMode—单击右键—New—WdgMTrigger。配置项介绍如图5-20。
Trigger Condition Value:该参数应包含传递给该看门狗WdgIf_SetTriggerCondition的值。单位: ms
Watchdog Mode:当前Trigger,对应Trigger Watchdog Ref底层的Watchdog的工作模式。
Trigger Watchdog Ref:当前Trigger对应的底层Watchdog。
WdgM模块到此配置结束。可以在模块上右键,然后选择校验,查看是否配置有错误。校验后提示窗口没有错误信息,即校验通过。
配置Alive Supervision
添加Wdg驱动头文件。内部WDG不需要添加。
图 5‑21 添加WDG驱动文件界面
新建WdgIfInternalDevice。
添加驱动接口函数。
配置Address for FIRST_EXPIRED_SEID和Address for FIRST_EXPIRED_INVERSE_SEID。
WdgMGenerals->New,新建一个WdgMSupervisedEntity和一个WdgMWatchd og。
配置Supervised Entity Id工具默认值为1。
配置WdgMWatchdog_1。
WdgMConfigSet->New->WdgMMode。
Expired Supervision Cycle Tol配置为0。
WdgMMode_0->New,新建WdgMAliveSupervision和WdgLocalStatusParams。
选择本地状态监控实体参考监控实体0.监控失败门限配置为0。
配置Alive监控相关参数。
设置触发值为100,看门狗模式为FAST模式。
选择初始化模式为WdgMMode_1。
代码修改如下:
这是Alive supervision的一个例子。函数WdgM_MainFunction()在50ms任务中执行,函数WdgM_CheckpointReached在50ms任务中执行,因此每执行WdgM_MainFunction()时,WdgM_CheckpointReached中的期望指示是1次。
/*OsTask_50ms:Core0(CPU0),Type = BASIC,Priority = 3*/
TASK(OsTask_50ms)
{
WdgM_CheckpointReached(1,0);
/*WdgM_MainFunction() call cycle to check the result of the WdgM module*/
WdgM_MainFunction();
if (E_OK != TerminateTask())
{
while (1)
{
/* dead loop */
}
}
}
配置Deadline Supervision
添加Wdg驱动头文件。
图 5‑35 添加Wdg驱动头文件
新建WdgIfInternalDevice。
添加驱动接口函数。
配置Address for FIRST_EXPIRED_SEID和Address for FIRST_EXPIRED_INVERSE_SEID。
WdgMGenerals->New,新建一个WdgMSupervisedEntity和一个WdgMWatchdog。
配置Supervised Entity Id 工具默认生成为1。
WdgSupervisedEntity_0->New,添加WdgMCheckPoint。
配置WdgMWatchdog_0。
WdgMConfigSet->New->WdgMMode。
Expired Supervision Cycle Tol配置为0。
WdgMMode_1->New,新建WdgMDeadLineSupervision和WdgLocalStatusPa rams。
选择本地状态监控实体参考监控实体0.监控失败门限配置为0。
配置Deadline监控相关参数。
设置触发值为100,看门狗模式为FAST模式。
选择初始化模式为WdgMMode_1。
注意:
在同一个DeadLine supervision的配置中,start ref和stop ref配置为同一个checkpoint。
在Deadline的配置中,如果配置checkpoint形成链路的情况下,同一个checkpoint不能用做多个Deadline的start ref。
代码修改如下:
这是Deadline supervision的一个例子。WdgMDeadlineMax = 0.05,WdgMDeadlineMin = 0,表示两个CP之间的时间不超过50ms。
/*OsTask_50ms:Core0(CPU0),Type = BASIC,Priority = 3*/
TASK(OsTask_50ms)
{
/* please insert your code here … */
static unsigned int counter = 0;
if(0 == counter)
{
counter = 1;
WdgM_CheckpointReached(1,0);
}
else
{
counter = 0;
WdgM_CheckpointReached(1,1);
WdgM_MainFunction();
}
if (E_OK != TerminateTask())
{
while (1)
{
/* dead loop */
}
}
}
配置Logical Supervision
添加Wdg驱动头文件。
图 5‑50 添加Wdg驱动头文件
新建WdgIfInternalDevice。
添加驱动接口函数。
配置Address for FIRST_EXPIRED_SEID和Address for FIRST_EXPIRED_INVERSE_SEID。
WdgMGenerals->New,新建一个WdgMSupervisedEntity和一个WdgMWatchdog。
WdgSupervisedEntity_0->New,添加WdgMCheckPoint和WdgMInternalTransm ition。
配置Supervised Entity Id 为大于0的值,该例程配置为1。设置初始化监控点为SE0CP0,结束监控点为SE0CP1。
图 5‑56 配置监控点
设置WdgInternalTransmision起始为SE0CP0,终止为SE0CP1。
配置WdgMWatchdog_0。
WdgMConfigSet->New->WdgMMode。
Expired Supervision Cycle Tol配置为0。
WdgMMode_0->New,新建WdgLocalStatusParams。
选择本地状态监控实体参考监控实体0.监控失败门限配置为0。
设置触发值为100,看门狗模式为FAST模式。
选择初始化模式为WdgMMode_1。
代码修改如下:
这是Internal logical supervision的一个例子。这两个CP属于同一监控实体。CP必须以正确的顺序执行。
/* OsTask_50ms:Core0(CPU0),Type = BASIC,Priority = 3*/
TASK(OsTask_50ms)
{
/* please insert your code here … */
static unsigned int counter = 0;
if(0 == counter)
{
counter = 1;
WdgM_CheckpointReached(3,0);
}
If(1 == counter)
{
WdgM_CheckpointReached(3,1);
WdgM_MainFunction();
counter = 0;
}
if (E_OK != TerminateTask())
{
while (1)
{
/* dead loop */
}
}
}
WDG调度集成
WDG调度集成步骤如下:
WDG调度集成,需要逐一排查并实现表 4‑4 WDG集成约束清单所罗列的问题,以避免集成出现差错。
编译链接代码,将生成的elf文件烧写进芯片。
注意 : 本示例中,WDG初始化的代码置于OsTaskInit,并不代表其他项目同样适用于将其置于OsTaskInit中。
初始化代码如下:
TASK(OsTask_Init)
{
Dem_PreInit();
Dem_Init(&DemPbCfg);
Gtm_Init(&Gtm_ConfigRoot[0]);
Smu_Init(&Smu_ConfigRoot[0]);
Wdg_17_Scu_Init(&Wdg_ConfigRoot[0]);
WdgM_Init(&WdgMConfigRoot[0]);
}
监控代码根据不同的解控实例,监控点放置位置,WdgM_MainFunction放置位置,请参考5.2.3,5.2.4,5.2.5章节
验证结果
验证Alive Supervision
将工程编译通过后,使用PE调试工具进行调试,当屏蔽WdgM_CheckpointReached(1,0)后,编译下载仿真时,在编译环境中观察到发生复位。
当不屏蔽WdgM_CheckpointReached(1,0)后,观测点配置如5.2.3章节,编译下载仿真时,在编译环境中观察未发生复位。
验证Deadline Supervision
将工程编译通过后,使用PE调试工具进行调试,当WdgM_CheckpointReached(1,0)和WdgM_CheckpointReached(1,1)时间间隔不为50ms时,编译下载仿真时,在编译环境中观察到发生复位。
当两观测点时间间隔为50ms, 即观测点配置如5.2.4章节,编译下载仿真时,在编译环境中观察未发生复位。
验证Logical Supervision
将工程编译通过后,使用PE调试工具进行调试,当执行两次WdgM_CheckpointReached(1,0),不执行WdgM_CheckpointReached(1,1),然后执行WdgM_MainFunction检查时,编译下载仿真时,在编译环境中观察到发生复位。
当观测点配置如5.2.5章节,编译下载仿真时,在编译环境中观察未发生复位。