应用S32K3的用户在软件底层驱动上大都会选择应用Mcal,毕竟是免费的午餐嘛。虽然NXP官方免费IDE S32DS 本身就支持Mcal配置,以及程序编辑、编译、调试全开发流程,但从NXP官方了解到,S32DS后续的升级版本不准备增加导入和生成Mcal标准配置文件arxml的功能了。这就给用S32DS 来配置Mcal的工程师留下了一个坑,虽然用S32DS 来配置Mcal 免费又方便,但万一主机厂需要和Tier1间对接配置文件呢?
工程里的万一就是Bug,所以Mcal 的配置工作还得交给老搭档 EB tresos,毕竟标准工具绝对支持配置文件的导入导出,但新的问题也出现了,EB tresos来完成Mcal配置,那程序编辑、编译、调试交给谁呢?官方推荐应用Greenhill、IAR等第三方成熟IDE,但如果还想着免费午餐的话,我们就得另想办法。首先,官方是支持基于GCC的Makefile 编译,但这种方式没有IDE辅助程序编辑只适合测试,在实际项目中应用不太现实,所以我们还得找老伙计S32DS。
本文就是介绍如何把EB Tresos 配置生成 MCAL 项目集成到S32DS的工程来编辑、编译、调试软件。免费的午餐从头吃到尾,真香!
-
-
Build id: 201217 (Update 3)
-
RTD: SW32K3_RTD_4.4_2.0.0_D2203
-
GCC: NXP GCC for Arm Release version 10.2 build 1728
-
默认前提你已经正确安装了以上软件,其中RTD需要是exe安装版,并且已安装。
1. 新建项目并删除项目自带的不需要的文件,包括main.c、工程链接文件、启动文件,include文件夹,以准备添加Mcal 工程自己的链接文件、启动文件,include文件夹。
2. 复制项目用到的Mcal plugin文件夹及源文件到工程,注意需要删除文件夹内其它不需要的文件。Platform 内有工程链接文件、启动文件,需要删除适合其它工具的文件。
(1) 工程属性中添加项目inlucde 路径,每一个plugin 文件夹内保存头文件路径都需要添加。
(2) 工程属生中添加必要的宏定义
(3) 属性窗口中检查/设置芯片类型
(4) 属性窗口中设置编译器参数,多项目
以RTD 自带的Dio工程为例
1. 新建项目并删除项目自带的不需要的文件,包括main.c、工程链接文件、启动文件,include文件夹,以准备添加Mcal 工程自己的链接文件、启动文件,include文件夹。

(2) 选择芯片型号并在上方“Project name”处输入你的项目名称,以及选择编译器版本,选择9.2或以上版本,我选择的是10.2。

如果你想在控制台打印一些东西,你可以在“I/O Support”项中选择“Debugger Consoler”,否则选择“No I/O”。
对于 "FPU Support"项目, 建议你选择:Hardware:-mfloat-abi=hard。
SDKs 项保持为空,因为我们不会使用任何 SDK,而是要使用 MCAL。
“Debugger” 处根据你实际使用的设备进行选择。

(4) 点击Finish 创建项目。默认情况下,它会帮助创建启动代码、向量
表文件、链接文件、一些头文件和 main.c 文件等。

(5) 删除工程中不需要的文件夹和文件。先删除默认创建的 "include" 文件夹。
“include”文件夹中的这些头文件用于SDK代码使用,MCAL有自己的头文件(即使大多数文件相同,但仍有少数文件不同),它们位于后面路径 “MCAL\Base_Ts_T4xxx\header”。

(6) 删除位于“Project_Settings”中的“Startup_Code”文件夹和“Linker_Files”文件夹。
MCAL 将使用自己的链接文件和启动文件,它们位于以下路径:
"MCAL\Platform_TS_T4xxx\build_files\gcc" 以及
"MCAL\Platform_TS_T4xxx\src\m7"。

2. 复制项目用到的Mcal plugin文件夹及源文件到工程,注意需要删除文件夹内其它不需要的文件。Platform 内有工程链接文件、启动文件,需要删除适合其它工具的文件。
在自己的项目根路径中新建名为“MCAL”的文件夹,复制MCAL安装目录(我的目录是 C:\NXP\SW32K3_RTD_4.4_2.0.0\eclipse\plugins)下“plugin”文件夹中除jar 外所有内容到新建的Mcal 文件夹。

除Base 和 Platform 外只保留 include 和 src

其中,CANIF 、MemIf 模块只有include,只保留include;ECUC,Resource 没有include 和 src,可以把文件夹整体删除。
除了“include”和“src”文件夹以外,还需要将Base模块下的“header”

下的“build_files”文件夹和startup 文件夹

Build_files下只保留 gcc 文件夹,其它是用于其它编译器的链接文件

Startup 文件夹startup\src\m7 文件夹,删除gcc外的其它两个文件夹,是用于其它编译器的启动代码
按上面操作我们拷贝了所有模块的静态代码,这是为了方便后续程序模块添加。
同时我们需要禁用当前项目没有使用的模块,否则会导致很多编译错误。
禁用方法是在项目树中选择模块文件夹并右键单击,然后Build path -> Remove from -> Debug_FLASH。
注意:共有三个选项,Debug_FLASH、Release_FLASH、Debug_RAM。通常,项目的默认状态是Debug_FLASH,你可以从项目树中查看状态
项目应用模块可以参考EB工程中的应用模块,如下为Dio EB工程:

