RamTest_集成手册
目标
本文档用于指导客户进行RamTest集成,文档主要包括的内容为:RamTest集成指导、基于普通应用的集成示例讲解、项目集成特殊说明。
通过阅读本文档,用户可以了解代码集成过程,ORIENTAIS配置工具的配置过程,以及如何应用配置工具生成的配置文件。
由于各项目的需求不同,集成示例不会针对于特定的商业项目做详细讲解。
缩写词和术语
** 缩写词/术语** |
描述 |
OS |
Operating System 操作系统 |
ECU |
Electronic Control Unit 电控单元 |
MCU |
Micro Controller Unit 微控制单元 |
Det |
Development Error Tracer 开发错误跟踪器 |
RAM |
Random Access Memory 随机访问存储器 |
Dem |
Diagnostic Event Manager 诊断事件管理器 |
参考文档
[1] 参考手册_CRC.pdf
RamTest集成
项目交付的内容为:RamTest源码和ORIENTAIS Configurator配置工具。
RamTest各配置模块的功能介绍,参见表4-1 RamTest各配置模块介绍。
使用RamTest源码和配置工具,进行RamTest的集成的步骤。
模 块名 |
功能 |
RamTest |
RamTest主要对RAM单元的物理健康状况进行测试 |
步 骤 * |
操作 |
说明 |
1 |
ORIENTAIS Configurator配置工具 工程搭建和RamTest模块加载 |
若配置工具已经搭建, 则仅需进行RamTest模块的加载操作。 |
2 |
模块配置及配置文件生成 |
NA |
3 |
代码集成 |
现有工程、R amTest源代码和配置生成文件的集成。 |
4 |
验证测试 |
NA |
注意:RamTest集成之前,用户须确保已经有基础工程,且RamTest相关的其他协议栈能正常工作。
新建ORIENTAIS Configurator配置工程及模块加载
安装ORIENTAIS Configurator软件后,双击软件图标打开软件。
图 4-1 软件主界面
菜单栏File🡪New🡪Project,新建工程。
图 4-3 新建工程
在弹出的窗口中输入工程名,选择Finish。
在弹出的窗口中选择Yes。
图 4-5 完成新建工程
选择[Bsw_Builder],右键单击,选择New ECU Configuration。
图 4-6 新建ECU
在弹出的窗口中输入ECU名,然后选择Next。
图 4-7 选择芯片平台
在弹出的窗口中勾选需添加的模块,点击Finish。
图 4-8 完成ECU配置
新建工程如下所示,步骤⑧中添加的模块已经被加入到工程中。
图 4-9 工程列表界面
模块配置及生产代码
模块配置
在ORIENTAIS Configurator主界面左方,选择对应的协议栈,单击右键弹出Validate All和Generate All菜单。
图 4-10 代码生成
选择Validate All对本协议栈各配置选项进行校验,没有错误提示信息即校验通过。若有错误信息,请按照错误提示修改。
选择Generate All,生成配置文件。右下角的Console窗口输出生成的配置文件信息。
图 4-11 代码生成提示界面
将ORIENTAIS Configurator切换到Resource模式,即可查看生成的配置文件。
功能集成
代码集成
RamTest代码包括两部分:项目提供的RamTest源码和ORIENTAIS Configurator配置生成代码。
用户须将RamTest源码和章节4.2.1生成的源代码添加到集成开发工具的对应文件夹。RamTest集成的文件结构,见章节5.2.6。
注意:RamTest集成之前,用户须确保已经有基础工程,且RamTest相关的其他协议栈能正常工作。
集成注意事项
对于集成过程中,RamTest特殊要求和用户经常出现的问题,归类总结形成。用户需逐一排查表中的约束项,以避免集成问题出现。
编 号 * |
类别* |
约束限制 |
** 1** |
堆栈 |
用户需确保为任务堆栈和中断堆栈分配足够的堆栈空间。 |
** 2** |
头文件 |
栈代码之后,用户需更新集成开发工具中的头文件路径。
|
** 3** |
初始化 |
RamTest的初始化函数为RamTst_Init |
** 4** |
周 期函数 |
在后台测 试时,RamTst_MainFunction需要被周期性任务函数调用。 |
** 5** |
前 台测试 |
如要进 行前台测试,建议在MCU初始化之后进行或下电之前进行。 |
** 6** |
软 件依赖 |
|
集成示例
本章节向用户展示RamTest的集成过程。用户可以据此熟悉RamTest配置工具的配置过程,以及如何应用配置工具生成的配置文件。
本章节先完成基本RamTest配置,使得工程可以编译通过,并实现Ram测试,然后根据具体需求服务进行添加或修改。
注意:本示例不代表用户的实际配置情况,用户需要根据自己的实际需求,决定各个参数的配置。
集成目标
通过搭建基础工程,实现Ram测试功能。具体测试功能如下:
前台测试 -在前台实现对所配置的RAM Block用选定的算法进行全部测试或者部分测试。测试块参数配置如表5-1。
测试 类型 |
起始地址 |
** 结束地址** |
测 试破坏 后的填 充值 |
测试 策略 |
测 试使用 方法 |
前 台测试 |
0x1fff0400 |
0x1fff09ff |
0 |
非 破坏性 |
前 台测试 |
后台测试–在后台实现对所配置的RAM Block分为原子操作,用选定的算法进行全部测试。参数配置如表5-2:
测试 类型 |
起始地址 |
** 结束地址** |
测 试破坏 后的填 充值 |
测试 策略 |
测 试使用 方法 |
后 台测试 |
0x20000000 |
0x200043a7 |
0 |
非 破坏性 |
后 台测试 |
模块的配置
新建配置工程及模块加载操作,请参考本文档4.1章节。生成代码过程请参考章节4.2。
RamTstCommon配置
在此处进行一些函数是否使用的配置、安全暂存区域和RamTest模块本地变量区域配置。
双击RamTstCommon模块,打开RamTstCommon模块配置界面。
RamTstAllowApi:预处理器开关,以禁用/启用API”RamTst_Allow”。
RamTstChangeNumOfTestedCellsApi:预处理器开关,以禁用/启用API” RamTst_ChangeNumberOfTestedCells”。
RamTstGetTestAlgorithmApi:预处理器开关,以禁用/启用API” RamTst_GetTestAlgorithm”。
RamTstGetTestResultApi:预处理器开关,以禁用/启用API” RamTst_GetTestResult”。
RamTstGetTestResultPerBlockApi:预处理器开关,以禁用/启用API” RamTst_GetTestResultPerBlock”。
RamTstResumeApi:预处理器开关,以禁用/启用API” RamTst_Resume”。
RamTstRunFullTestApi:预处理器开关,以禁用/启用API” RamTst_RunFullTest”。
RamTstRunPartialTestApi:预处理器开关,以禁用/启用API” RamTst_RunPartialTest”。
RamTstSelectAlgParamsApi:预处理器开关,以禁用/启用API” RamTst_SelectAlgParams”。
RamTstStopApi:预处理器开关,以禁用/启用API” RamTst_Stop”。
RamTstSuspendApi:预处理器开关,以禁用/启用API” RamTst_Suspend”。
RamTstVersionInfoApi:预处理器开关,以禁用/启用API” RamTst_GetVersionInfo”。
SelfCheckEnable:预处理器开关,以禁用/启用自检功能。
TestCompleteNotificationEnable:预处理器开关,以禁用/启用测试完成通知。
TestErrorNotificationEnable:预处理器开关,以禁用/启用测试失败通知。
安全暂存区域地址配置,分为起始地址和结束地址。
SafeReserveAreaStartAddr:此配置填写起始地址。
SafeReserveAreaEndAddr:此配置填写结束地址。详见图5-2。
RamTst模块本地变量区域配置。分为起始地址和结束地址。
LocalVarAreaStartAddr:此配置填写起始地址。
LocalVarAreaEndAddr:此配置填写结束地址。如图5-3.
RamTstAlgorithms配置
此处进行RamTest所使用的测试算法配置。
双击RamTstAlgorithms模块,打开RamTstAlgorithms模块配置界面。
RamTstAbrahamTestSelected: 预处理器开关,以禁用/启用算法Abraham,目前未实现,此配置项不可配。
RamTstCheckerboardTestSelected: 预处理器开关,以禁用/启用算法Checkerboard,目前未实现,此配置项不可配。
RamTstGalpatTestSelected: 预处理器开关,以禁用/启用算法Galpat,目前未实现,此配置项不可配。
RamTstMarchTestSelected: 预处理器开关,以禁用/启用算法March。
RamTstTranspGalpatTestSelected: 预处理器开关,以禁用/启用算法TranspGalpat,目前未实现,此配置项不可配。
RamTstWalkPathTestSelected: 预处理器开关,以禁用/启用算法WalkPath,目前未实现,此配置项不可配。
此处将“RamTstMarchTestSelected”勾选上。
RamTstConfigParams配置
此处进行RamTest配置参数的配置。
双击RamTstConfigParams模块,打开RamTstConfigParams模块配置界面。
图 5-6 RamTstConfigParams配置
配置RamTstDefaultAlgParamsId,此处填1;
RamTstDefaultAlgParamsId:默认的测试参数ID配置。
图 5-7 RamTstDefaultAlgParamsId配置
配置RamTstMinNumberOfTestedCells;
RamTstMinNumberOfTestedCells:进行测试时的最小测试单元字节数。
图 5-8 RamTstMinNumberOfTestedCells配置
配置RamTstTestCompletedNotification;
RamTstTestCompletedNotification:测试完成回调函数,在完成RAM测试 后,没有检测到错误,会调用这个函数。
配置RamTstTestErrorNotification;
RamTstTestErrorNotification:测试到错误时的回调函数,在检测到RAM 错误时,会调用这个函数。
RamTstAlgParams配置
此处进行测试参数的配置。RamTstAlgParams可以配置测试参数相关的参数。可以配置多个测试参数。测试参数的添加步骤为:鼠标选中RamTstAlgParams—单击右键—New—RamTstAlgParams
双击RamTstAlgParams模块,打开RamTstAlgParams模块配置界面。
配置RamTstAlgorithm。
RamTstAlgorithm:该测试参数所使用的测试算法。选择MARCH算法。
配置RamTstExtNumberOfTestedCells。
RamTstExtNumberOfTestedCells:这是NUMBER_OF_TESTED_CELLS和MAX_NUMBER_OF_TESTED_CELLS可以达到的单元数的绝对最大值。
配置RamTstMaxNumberOfTestedCells。
RamTstMaxNumberOfTestedCells:可以测试的单元格数的最大值。
配置RamTstNumberOfTestedCells。
RamTstNumberOfTestedCells:每次测试时所测试的字节数大小,只能为4的倍数。可以在程序中调用API修改。
测试块配置
前台测试测试块配置
新加测试块添加步骤为:鼠标选中RamTstBlockParams—单击右键—New—RamTstBlockParams
双击RamTstBlockParams模块,打开RamTstBlockParams模块配置界面。
图 5-18 RamTstBlockParams配置界面
配置RamTstEndAddress;
RamTstEndAddress:该RAM块的结束地址。此处填写目标块结束地址0x1ffff09ff。
图 5-19 RamTstEndAddress配置界面
配置RamTstStartAddress;
RamTstStartAddress:该RAM块的起始地址。此处填写目标块起始地址0x1ffff0400。
图 5-20 RamTstStartAddress配置界面
配置RamTstFillPattern;
RamTstFillPattern:进行破坏性的测试时,测试结束后,填入RAM的 填充值。此处填写0。
图 5-21 RamTstFillPattern配置界面
配置RamTstTestPolicy;
RamTstTestPolicy:该RAM块的测试策略,破坏性还是非破坏性。此
处配置为非破坏性(RAMTEST_NON_DESTRUCTIVE)。
图 5-22 RamTstTestPolicy配置界面
配置BlockTestUseMethod;
BlockTestUseMethod:该RAM块所使用的测试方法,前台测试还是后 台测试等。此处配置为前台测试(BLOCK_TEST_USED_METHOD_FO REGROUN D)。
图 5-23 BlockTestUseMethod配置界面
后台测试测试块配置
新加测试块添加步骤为:鼠标选中RamTstBlockParams—单击右键—New—RamTstBlockParams
双击RamTstBlockParams模块,打开RamTstBlockParams模块配置界面。
图 5-25 RamTstBlockParams配置界面
配置RamTstEndAddress;
RamTstEndAddress:该RAM块的结束地址。此处填写目标块结束地址 0x200043a7。
图 5-26 RamTstEndAddress配置界面
配置RamTstStartAddress;
RamTstStartAddress:该RAM块的起始地址。此处填写目标块起始地址0x20000000。
图 5-27 RamTstStartAddress配置界面
配置RamTstFillPattern;
RamTstFillPattern:进行破坏性的测试时,测试结束后,填入RAM的 填充值。此处填写0。
图 5-28 RamTstFillPattern配置界面
配置RamTstTestPolicy;
RamTstTestPolicy:该RAM块的测试策略,破坏性还是非破坏性。
此处配置为非破坏性(RAMTEST_NON_DESTRUCTIVE)。
图 5-29 RamTstTestPolicy配置界面
配置BlockTestUseMethod;
BlockTestUseMethod:该RAM块所使用的测试方法,前台测试还是后 台测试等。此处配置为后台测试(BLOCK_TEST_USED_METHOD_BA CKGROUND)。
图 5-30 BlockTestUseMethod配置界面
RamTstDemEventParameterRefs配置
添加RamTstDemEventParameterRefs,鼠标选中RamTstDemEventParameterRefs—单击右键—New—RamTstDemEventParameterRefs。
双击RamTstAlgParams模块,打开RamTstAlgParams模块配置界面。
图 5-32 RamTstDemEventParameterRefs配置界面
配置RAMTST_MAIN_RAM_FAILURE,将RAMTST_MAIN_RAM_FAILURE勾选上,并从下拉框中选择对应的Dem配置项。
图 5-33 RAMTST_MAIN_RAM_FAILURE配置界面
配置RAMTST_PART_RAM_FAILURE,将RAMTST_PART_RAM_FAILURE勾选上,并从下拉框中选择对应的Dem配置项。
图 5-34 RAMTST_PART_RAM_FAILURE配置界面
配置RAMTST_RUNFL_RAM_FAILURE,将RAMTST_RUNFL_RAM_FAILURE勾选上,并从下拉框中选择对应的Dem配置项。
图 5-35 RAMTST_RUNFL_RAM_FAILURE配置界面
源代码集成
项目交付给用户的工程结构如下:
Config目录,这个目录用来存放配置工具生成的配置文件,RamTest有关的配置文件放在BSW_Config文件夹中。
BSW目录,存放模块相关的源代码。可以看到BSW目录下各个文件夹下是各个模块的源代码。
RamTest源代码集成步骤如下:
将5.2章节中ORIENTAIS Configurator生成的配置文件复制到BSW_Config文件夹中。
将项目提供的协议栈源代码文件复制到BSW/Memory/RamTst文件夹中。
在集成时,需要在链接文件里面将RAM进行分区规划。划分为存放RamTst模块本地变量区域、暂存RAM安全区域、被测RAM区域。将RAMTEST自身数据放在RamTst模块本地变量区域,和被测区域分开。并将栈区(OS启动之前自身的堆栈)与其他区域分开。如下图所示:
用户须确保各分配的RAM区域不会被其他变量使用。
链接文件修改如下所示:
同时,需要在MemMap.h文件里面启用内存管理,如下所示:
RamTest调度集成
RamTest调度集成步骤如下:
RamTest调度集成,需要逐一排查并实现所罗列的问题,以避免集成出现差错。
编译链接代码,将生成的elf文件烧写进芯片。
初始化和前台测试代码如下。
注意 : 本示例中,CanTsyn协议栈初始化的代码和启动通信的代码置于EcuM_Callout_Stubs.c文件,并不代表其他项目同样适用于将其置于EcuM_Callout_Stubs.c文件中。
#include “Fls.h”
RamTest协议栈相关模块头文件
#include “RamTst.h”
TASK(EcuM_AL_DriverInitOne)
{
RamTst_Init(&RamTstConfigRoot);
RamTst_RunFullTest();
RamTst_TestResultType RamTstResult = RamTst_GetTestResult();
}
验证结果
验证前台测试
将工程编译通过后,使用调试工具进行调试,当执行RamTst_RunFullTest()后,再调用RamTst_GetTestResult()获取结果,编译下载仿真时,在获取结果后打断点,可以看见返回测试结果为OK。
验证后台测试
将工程编译通过后,使用调试工具进行调试,周期调用RamTst_MainFunction(),编译下载仿真时,当后台测试完成时,会调用RamTst_TestCompletedNotification()回调函数,在回调函数里面再调用RamTst_GetTestResult()获取结果,可以看见返回测试结果为OK。