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

本文介绍如何使用 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.mfbz.cn/a/716746.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录——分割回文串(Leetcode 131)

题目链接 回溯 class Solution {List<List<String>> res new ArrayList<List<String>>();List<String> list new ArrayList<String>();public List<List<String>> partition(String s) {backtracking(s, 0);return res;}p…

博瓦科技产品亮相湖北安博会啦!!!

6月12日&#xff0c;第二十三届2024中国&#xff08;武汉&#xff09;社会公共安全产品暨数字城市产业展览会&#xff08;简称&#xff1a;湖北安博会&#xff09;在武汉国际会展中心隆重开幕。作为行业内最具影响力的展会之一&#xff0c;此次盛会将汇聚来自全球的顶尖企业、专…

AbMole带你探索细胞的“铁”门:Piezo1通道在椎间盘退变中的关键角色

在生物医学领域&#xff0c;铁是细胞功能不可或缺的元素&#xff0c;但铁的异常积累却可能成为细胞的“隐形杀手”。最近&#xff0c;一项发表在《Bone Research》上的研究&#xff0c;为我们揭开了铁代谢与椎间盘退变之间神秘联系的一角。这项研究不仅深化了我们对铁离子通道P…

长难句打卡6.17

At a time when Thomas Piketty and other economists are warning of rising inequality and the increasing power of inherited wealth, it is bizarre that wealthy aristocratic families should still be the symbolic heart of modern democratic states. 在托马斯皮凯…

深入理解MySQL字符集

一、字符集介绍 字符集&#xff08;Character Set&#xff09;是多个字符的集合&#xff0c;它规定了字符在计算机中的编码方式。以下是关于字符集的详细介绍&#xff1a; 1. 字符集的定义与作用 字符集是各种文字和符号的总称&#xff0c;包括各国家文字、标点符号、图形符号…

本地数据如何正确的导入SOLIDWORKS PDM系统

SOLIDWORKS 产品数据管理 (PDM) 解决方案可帮助您控制设计数据&#xff0c;并且从本质上改进您的团队就产品开发进行管理和协作的方式。使用 SOLIDWORKS PDM Professional&#xff0c;您的团队能够&#xff1a;1. 安全地存储和索引设计数据以实现快速检索&#xff1b;2. 打消关…

【Git】-- 添加公钥到 github 或者gitlab上

仅针对系统&#xff1a;mac os 、 unix、linux 1、检查是否有 id_rsa.pub $ cd ~ $ ls -al ~/.ssh 注意&#xff1a;若已有 id_rsa.pub&#xff0c;则必要执行 第二步&#xff0c;避免覆盖掉原有正常的公钥。 配置多个 git 账号请参考&#xff1a;同一台电脑配置多个git账…

使用RLHF推动翻译偏好建模:低成本实现“信达雅”

在机器翻译领域&#xff0c;“忠实度(信)”、“表现力(达)”、“优雅性(雅)”一直是研究者们不懈追求的目标。然而&#xff0c;传统的评估指标如BLEU并不能完全符合人类对翻译质量的偏好。为了解决这一挑战&#xff0c;复旦大学自然语言处理实验室与复旦大学外文学院携手合作&a…

利用原生HTML + CSS + JS实现歌词滚动

对于很多音乐APP&#xff0c;都有这么一个功能&#xff0c;就是根据歌曲的进度来控制对应的歌词滚动&#xff0c;如下图所示&#xff1a; 大概这样的效果&#xff0c;我此次是使用原生的HTMLCSSJS来实现的&#xff0c;以下是具体的实现过程。 1. 数据获取与处理 对于数据来源&…

Qt中利用QTextBrowser控件设计日志窗口

我们一般使用Qt开发应用程序时&#xff0c;都有将控制台窗口去掉。但是&#xff0c;有时候又需要查看一些调试信息&#xff0c;一般的处理方式是把log写到一个文件中。本文介绍以下日志窗口&#xff0c;可以更方便的查看日志信息。 UI设计 推拽UI控件&#xff0c;修改默认背景…

05眼动识别软件详情2波形优化

对应视频链接点击直达 01项目点击下载&#xff0c;可直接运行&#xff08;含数据库&#xff09; 05眼动识别软件详情2 对应视频链接点击直达期望的数据展示数据波形对比如何实现几种常用滤波介绍维纳滤波巴特沃斯滤波器中值滤波排序滤波 推荐 结语其他以下是废话 原始数据的波…

Objective-C 学习笔记 | KVC(key-value coding)

Objective-C 学习笔记 | KVC&#xff08;key-value coding&#xff09; Objective-C 学习笔记 | KVC&#xff08;key-value coding&#xff09;非对象类型Key 路径 Objective-C 学习笔记 | KVC&#xff08;key-value coding&#xff09; KVC 可以让程序通过名称直接存取属性&a…

CentOS 5(CentOS 6、Redhat 6)服务器配置VNC

一、配置服务器yum源 yum源&#xff08;本地、华为云、阿里云、网易&#xff09; 二、使用yum安装vnc服务 1、检查系统是否安装了vnc 和 vncserver&#xff0c; rpm -qa | grep vnc如果没有安装那就行自行下载安装&#xff08;我这里用yum安装了&#xff0c;vncserver安装需…

让你的网页动起来 - 轻松实现 JavaScript 拖拽功能

效果展示 实现 要实现该效果需要运用 HTML5 的 dragstart 拖放操作事件 通过去开启dragstart监听拖放操作事件就能实现图片的拖动 <div class"empty"><div class"fill" draggable"true"></div> </div>本例子中我们对…

基于深度学习的鸟类检测识别系统【python源码+Pyqt5界面+数据集+训练代码 MX_003期】

简介&#xff1a; 基于深度学习的鸟类检测识别系统在当今世界中具有广泛的应用前景。系统不仅可以帮助生态学家和保护人员监测和保护鸟类种群&#xff0c;还能在农业管理、城市生态监测以及科学研究领域发挥重要作用。通过自动化的图像识别技术&#xff0c;可以实现对鸟类种类、…

汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长

汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长 汽车系统主要包括动力系统、制动系统、传动系统、转向系统、行驶系统、燃油供给系统、照明系统以及电器系统。汽车传动系统指能够将发动机产生的动力转化为车辆行驶驱动力的动力传递装置。汽车传动系统为汽…

学生用小台灯什么牌子的好?五大强劲护眼台灯牌子分享

在这个数码时代&#xff0c;人们对屏幕的依赖程度越来越高&#xff0c;尤其是孩子们。他们不仅在学校里需要长时间盯着教科书&#xff0c;还会在学习和娱乐中使用各种数码设备。然而&#xff0c;这也使得眼睛健康问题逐渐凸显&#xff0c;尤其是儿童近视的问题。为了保护视力&a…

Inpaint软件下载附加详细安装教程

​Inpaint是一款由Maxim Gapchenko开发的图像处理软件&#xff0c;它可以帮助用户轻松地去除图像中的水印和其他不需要的元素&#xff0c;这个软件的核心技术是基于图像处理算法的&#xff0c;它可以自动识别图片中的像素&#xff0c;并用周围的颜色进行替换&#xff0c;使得图…

吴恩达深度学习笔记:机器学习(ML)策略(1)(ML strategy(1))1.11-1.12

目录 第三门课 结构化机器学习项目&#xff08;Structuring Machine Learning Projects&#xff09;第一周 机器学习&#xff08;ML&#xff09;策略&#xff08;1&#xff09;&#xff08;ML strategy&#xff08;1&#xff09;&#xff09;1.11 超过人的表现&#xff08;Surp…

Swift Combine — Subject Publishers(PassthroughSubject CurrentValueSubject)

本文主要介绍一下Subject&#xff0c;Subject 本身也是一个 Publisher&#xff0c;其定义如下&#xff1a; public protocol Subject<Output, Failure> : AnyObject, Publisher {func send(_ value: Self.Output)func send(completion: Subscribers.Completion<Self.…