S32DS集成MCAL
简介:MCU 为 NXP-S32K344;RTD MCAL 版本为
SW32K3_RTD_R21-11_4.0.0_HF_02
;S32DS 3.5;EB Tresos 29.0
1 安装 MCAL
下载此版本的 RTD:S32K3_S32M27x Real-Time Drivers AUTOSAR R21-11 Version 4.0.0 HF02
下载并安装此版本的 MCAL:
这里,我的安装后的 MCAL 的路径如下:
1.1 MCAL 的配置
复制 MCAL 路径下的所有模块到一个临时文件夹中进行下一步处理,我这里就是复制 D:\NXP\exe\SW32K3_RTD_R21-11_4.0.0_HF_02\eclipse\plugins
下的所有文件夹到一个临时文件夹 plugins_handle
中:
对各模块的文件夹进行重命名,更好看些,使用如下 python 脚本进行重命名:
1 |
|
使用方法:在临时文件夹(D:\NXP\exe\plugins_handle)中新建并复制上面👆代码到
rename.py
中,然后运行
上面这三个文件夹需要手动重命名为如下(脚本已自动忽略处理这三个文件夹):
接下来,删除每个模块文件夹中除了 src 和 include 之外的所有文件,其中 BaseNXP、Platform 这两个模块需要手动处理,使用如下脚本进行删除:
1 |
|
脚本已忽略处理 BaseNXP、Platform 模块,需要手动修改:
BaseNXP 保留如下三个文件夹:
Platform 保留如下:
进一步,其中 Platform/build_files 下仅保留 gcc;Platform/startup/src/m7 下仅保留 gcc、exceptions.c、startup.c
然后,导出各模块的 include 路径,使用如下脚本:
1 |
|
此脚本会在当前运行路径下生成 path.txt 存放各模块的 include 路径
2 S32DS Project
2.1 新建 Project
新建一个空项目:
删除项目中的这三个文件夹:
新建这三个文件夹:
其中,MCAL 用来存放 MCAL 各模块驱动的源码;generate 用来存放 EB_Tresos 工具生成的代码;Tresos_Project 是 EB 项目的路径
将这三个文件夹添加到编译路径里:
复制临时文件夹中所有模块的源码到 S32DS 项目的 MCAL 文件夹中:
2.2 配置 Project
右键项目选择 Properties:
添加如下定义:
1 |
|
添加头文件,将临时文件夹下 path.txt 中的所有内容复制到此处:
选择优化选项:
-fno-short-enums -funsigned-char -fomit-frame-pointer -fstack-usage
配置链接器:
"${workspace_loc:/${ProjName}/MCAL/Platform/build_files/gcc/linker_flash_s32k344.ld}"
3 EB-Tresos Project
选择新建项目:
以官方 Dio 点灯为例,添加如下模块(具体项目中使用到了哪些模块就添加哪些模块)
参考官方示例代码,在已安装的 MCAL 路径下: SW32K3_RTD_R21-11_4.0.0_HF_02\eclipse\plugins\Dio_TS_T40D34M40I0R0\examples\EBT\S32K3XX\Dio_Example_S32K344\TresosProject\Dio_Example_S32K344
复制 SW32K3_RTD_R21-11_4.0.0_HF_02\eclipse\plugins\Dio_TS_T40D34M40I0R0\examples\EBT\S32K3XX\Dio_Example_S32K344\TresosProject\Dio_Example_S32K344
路径下 config 文件夹下的所有文件到 S32DS 项目 Tresos_Project 下的 config 中(覆盖原文件)
然后在 EB 中生成代码:
此时,刷新 S32DS 后 generate 下就有生成的代码了:
4 编译
复制 Dio 示例代码 D:\NXP\exe\SW32K3_RTD_R21-11_4.0.0_HF_02\eclipse\plugins\Dio_TS_T40D34M40I0R0\examples\EBT\S32K3XX\Dio_Example_S32K344\src
下的 main.c 替换 S32DS 项目下 src 中的 mian.c ;
并且注释掉 #include "check_example.h"
、Exit_Example(TRUE);
先将 S32DS 项目下 MCAL 中的所有模块移除编译路径:
根据 Dio 官方示例添加所需的模块到编译路径:
接下来,就是编译处理报错:
此处报错说找不到这个 SchM_Enter_Dio_DIO_EXCLUSIVE_AREA_01
为了方便搜索,用 VSCode 打开这个 S32DS 项目:
在 VSCode 中搜索 SchM_Enter_Dio_DIO_EXCLUSIVE_AREA_01
:
可以看到,MCAL\Dio\src\Siul2_Dio_Ip.c
调用了 SchM_Enter_Dio_DIO_EXCLUSIVE_AREA_01
函数,其函数的定义是在 MCAL 的 Rte 模块中。那么就添加 MCAL/Rte 到编译路径中:
再次编译:
显然,需要添加 MCAL/Det 模块到编译路径中:
再次编译,没有错误了:
烧录测试后,LED 正常闪烁!