【S32K 进阶之旅】 将 EB 配置生成的 MCAL 代码集成到 S32DS 中

news2024/11/25 2:54:27

本文介绍如何使用 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 基础开发包

       安装教程请移步其他博文,本文直接跳过,开始建立工程。




二、 新建项目

  1. 打开 S32DS V3.5 版本,菜单栏选择“File -> New -> S32DS Application Project”
  2. 输入项目名称
  3. 选择芯片型号,使用 S32K344
  4. 选择编译器版本,建议选择 GCC v10.2
  5. 设置 FPU,选择“Hardware:-mfloat-abi=hard”

我们需要在工程中使用 MCAL 而不是 SDK,所以 SDKs 栏保持为空,选择完成后点击“finish”。对应的步骤如下图所示:





 
三、 删除和添加文件

建立工程后,生成了一些启动代码、链接文件、头文件和 main.c 文件等。

  1. 删除位于“Project_Settings”中的“Startup_Code”和“Linker_Files”文件夹。我们使用 MCAL 自己的链接文件和启动文件,它们分别位于“{MCAL_PLUGIN_PATH}\platform_TS_T4xxx\build_files\gcc” 和“{MCAL_PLUGIN_PATH}\Platform_TS_T4xxx\src\m7”路径中。
  2. 删除“include”文件夹,我们使用 MCAL 的头文件,在“{MCAL_PLUGIN_PATH}\BaseNXP_Ts_T4xxx\header”路径中。
  3. 新建 Generate、Mcal_Plugins、 Tresos_Project 三个空文件夹,分别用来存放 EB Tresos 配置生成的代码源文件、S32K3 MCAL 源文件和 EB tresos 工程。

 

四、
配置 MCAL 文件链接和资源过滤器

  1. 在 “Mcal_Plugins”中新建文件夹“Link_Source”,名称可自定义。
  2. 点击“Advanced”将 “Link_Source”文件夹链接到 S32K3_RTD_MCAL 包,版本自选,示例为 0.0 P19 版本,如果是按照默认路径安装的话,它的路径为“C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0_P19\eclipse\plugins”
  3. S32DS 启动时,会刷新所有项目的目录和文件结构。我们启用资源过滤器来忽略不需要刷新的目录和文件,避免浪费大量的时间。在“Resource Filters”中点击“Add Filter…”设置过滤规则,
  4. 依次添加文件或文件夹,包括下图 7 项“include only”和 4 项“Exclude all”,注意蓝字的三项要勾选右下角的“regular expression”
  5. 重复第 3、4 步直到完成,添加过后的“Resource Filters”如橘色框所示


 
五、
添加 MCAL 头文件和源文件路径

  1. 右键工程名,选择“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"

 


六、
配置项目参数

  1. 添加项目宏定义

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 工程

  1. 打开 EB tresos 新建工程,取消勾选默认路径,选择之前在 S32DS 建立的工程目录中的 Tresos_Project 文件夹,注意这里封装了两层。
  2. 输入 ECU ID,目标是 S32K3xx,将默认生成代码的路径改成“..\..\Generate”,链接到之前在 S32DS 工程中建立的 Generate 文件夹。
  3. 勾选“在列表中添加最小数量的子元素”,创建工程阶段我们先不添加任何模块,直接点“Finish”。
  4. 如果前面忘记配置生成路径,也可以在建立好工程之后,右键工程名选择“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在线答疑解惑!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1833125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Selenium+Pytest自动化测试框架能碰撞出什么样的火花

前言 selenium自动化 pytest测试框架 本章你需要 一定的python基础——至少明白类与对象&#xff0c;封装继承 一定的selenium基础——本篇不讲selenium&#xff0c;不会的可以自己去看selenium中文翻译网 一、测试框架简介 测试框架有什么优点呢&#xff1a; 代码复用率高…

从多线程设计模式到对 CompletableFuture 的应用

大家好&#xff0c;我是 方圆。最近在开发 延保服务 频道页时&#xff0c;为了提高查询效率&#xff0c;使用到了多线程技术。为了对多线程方案设计有更加充分的了解&#xff0c;在业余时间读完了《图解 Java 多线程设计模式》这本书&#xff0c;觉得收获良多。本篇文章将介绍其…

《C++ Primer》导学系列:第 4 章 - 表达式

4.1 基础 4.1.1 基本概念 组合运算符和运算对象 组合运算符是指将两个或多个操作数结合在一起进行运算的符号。在C中&#xff0c;常见的组合运算符包括算术运算符&#xff08;如, -, *, /, %&#xff09;、关系运算符&#xff08;如<, >, <, >, , !&#xff09;…

docker-compose jira、bugzilla、zentao

参见文章&#xff0c;这里是对之前的内容进行了改动&#xff0c;主要讲怎么将zentao容器融入到已有的docker-compose.yml中 一、zentao镜像 从官网上拉取&#xff1a;https://hub.docker.com/r/easysoft/zentao/tags 可以选择自己想要的版本&#xff0c;这里我选择的是开源版…

工厂物料管理系统(数据库课设)

1.课设要求描述 ●实现物料的分类管理; ●实现部门和员工信息管理; ●实现物料的入库和领用管理; ●实现物料的转仓管理; ●创建触发器&#xff0c;实现物料入库和领用时相应物料库存的自动更新; ●创建触发器&#xff0c;实现转仓时转入仓库物料增加、转出仓库物料减少…

线性卷积(相关)和圆周卷积(相关)以及FFT之间的关系(AEC举例)

时域自适应滤波算法中的线性卷积和线性相关运算量较大&#xff0c;导致计算复杂度升高&#xff0c;我们更愿意把这两个信号变换到频域&#xff0c;通过频域相乘的方式来取代时域复杂度相当高的卷积或相关运算。 预备知识&#xff1a;线性卷积&#xff08;相关&#xff09;和圆…

