NXP MCU 技术论坛
直播中

江根磊

8年用户 1124经验值
私信 关注
[问答]

如何将S32K312 MBDT生成的代码导出到S32 Design Studio?

我目前正在开发S32K312 系列使用基于模型的设计工具箱 (MBDT)matlab/Simulink 中。最初,我正在尝试 NXP 示例项目。我打开了一个 DIO S32CT 项目,将“Model Settings → Hardware Implementation → Hardware → Project Template”设置为“S32K312 系列-Q172 S32 Config Tool”并单击“Build, Deploy Start”后,我的评估板开始正常工作,没有问题。
然后,我导出了 S32 Design Studio 的示例 DIO 项目。我通过单击“File → S32DS Application Project”并选择我的卡创建了一个新项目。接下来,我右键单击我的新项目,选择导入选项,然后选择我从 Simulink 导出的文件。最后,我尝试了几种不同的方法将我的代码部署到评估板,但没有成功。我附上了一些照片,展示了我所采取的步骤。
请帮我解决此问题

回帖(1)

木頭瓶子

2025-3-25 17:48:25

将MBDT生成的代码导入S32 Design Studio(S32DS)需要系统化的步骤和配置。以下是分步指南及常见问题解决方案:




步骤详解:




  1. 生成代码前的配置  



    • 在Simulink中,确保Model Settings > Hardware Implementation选择正确的硬件(如S32K312-Q172)和工具链(如GNU ARM Embedded)。

    • 启用Generate Makefile选项(位于Code Generation > Build Process),以便生成与S32DS兼容的编译配置。




  2. 生成代码  



    • 点击Build(或Ctrl+B),MBDT会生成代码并输出到<模型名>_s32k312目录(默认在项目根目录的generated_code子文件夹)。




  3. 在S32DS中创建项目  



    • 方法一(推荐): 使用MBDT的自动导出功能  

      • 在Simulink中选择 File > Export > S32DS Application Project,按向导配置目标路径和芯片型号(S32K312)。

      • 此操作会自动生成包含完整源码、Makefile和硬件配置的S32DS项目。


    • 方法二: 手动创建项目  

      • 在S32DS中新建Empty Application Project,选择正确的芯片型号和工具链。





  4. 导入生成的代码  



    • 右键项目选择 Import > File System,导航到MBDT生成的代码目录(如generated_code)。

    • 勾选所有文件(尤其srcincludelibraries),确保Create top-level folder未勾选,避免路径嵌套错误。




  5. 配置项目属性  



    • 包含路径:

      右键项目 > Properties > C/C++ Build > Settings > GNU ARM Compiler > Includes,添加以下路径:
      ${ProjDirPath}/include
      ${ProjDirPath}/libraries
      ${S32K3_SDK_PATH}/rtos/FreeRTOS/include  # 如使用RTOS

    • 预处理器定义:

      Preprocessor中添加CPU_S32K312(根据芯片型号调整)。

    • 链接器脚本:

      GNU ARM Linker > General中指定正确的链接脚本(如S32K312_xxx.ld,通常由MBDT自动生成)。




  6. 处理依赖库  



    • 将S32K3 SDK库(如S32K3xx_SDK)和MBDT专用库(如MBDT_S32K3xx)复制到项目目录,并在Properties > Linker > Libraries中添加库名(如MBDT_S32K3xx)。




  7. 构建与调试  



    • 点击Build Project,检查编译错误。常见问题处理见下文。

    • 连接开发板,使用Debug Configurations配置J-Link/PEMicro调试器。






常见问题与解决方案:




  1. 头文件/源文件缺失错误  



    • 现象: fatal error: main.h: No such file or directory  

    • 解决:  

      • 确认导入时勾选了所有生成的文件(包括子目录)。

      • 手动检查项目资源管理器中的文件结构是否与生成目录一致。





  2. 未定义的函数引用(Undefined Reference)  



    • 现象: undefined reference to 'DIO_Init'  

    • 解决:  

      • 检查是否遗漏链接MBDT或SDK的静态库(.a文件)。

      • Linker > Libraries中添加库名(如-lMBDT_S32K3xx)。





  3. 内存分配错误(Linker Script问题)  



    • 现象: region 'm_data' overflowed  

    • 解决:  

      • 在S32 Config Tool中重新生成链接脚本,确保与芯片内存匹配。

      • 手动调整.ld文件中的MEMORY区块大小。





  4. 硬件配置不匹配  



    • 现象: 代码编译成功,但外设(如GPIO)无法工作。  

    • 解决:  

      • 在S32 Configuration Tools(如Pin Mux)中验证引脚分配,重新生成Peripheral_Initialization.c文件。

      • 替换项目中的旧版配置文件。





  5. 实时操作系统(RTOS)配置错误  



    • 现象: FreeRTOS任务无法调度。  

    • 解决:  

      • 确保在S32DS中启用了FreeRTOS支持(通过SDK安装)。

      • FreeRTOSConfig.h中检查configCPU_CLOCK_HZ是否与系统时钟一致。







高级技巧:




  • 版本兼容性:

    确认MBDT版本与S32DS/SDK版本匹配(例如MBDT v4.2需搭配S32DS v3.5和SDK RTM 4.0.3)。




  • 调试生成代码:

    在S32DS中启用SemihostingITM Trace,配合MATLAB/Simulink的External Mode实时监控信号。




  • 自动化脚本:

    使用MBDT的postbuild钩子脚本,自动复制生成文件到S32DS项目目录。






通过以上步骤,您应能顺利将MBDT代码集成到S32DS中。如遇具体错误,请根据控制台输出定位问题模块(如编译器、链接器或外设驱动),并针对性调整配置。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分