本文介绍如何使用 S32DS 进行 AUTOSAR MCAL 工程的编译和调试,重点在于将 EB 配置生成的 MCAL 代码集成到 S32DS 中。
虽然配置过程较为繁琐,实操过一遍就会熟悉整个工程的框架。以后每次在 EB 中更新配置,生成代码的文件夹已经集成在 S32DS 工程中,无需手动拷贝。而且再次新建工程可以此为模版,修改个别路径和链接位置即可,十分方便。希望能够帮助到有此需求的朋友们,也是在这里作下笔记避免自己遗忘。
一、 软件安装列表
全篇以 NXP S32K344 为例建立工程,使用到的软件及对应版本如下:
- EB Tresos Studio 29.0.0
- MCAL 配置工具
- SW32K3_S32M27x_RTD_R21-11_4.0.0_P19_D2403.exe
- S32K3 MCAL RTD 安装包,使用 EB Tresos Studio 进行配置
- S32 Design Studio 3.5
- NXP S32 系列的集成开发环境(IDE),可用于工程创建、配置、编译、调试等
- 5.9_D2312.zip
- S32DS 升级包第 9 版本
- 5.8_D2311.zip
- 适用于S32K3xx 的 RTD 基础开发包
安装教程请移步其他博文,本文直接跳过,开始建立工程。
二、 新建项目
- 打开 S32DS V3.5 版本,菜单栏选择“File -> New -> S32DS Application Project”
- 输入项目名称
- 选择芯片型号,使用 S32K344
- 选择编译器版本,建议选择 GCC v10.2
- 设置 FPU,选择“Hardware:-mfloat-abi=hard”
我们需要在工程中使用 MCAL 而不是 SDK,所以 SDKs 栏保持为空,选择完成后点击“finish”。对应的步骤如下图所示:
三、 删除和添加文件
建立工程后,生成了一些启动代码、链接文件、头文件和 main.c 文件等。
- 删除位于“Project_Settings”中的“Startup_Code”和“Linker_Files”文件夹。我们使用 MCAL 自己的链接文件和启动文件,它们分别位于“{MCAL_PLUGIN_PATH}\platform_TS_T4xxx\build_files\gcc” 和“{MCAL_PLUGIN_PATH}\Platform_TS_T4xxx\src\m7”路径中。
- 删除“include”文件夹,我们使用 MCAL 的头文件,在“{MCAL_PLUGIN_PATH}\BaseNXP_Ts_T4xxx\header”路径中。
- 新建 Generate、Mcal_Plugins、 Tresos_Project 三个空文件夹,分别用来存放 EB Tresos 配置生成的代码源文件、S32K3 MCAL 源文件和 EB tresos 工程。
四、配置 MCAL 文件链接和资源过滤器
- 在 “Mcal_Plugins”中新建文件夹“Link_Source”,名称可自定义。
- 点击“Advanced”将 “Link_Source”文件夹链接到 S32K3_RTD_MCAL 包,版本自选,示例为 0.0 P19 版本,如果是按照默认路径安装的话,它的路径为“C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0_P19\eclipse\plugins”
- S32DS 启动时,会刷新所有项目的目录和文件结构。我们启用资源过滤器来忽略不需要刷新的目录和文件,避免浪费大量的时间。在“Resource Filters”中点击“Add Filter…”设置过滤规则,
- 依次添加文件或文件夹,包括下图 7 项“include only”和 4 项“Exclude all”,注意蓝字的三项要勾选右下角的“regular expression”
- 重复第 3、4 步直到完成,添加过后的“Resource Filters”如橘色框所示
五、添加 MCAL 头文件和源文件路径
- 右键工程名,选择“Properties -> Build Variables”并添加两项变量
- “MCAL_MODULE_NAME_SUFFIX” 字段 “_TS_T40D34M40I0R0”
- “MCAL_PLUGIN_PATH” 路径 “C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0_P19\eclipse\plugins”
这样配置的好处是,如果S32K3 RTD MCAL 软件包有版本更新,在此处修改路径和模块后缀即可。
2. 在“Properties->Settings->Standard S32DS C Compiler->includes”中依次添加头文件路径,将工程链接到 S32K3_RTD_MCAL 软件包所有模块的头文件,记得 EB tresos 配置生成的头文件路径 "${ProjDirPath}/Generate/include" 也需要添加。
最好使用相对路径(必须是 Linux 风格的斜杠/反斜杠)例如:
"${MCAL_PLUGIN_PATH}/Adc${MCAL_MODULE_NAME_SUFFIX}/include" 也就是“C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0_P19\eclipse\plugins\Adc_TS_T40D34M40I0R0\include”。
示例的 S32K3_RTD_MCAL 软件包是 AUTOSAR 4.7 版本,比 4.4 版本增加了 Memory 相关的模块,几处模块名也有差异,包含的模块以你下载的软件包版本为准。大家可以从下方列表中直接复制(请注意 Base 和 Platform 模块的特殊性),目前只能一条一条添加,如果各位有任何好的办法,欢迎在博文下方留言交流讨论。
"${ProjDirPath}/Generate/include" "${MCAL_PLUGIN_PATH}/Adc${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Ae${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/BaseNXP${MCAL_MODULE_NAME_SUFFIX}/header" "${MCAL_PLUGIN_PATH}/BaseNXP${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Can_43_FLEXCAN${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/CanIf${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/CanTrcv_43_AE${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Crc${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/CryIf${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Crypto_43_HSE${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Csm${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Dem${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Det${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Dio${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Dpga${MCAL_MODULE_NAME_SUFFIX}/include" |
"${MCAL_PLUGIN_PATH}/EcuM${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Eth_43_GMAC${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/EthIf${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/EthSwt${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/EthTrcv${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Fee${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Gdu${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Gpt${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/I2c${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/I2s${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Icu${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Lin_43_LPUART_FLEXIO${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/LinIf${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/LinTrcv_43_AE${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Mcl${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Mcu${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Mem_43_EEP${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Mem_43_EXFLS${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Mem_43_INFLS${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/MemAcc${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/MemIf${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Ocotp${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Ocu${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Os${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Platform${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Platform${MCAL_MODULE_NAME_SUFFIX}/startup/include" "${MCAL_PLUGIN_PATH}/Port${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Pwm${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Rm${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Rte${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Sent${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Spi${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Uart${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Wdg${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/WdgIf${MCAL_MODULE_NAME_SUFFIX}/include" "${MCAL_PLUGIN_PATH}/Zipwire${MCAL_MODULE_NAME_SUFFIX}/include" |
六、配置项目参数
- 添加项目宏定义
S32K3XX S32K344 GCC USE_SW_VECTOR_MODE D_CACHE_ENABLE I_CACHE_ENABLE ENABLE_FPU |
2. 设置优化等级并添加 Other optimization flags 字段:
-fno-short-enums -funsigned-char -fomit-frame-pointer -fstack-usage
3. 设置 gcc 链接文件,路径是
"${MCAL_PLUGIN_PATH}/Platform${MCAL_MODULE_NAME_SUFFIX}/build_files/gcc/linker_flash_s32k344.ld",切记勾选“Do not use standard start files”
4. 其他杂项可根据你的需求进行设置。
七、新建 EB 工程
- 打开 EB tresos 新建工程,取消勾选默认路径,选择之前在 S32DS 建立的工程目录中的 Tresos_Project 文件夹,注意这里封装了两层。
- 输入 ECU ID,目标是 S32K3xx,将默认生成代码的路径改成“..\..\Generate”,链接到之前在 S32DS 工程中建立的 Generate 文件夹。
- 勾选“在列表中添加最小数量的子元素”,创建工程阶段我们先不添加任何模块,直接点“Finish”。
- 如果前面忘记配置生成路径,也可以在建立好工程之后,右键工程名选择“Properties”并修改“Generation Path”。
八、生成配置代码并编译调试
本文重点不在 EB 配置 MCAL,下面我们只导入 DIO 例程中现有的 MCAL配置,实现 S32DS 对 MCAL 工程的编译调试。
1. 用 Dio 模块 MCAL 例程中的c 文件直接替换掉 S32DS 中工程的 main.c 文件。默认目录如下:
“C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0_P19\eclipse\plugins\Dio_TS_T40D34M40I0R0\examples\EBT\S32K3XX\Dio_Example_S32K344\src” “E:\S32DSws\workspaceS32DS.3.5\Mcal_Dio_S32K344_470_400\src”
2. XDM 文件储存了已配置好的各模块参数。用 Dio 模块 MCAL 例程中的 XDM 文件直接替换掉刚才第 7 小节新建 EB 工程中的 XDM 文件。默认目录如下:
“C:\NXP\SW32K3_S32M27x_RTD_R21- 11_4.0.0_P19\eclipse\plugins\Dio_TS_T40D34M40I0R0\examples\EBT\S32K3XX\Dio_Example_S32K344\TresosProject\Dio_Example_S32K344\config”
“E:\S32DSws\workspaceS32DS.3.5\Mcal_Dio_S32K344_470_400\Tresos_Project\Mcal_Dio_S32K344_470_200\config”
3. 向 EB 工程中添加 MCAL 模块,注意要与 S32DS 工程链接的 S32K3_RTD_MCAL 软件包版本一致。由于相关的 xdm 文件已经导入,添加的 MCAL 模块就是已经配置好的模块。
4. 右键工程名,选择“Generate Project”,生成的配置代码会放在“Generate”文件夹中。
5. 接下来下面回到 S32DS 工程,如果操作步骤是完全按照教程来的,“Generate”和“Mcal_Plugins”文件夹仍会处于禁用状态,选中文件夹并右键,然后“Build path -> Add to -> Debug_FLASH”启用文件夹。我们还需要禁用未使用的模块,否则会导致很多编译错误,选择模块文件夹(可以多选)并右键,然后“Build path -> Remove from -> Debug_FLASH”。
6. 最后在c 中注释掉两行代码“#include "check_example.h"”和“Exit_Example(TRUE);”,现在程序可以正常编译烧录,一个可使用 S32DS 调试的 EB MCAL 工程就创建完成了。
本章的所有内容就到这里,获取更多资讯,或进一步交流 NXP S32K3 & MCAL 的技术问题,欢迎联系世平集团 ATU 部门 <atu.sh@wpi-group.com>。
了解更多汽车相关应用知识!欢迎关注大大通博主:汽车大牛
九、参考资料
[1] S32K344 MCAL Integrate with S32DS, Stephen Du
[2] S32K Real Time Drivers/MCAL Overview, NXP DFAE Training PPT
登录大大通,了解更多详情,解锁1500+完整应用方案,更有大联大700+FAE在线答疑解惑!