单一管理平台 - Enterprise Global Console

大约三年前&#xff0c;当我们向客户和社区推出控制台时&#xff0c;MinIO 的世界发生了变化。这是可访问性的巨大飞跃。可靠的 CLI 和 MC 命令很快让位于我们新的基于浏览器的 GUI 的速度和直观可用性。对于开发人员和企业 IT 管理员来说&#xff0c;这是一个游戏规则的改变者…

单片机建立自己的库文件(4)

文章目录 前言一、新建自己的外设文件夹1.新建外设文件夹&#xff0c;做项目好项目文件管理2.将之前写的.c .h 文件添加到文件夹中 二、在软件中添加项目 .c文件2.1 编译工程保证没问题2. 修改项目列表下的名称 三、在软件项目中添加 .h文件路径四、实际使用测试总结 前言 提示…

使用 C# 进行面向对象编程:第 10 部分

封装和抽象之间的区别 对于 OOP 初学者来说&#xff0c;封装和抽象之间存在非常基本的区别。他们可能会对此感到困惑。但如果你详细了解这两个主题&#xff0c;就会发现它们之间存在巨大差异。 抽象意味着向用户隐藏不必要的数据。用户只需要所需的功能或根据其需求的输出。例…

遵循法规,科学检测:可燃气体报警器多久检测一次?

在工业生产和日常生活中&#xff0c;可燃气体报警器作为一种重要的安全设备&#xff0c;能够实时监测并预警潜在的可燃气体泄漏风险&#xff0c;对于防范火灾和爆炸事故至关重要。 在这篇文章中&#xff0c;佰德将围绕可燃气体报警器的检测频率展开探讨&#xff0c;包括其功能…

基于WPF技术的换热站智能监控系统15--实时读取PLC数据

1、创建PLC实时数据 1、添加数据块 2、创建6个变量 用来表示水泵1和水泵2的参数&#xff0c;可以根据现场实际情况添加更多的变量参数 3、设置块属性并编译 4、下载该程序到PLC中 5、添加监控表 2、读取设备数据 S7协议下的tcp直接通讯&#xff0c;配置简单&#xff0c;一般P…

大模型泡沫退去,谁能活到下半场?

前言 从今年3月开始&#xff0c;国内企业纷纷下场大模型&#xff0c;铆足劲秀肌肉&#xff0c;如今转向垂直行业淘金&#xff0c;试图争霸行业大模型。我们的心态也逐渐从看乐子&#xff0c;到严肃讨论。 在人工智能的世界&#xff0c;我们经历了众多的概念游戏&#xff0c;在…

泛微开发修炼之旅--18泛微OA节点后操作代码自动退回流程的代码示例

文章链接&#xff1a;17泛微OA节点后操作代码自动退回流程的代码示例

短视频压缩与编码技术在短剧APP小程序开发中的应用

在短剧APP小程序开发中&#xff0c;短视频压缩与编码技术是实现高效视频处理的关键。本文将对这两项技术在短剧APP中的应用进行深入分析。 一、短视频压缩技术的重要性 节省存储空间&#xff1a;通过压缩技术&#xff0c;可以减小视频文件的大小&#xff0c;从而节省服务器和用…

【普中】基于51单片机的电子秒表数码管显示( proteus仿真+程序+设计报告+讲解视频)

这里写目录标题 设计资料内容清单&&下载链接资料下载链接&#xff1a;讲解视频&#xff1a;1.主要功能&#xff1a;2.仿真3. 程序代码4. 设计报告 【普中】基于51单片机的电子秒表数码管显示 ( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus8.16(有低版…

8.12 矢量图层面要素单一符号使用一(简单填充)

文章目录 前言简单填充&#xff08;Simple fill&#xff09;QGis设置面符号为简单填充&#xff08;Simple fill&#xff09;二次开发代码实现简单填充&#xff08;Simple fill&#xff09; 总结 前言 本章介绍矢量图层线要素单一符号中简单填充&#xff08;Simple fill&#x…

玩转nRF52840-DK开发套件(1)

Nordic Semiconductor nRF52840开发套件 (nRF52840-DK) 是一款采用nRF52840多协议SoC&#xff08;片上系统&#xff09;的多功能单板开发工具&#xff0c;适用于蓝牙5.2/蓝牙低功耗、802.15.4 / Thread、ANT/ANT以及2.4GHz专有应用。nRF52840-DK与 Arduino Uno Revision 3 标准…

【html】用html5+css3+JavaScript制作一个计数器

目录 简介&#xff1a; 效果图&#xff1a; 源码&#xff1a; html: CSS: JS: 源码解析&#xff1a; 简介&#xff1a; 在日常生活当中很多事情都需要用到计数器特别是在体育运动当中&#xff0c;可以我们那么我们可不可以通过网页来制作一个计数器呢答案是肯定的我们需要利…

猫头虎推荐20个值得体验的通用大模型

猫头虎推荐20个值得体验的通用大模型 &#x1f680; 大家好&#xff0c;我是猫头虎&#xff0c;一名专注于科技领域的自媒体博主。今天是周一&#xff0c;新的开始&#xff0c;我们来深入探讨一下当前最值得体验的通用大模型。这些AI模型不仅功能强大&#xff0c;而且在各自领…

YonSuite银企直联:成长型企业数智转型的强力引擎

在当今数字化转型的浪潮中&#xff0c;成长型企业正面临着前所未有的发展机遇与挑战。在这场数字化转型的竞技场上&#xff0c;银企直联凭借其独特的优势&#xff0c;成为企业金融管理的重要利器&#xff0c;为企业带来前所未有的资金管理体验。用友YonSuite作为领先的数智化转…