除EB工程看到的模块外,项目还会应用一些基础模块,以下为Dio 样例必添加的模块

(1) 现在,我们需要在项目的属性中包含所有模块的头文件路径。右键单击项目名称,单击属性。然后C/C++ Build -> Standard S32DS C Compiler -> Includes。
注意Base 模块,它需要包含两个路径。一个是“include”,另一个是“header”。
而Platform模块也是一个特殊的模块,需要设置启动头文件路径。
"${ProjDirPath}/MCAL/Dem_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Base_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Base_TS_T40D34M20I0R0/header"
"${ProjDirPath}/MCAL/Dio_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/EcuM_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Mcu_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Os_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Platform_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Platform_TS_T40D34M20I0R0/startup/include"
"${ProjDirPath}/MCAL/Port_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Rte_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Adc_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Can_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/CanIf_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Crc_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/CryIf_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Crypto_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Csm_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Det_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Eth_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/EthIf_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/EthSwt_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/EthTrcv_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Fee_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Fls_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Gpt_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/I2c_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/I2s_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/I3c_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Icu_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Lin_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/LinIf_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Mcl_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/MemIf_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Ocu_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Os_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Platform_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Pwm_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Rm_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Sent_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Spi_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Uart_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/Wdg_TS_T40D34M20I0R0/include"
"${ProjDirPath}/MCAL/WdgIf_TS_T40D34M20I0R0/include"
(2) 为项目定义必要的宏。同样在属性窗口中。如果你的调试器是PE/Multilink,并且你没有配置MPU,建议你不要定义:“I_CACHE_ENABLE”和“D_CACHE_ENABLE”。它会影响你调试。如果你打算使用 FPU,则需要在此处定义:“ENABLE_FPU”。这意味着FPU 的激活有两个条件,一个是你创建项目时的项目,你需要启用FPU;另一个条件是这个宏定义。

DISABLE_MCAL_INTERMODULE_ASR_CHECK

关于编译器参数,请参考“xxx_ReleaseNotes.pdf”。我们的文档和演示项目也参考了该文件。也许你的项目有一些特殊的要求,在这种情况下,你需要非常清楚参数是什么意思,这超出了本文档的范围。但我认为大多数设置都适用于你的项目。例如启动文件设置、链接文件设置等。

设置优化级别。这里我们设置为-Os。此级别来自 ReleaseNotes.pdf。这是一个全局设置,在实际项目中,你可以根据你的项目要求设置级别。S32DS 还支持独立设置每个单个文件的级别。其他一些参数需要在该窗口中设置。请参考下图。

关于“Other optimization flags”,你可以从以下列表中复制:
-funsigned-char -fshort-enums -fomit-frame-pointer -fstack-usage -fdump-ipa-all
设置调试级别

-ggdb3
设置警告参数:

关于“Other warning flags”,你可以从以下列表中复制:
-Wstrict-prototypes -Wundef -Werror=implicit-function-declaration -Wsign-compare

"${ProjDirPath}/MCAL/Platform_TS_T40D34M20I0R0/build_files/gcc/linker_flash_s32k344.ld"

关于“Linker flags”,你可以从以下列表中复制:
--entry=Reset_Handler -lc -lm -lgcc
(1) 链接 EB Tresos 为每个模块生成的配置文件。关于这个,我们有多种解决方案,除了链接方法。例如,你可以将生成的文件夹复制到我们的项目文件夹中。你也可以直接在 EB Tresos 中设置指定我们项目的生成路径。链接这种方法的好处是可以让两个工程保持相对独立(EB Tresos configure 项目和S32DS 项目)。

选择你的项目,展开Advances,选择Link to alter location(Linked Folder),浏览生成文件夹。默认路径在 EB Tresos配置项目下的output\generated。(我的C:\NXP\SW32K3_RTD_4.4_2.0.0\eclipse\plugins\Dio_TS_T40D34M20I0R0\examples\EBT\Dio_Example_S32K344\generate)


浏览后,单击Finish 。然后你可以在你的项目树下找到它。图标与其他文件夹不同,链接的文件夹有一个箭头图标。
建议你把EB Tresos 项目和S32DS项目放在同一个根路径下。
注意,如果使用链接方式,在新建工作区后导入项目时,不要选择“复制项目”,否则链接文件夹会报错,因为找不到路径。

添加生成文件夹下的 inlucde 文件夹到项目属性中

在 main.c 中添加你自己的代码或添加目标文件/文件夹。此处复制 样例中main.c 全部内容到工程main.c 中,删除 #include "check_example.h" 和 主循环中的Exit_Example(TRUE);
(Exit_Example 用于自动检测样例程序是否正确运行,用户不需要应用)
配置步骤繁复,很容易出现纰漏,请耐心操作。如果编译不过可以参考错误提示回头修改。
如何集成MCAL到S32DS_S32K344