【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




 歡迎在博文下方留言評論,我們會及時回復您的問題。

如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com   
作者:Jadyn Li / 李瑞潔


更多資訊,請掃碼關注我們!


★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論