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 Studio配置工具。
RamTest各配置模块的功能介绍,参见表 RamTest各配置模块介绍。
使用RamTest源码和配置工具,进行RamTest的集成的步骤。
模块名 |
功能 |
RamTest |
RamTest主要对RAM单元的物理健康状况进行测试 |
步骤 |
操作 |
说明 |
1 |
ORIENTAIS Stuido配置工具工程搭建和RamTest模块加载 |
若配置工具已经搭建,则仅需进行RamTest模块的加载操作。 |
2 |
模块配置及配置文件生成 |
NA |
3 |
代码集成 |
现有工程、RamTest源代码和配置生成文件的集成。 |
4 |
验证测试 |
NA |
Note
RamTest集成之前,用户须确保已经有基础工程,且相关的其他协议栈能正常工作。
新建ORIENTAIS Stuido配置工程及模块加载¶
安装ORIENTAIS Studio软件后,双击软件图标打开软件。
图 软件主界面
菜单栏File🡪New🡪Project,新建工程。
图 新建工程-1
在弹出的新建窗口中选择Autosar下的 [BSW Project],选择Next。
图 新建工程-2
在弹出的窗口中输入工程名,选择Finish。
图 新建工程-3
在弹出的窗口中选择Yes。
图 完成新建工程
选择[Bsw_Builder],右键单击,选择New ECU Configuration。
图 新建ECU
在弹出的窗口中输入ECU名,然后选择Next。
图 选择芯片平台
在弹出的窗口中勾选需添加的模块,点击Finish。
图 完成ECU配置
新建工程如下所示,步骤⑧中添加的模块已经被加入到工程中。
图 工程列表界面
模块配置及生产代码¶
模块配置¶
功能集成¶
代码集成¶
RamTest代码包括两部分:项目提供的RamTest源码和ORIENTAIS Studio配置生成代码。
用户须将RamTest源码和章节(模块配置)生成的源代码添加到集成开发工具的对应文件夹。RamTest集成的文件结构,见章节(RamTstDemEventParameterRefs配置)。
Note
RamTest集成之前,用户须确保已经有基础工程,且相关的其他协议栈能正常工作。
集成注意事项¶
对于集成过程中,RamTest特殊要求和用户经常出现的问题,归类总结形成。用户需逐一排查表中的约束项,以避免集成问题出现。
编号 |
类别 |
约束限制 |
1 |
堆栈 |
用户需确保为任务堆栈和中断堆栈分配足够的堆栈空间。 |
2 |
头文件 |
|
3 |
初始化 |
RamTest的初始化函数为RamTst_Init |
4 |
周期函数 |
在后台测试时,RamTst_MainFunction需要被周期性任务函数调用。 |
5 |
前台测试 |
如要进行前台测试,建议在MCU初始化之后进行或下电之前进行。 |
6 |
软件依赖 |
|
集成示例¶
本章节向用户展示RamTest的集成过程。用户可以据此熟悉RamTest配置工具的配置过程,以及如何应用配置工具生成的配置文件。
本章节先完成基本RamTest配置,使得工程可以编译通过,并实现Ram测试,然后根据具体需求服务进行添加或修改。
Note
本示例不代表用户的实际配置情况,用户需要根据自己的实际需求,决定各个参数的配置。
集成目标¶
通过搭建基础工程,实现 RAM 测试功能。具体测试功能如下:
模块的配置¶
新建配置工程及模块加载操作,请参考本文档章节(模块配置及生产代码)。生成代码过程请参考章节(模块配置及生产代码)。
RamTstCommon配置¶
在此处进行一些函数是否使用的配置、安全暂存区域和RamTest模块本地变量区域配置。
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:预处理器开关,以禁用/启用测试失败通知。
TimOutEnable:超时开关,以禁用/启用超时功能。
TimeOutValueFgnd:前台测试超时时间。
TimeOutValueBgnd:后台测试超时时间。
RamTst模块本地变量区域配置。分为起始地址和结束地址。
RamTstAlgorithms配置¶
此处进行RamTest所使用的测试算法配置。
RamTstAbrahamTestSelected: 预处理器开关,以禁用/启用算法Abraham,。
RamTstCheckerboardTestSelected: 预处理器开关,以禁用/启用算法Checkerboard。
RamTstGalpatTestSelected: 预处理器开关,以禁用/启用算法Galpat。
RamTstMarchTestSelected: 预处理器开关,以禁用/启用算法March。
RamTstTranspGalpatTestSelected: 预处理器开关,以禁用/启用算法TranspGalpat。
RamTstWalkPathTestSelected: 预处理器开关,以禁用/启用算法WalkPath。
RamTstConfigParams配置¶
此处进行RamTest配置参数的配置。
双击RamTstConfigParams模块,打开RamTstConfigParams模块配置界面。
图 RamTstConfigParams配置
配置RamTstDefaultAlgParamsId,此处填1;
RamTstDefaultAlgParamsId:默认的测试参数ID配置。
图 RamTstDefaultAlgParamsId配置
配置RamTstMinNumberOfTestedCells;
RamTstMinNumberOfTestedCells:配置进行测试时最小测试单元字节数。RamTstMinNumberOfTestedCells:进行测试时的最小测试单元字节数。
图 RamTstMinNumberOfTestedCells配置
配置RamTstTestCompletedNotification;
RamTstTestCompletedNotification:测试完成回调函数,在完成RAM测试时调用。RamTstTestCompletedNotification:测试完成回调函数,在完成RAM测试后,没有检测到错误,会调用这个函数。
图 RamTstTestCompletedNotification配置
配置RamTstTestErrorNotification;
RamTstTestErrorNotification:测试到错误时的回调函数,在检测到RAM错误时,会调用这个函数。RamTstTestErrorNotification:测试到错误时的回调函数,在检测到RAM错误时,会调用这个函数。
图 RamTstTestErrorNotification配置
RamTstAlgParams配置¶
双击RamTstAlgParams模块,打开RamTstAlgParams模块配置界面。
图 RamTstAlgParams配置界面
配置RamTstAlgorithm。
RamTstAlgorithm:该测试参数所使用的测试算法。选择MARCH算法。
图 RamTstAlgorithm配置界面
配置RamTstExtNumberOfTestedCells。
RamTstExtNumberOfTestedCells:这是NUMBER_OF_TESTED_CELLS和MAX_NUMBER_OF_TESTED_CELLS可以达到的单元数的绝对最大值。
图 RamTstExtNumberOfTestedCells配置界面
配置RamTstMaxNumberOfTestedCells。
RamTstMaxNumberOfTestedCells:可以测试的单元格数的最大值。
图 RamTstMaxNumberOfTestedCells配置界面
配置RamTstNumberOfTestedCells。
RamTstNumberOfTestedCells:每次测试时所测试的字节数大小,只能为4的倍数。可以在程序中调用API修改。
图 RamTstNumberOfTestedCells配置界面
测试块配置¶
前台测试测试块配置¶
新加测试块添加步骤为:鼠标选中RamTstBlockParams—单击右键—New—RamTstBlockParams
图 RamTstBlockParams添加
双击RamTstBlockParams模块,打开RamTstBlockParams模块配置界面。
图RamTstBlockParams配置界面
配置RamTstEndAddress;
RamTstEndAddress:该RAM块的结束地址。此处填写目标块结束地址0x1ffff09ff。
图 RamTstEndAddress配置界面
配置RamTstStartAddress;
RamTstStartAddress:该RAM块的起始地址。此处填写目标块起始地址0x1ffff0400。
图 RamTstStartAddress配置界面
配置RamTstFillPattern;
RamTstFillPattern:进行破坏性的测试时,测试结束后,填入RAM的填充值。此处填写0。
图 RamTstFillPattern配置界面
配置RamTstTestPolicy;
RamTstTestPolicy:该RAM块的测试策略,破坏性还是非破坏性。此
处配置为非破坏性(RAMTEST_NON_DESTRUCTIVE)。
图 RamTstTestPolicy配置界面
配置BlockTestUseMethod;
BlockTestUseMethod:该RAM块所使用的测试方法,前台测试还是后台测试等。此处配置为前台测试(BLOCK_TEST_USED_METHOD_FO REGROUN D)。
图 BlockTestUseMethod配置界面
后台测试测试块配置¶
新加测试块添加步骤为:鼠标选中RamTstBlockParams—单击右键—New—RamTstBlockParams
图 RamTstBlockParams添加
双击RamTstBlockParams模块,打开RamTstBlockParams模块配置界面。
图 RamTstBlockParams配置界面
配置RamTstEndAddress;
RamTstEndAddress:该RAM块的结束地址。此处填写目标块结束地址0x200043a7。
图 RamTstEndAddress配置界面
配置RamTstStartAddress;
RamTstStartAddress:该RAM块的起始地址。此处填写目标块起始地址0x20000000。
图 RamTstStartAddress配置界面
配置RamTstFillPattern;
RamTstFillPattern:进行破坏性的测试时,测试结束后,填入RAM的填充值。此处填写0。
图 RamTstFillPattern配置界面
配置RamTstTestPolicy;
RamTstTestPolicy:该RAM块的测试策略,破坏性还是非破坏性。此处配置为非破坏性(RAMTEST_NON_DESTRUCTIVE)。
图 RamTstTestPolicy配置界面
配置BlockTestUseMethod;
BlockTestUseMethod:该RAM块所使用的测试方法,前台测试还是后台测试等。此处配置为后台测试(BLOCK_TEST_USED_METHOD_BA CKGROUND)。
图 BlockTestUseMethod配置界面
RamTstDemEventParameterRefs配置¶
添加RamTstDemEventParameterRefs,鼠标选中RamTstDemEventParameterRefs—单击右键—New—RamTstDemEventParameterRefs。
图 RamTstDemEventParameterRefs添加
双击RamTstAlgParams模块,打开RamTstAlgParams模块配置界面。
图 RamTstDemEventParameterRefs配置界面
配置RAMTST_MAIN_RAM_FAILURE,将RAMTST_MAIN_RAM_FAILURE勾选上,并从下拉框中选择对应的Dem配置项。
图 RAMTST_MAIN_RAM_FAILURE配置界面
配置RAMTST_PART_RAM_FAILURE,将RAMTST_PART_RAM_FAILURE勾选上,并从下拉框中选择对应的Dem配置项。
图 RAMTST_PART_RAM_FAILURE配置界面
配置RAMTST_RUNFL_RAM_FAILURE,将RAMTST_RUNFL_RAM_FAILURE勾选上,并从下拉框中选择对应的Dem配置项。
图 RAMTST_RUNFL_RAM_FAILURE配置界面
源代码集成¶
项目交付给用户的工程结构如下:
Config目录,这个目录用来存放配置工具生成的配置文件,RamTest有关的配置文件放在BSW_Config文件夹中。
BSW目录,存放模块相关的源代码。可以看到BSW目录下各个文件夹下是各个模块的源代码。
RamTest源代码集成步骤如下:
将章节(模块的配置)中ORIENTAIS Studio生成的配置文件复制到BSW_Config文件夹中。
将项目提供的协议栈源代码文件复制到BSW/Memory/RamTst文件夹中。
在集成时,需要在链接文件里面将RAM进行分区规划。划分为存放RamTst模块本地变量区域、被测RAM区域。将RAMTEST自身数据放在RamTst模块本地变量区域,和被测区域分开。并将栈区(OS启动之前自身的堆栈)与其他区域分开。如下图所示:
用户须确保各分配的RAM区域不会被其他变量使用。
链接文件修改如下所示:
同时,需要在MemMap.h文件里面启用内存管理,如下所示:
RamTest调度集成¶
RamTest调度集成步骤如下:
RamTest调度集成,需要逐一排查并实现所罗列的问题,以避免集成出现差错。
编译链接代码,将生成的elf文件烧写进芯片。
初始化和前台测试代码如下。
Note
本示例中,RamTst协议栈初始化的代码和启动通信的代码置于EcuM_Callout_Stubs.c文件,并不代表其他项目同样适用于将其置于EcuM_Callout_Stubs.c文件中。
1#include "Fls.h"
2// RamTest协议栈相关模块头文件
3#include "RamTst.h"
4
5// 定义EcuM_AL_DriverInitOne任务
6TASK(EcuM_AL_DriverInitOne)
7{
8 RamTst_Init(&RamTstConfigRoot); // 初始化RamTest模块,传入配置参数
9 RamTst_RunFullTest(); // 执行完整的RAM测试
10
11 // 获取测试结果
12 RamTst_TestResultType RamTstResult = RamTst_GetTestResult();
13}
验证结果¶
验证前台测试¶
将工程编译通过后,使用调试工具进行调试,当执行RamTst_RunFullTest()后,再调用RamTst_GetTestResult()获取结果,编译下载仿真时,在获取结果后打断点,可以看见返回测试结果为OK。
验证后台测试¶
将工程编译通过后,使用调试工具进行调试,周期调用RamTst_MainFunction(),编译下载仿真时,当后台测试完成时,会调用RamTst_TestCompletedNotification()回调函数,在回调函数里面再调用RamTst_GetTestResult()获取结果,可以看见返回测试结果为OK。