Hi,
MCUXpressoを持っていませんが、S32DS 3.4を使用しています。ビルド201217(Update3)
S32DSを使ってFreeMasterをCANでS32K144実装してみました。
SDK の例は、UART との通信です。
S32K3xx uCにCANの例があるのを見て、S32K144に移植しようとしましたが、エラーが多すぎました。
144でCANと通信する方法を説明するのに十分な例がないようです。
私の製品は数キロ離れた場所から動作する可能性があるため、UART通信を使用できません。
S32DS上でS32K1xxを使用したCAN通信のサンプルコードを教えてください。
ありがとうございます。
Hi @CY9,
FreeMASTERドライバには、複数の定義に対するガードがあります。これには、通信インターフェースの定義が含まれます( freemaster_private.h:298参照)
/* only one communication link may be selected */
#if (!(FMSTR_DISABLE)) && FMSTR_COUNT_INTERFACES > 1
#error More than one communication interface selected for FreeMASTER driver.
#endif
コンパイラは、互換性のない定義がある場合にエラーが発生します。
また、FMSTR_USE_FLEXCANが定義されている場合は、プロジェクトにFMSTR_InitSerialシンボルが生成されないようにする必要があります。
これを確認するには、.map ファイルの内容または .elf ファイル シンボルを調べます。
この出力は、CANの場合に生成されます。
C:\NXP\S32DS.3.5\S32DS\build_tools\gcc_v6.3\gcc-6.3-arm32-eabi\arm-none-eabi\bin>readelf.exe C:\fmstr_rtd_fcan_s32k144\Debug_FLASH\fmstr_rtd_fcan_s32k144.elf -s | find "FMSTR_InitCan"
610: 00000e39 56 FUNC GLOBAL DEFAULT 3 FMSTR_InitCan
C:\NXP\S32DS.3.5\S32DS\build_tools\gcc_v6.3\gcc-6.3-arm32-eabi\arm-none-eabi\bin>readelf.exe C:\fmstr_rtd_fcan_s32k144\Debug_FLASH\fmstr_rtd_fcan_s32k144.elf -s | find "FMSTR_InitSerial"
2 番目のコマンドは、空の結果を返します。
クリーンタスクが古いelfファイルを削除しないか、デバッグ構成が完全な再構築をトリガーしない可能性があると思われます。これにより、デバッグ セッションは古いバージョンの elf ファイルを再利用します。
Dear iulian_stan,
プロジェクトには定義が多すぎるようですが、定義が混同されることがありますか?
参照:
私はプロジェクトでUSRTを設定および定義していませんが、定義に含まれているFMSTR_InitSerial()‵を呼び出そうとします。
#if FMSTR_USE_SERIAL
/* initialize communication and start listening for commands */
if (!FMSTR_InitSerial())
return FMSTR_FALSE;
#endif そして、 'FMSTR_USE_SERIAL'は今= 0です。
#define FMSTR_DISABLE 0 /* ... */
#define FMSTR_USE_LPUART 0 /* !!!!! */
#define FMSTR_USE_FLEXCAN 1
#define FMSTR_USE_PDBDM 0
//...
#if (FMSTR_USE_SCI) || (FMSTR_USE_ESCI) || (FMSTR_USE_LPUART) || (FMSTR_USE_JTAG) || (FMSTR_USE_USB_CDC) || (FMSTR_USE_MQX_IO) || (FMSTR_USE_MBED)
#ifndef FMSTR_USE_SERIAL
#define FMSTR_USE_SERIAL 1
#else
#if FMSTR_USE_SERIAL == 0
#error "FMSTR_USE_SERIAL macro cannot be configured by user, FreeMASTER serial driver functionality is not garanted."
#endif
#endif
#else
#ifndef FMSTR_USE_SERIAL
#define FMSTR_USE_SERIAL 0
#endif
#endifHi @CY9,
1.これは、FreeMASTERドライバーの新しいバージョンで修正されたバグです。その割り当ては、前の{}ブロックの内側にある必要があります。
if (discard > 0U)
{
...
/* buffer is for sure not full */
pbuff->flags.flg.bIsFull = 0;
pbuff->nRP = rp;
}
S32K1ファミリのライブラリを更新する予定ですが、現時点ではETAはありません。
2.まず、プロジェクトをクリーンアップし(安全のために、Debug_FLASHフォルダを手動で削除します)、再構築します。問題が解決しない場合は、新しい DS への移行中に、一部のファイルが重複したことを意味します。問題のある関数 (例: SystemInit) を検索すると、プロジェクト ファイル内の定義が重複し、冗長なソース パスが削除されます。
Dear iulian_stan ,
CANバスでテストします、それは動作します!
よろしくお願いします。
2つの質問があります。
1.
FMSTR_PipeDiscardBytes() {
if(discard > 0) {
rp = ...;
}
pbuff->nRP = rp;
}So, if (discard<=0) , rp = ??
2.
S32DS 3.5をダウンロードして、最新のものにアップデートしました。
プロジェクトをクリーンアップして再構築しようとすると、エラーメッセージ:
建物対象:fmstr_rtd_fcan_s32k144.elf
起動時:標準S32DS Cリンカ
arm-none-eabi-gcc -o "fmstr_rtd_fcan_s32k144.elf""@fmstr_rtd_fcan_s32k144.args"
c:/nxp/s32ds.3.5/s32ds/build_tools/gcc_b1620/gcc-6.3-arm32-eabi/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/bin/real-ld.exeに追加します。./SDK/platform/devices/S32K144/startup/system_S32K144.o: 関数 'SystemInit' 内:
D:\Project\TYC\S32DS35\fmstr_rtd_fcan_s32k144\Debug_FLASH/../SDK/platform/devices/S32K144/startup/system_S32K144.c:69: 'SystemInit' の複数の定義; ./SDK/S32K144_SDK_4.0.1/platform/devices/S32K144/startup/system_S32K144.o:D:\Project\TYC\S32DS35\fmstr_rtd_fcan_s32k144\Debug_FLASH/../SDK/S32K144_SDK_4.0.1/platform/devices/S32K144/startup/system_S32K144.c:69:ここで最初に定義
c:/nxp/s32ds.3.5/s32ds/build_tools/gcc_b1620/gcc-6.3-arm32-eabi/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/bin/real-ld.exeに追加します。./SDK/platform/devices/S32K144/startup/system_S32K144.o: 関数 'SystemCoreClockUpdate' 内:
D:\Project\TYC\S32DS35\fmstr_rtd_fcan_s32k144\Debug_FLASH/../SDK/platform/devices/S32K144/startup/system_S32K144.c:128: 'SystemCoreClockUpdate' の複数の定義; ./SDK/S32K144_SDK_4.0.1/platform/devices/S32K144/startup/system_S32K144.o:D:\Project\TYC\S32DS35\fmstr_rtd_fcan_s32k144\Debug_FLASH/../SDK/S32K144_SDK_4.0.1/platform/devices/S32K144/startup/system_S32K144.c:128:ここで最初に定義
c:/nxp/s32ds.3.5/s32ds/build_tools/gcc_b1620/gcc-6.3-arm32-eabi/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/bin/real-ld.exeに追加します。./SDK/platform/devices/S32K144/startup/system_S32K144.o: 関数 'SystemSoftwareReset' 内:
D:\Project\TYC\S32DS35\fmstr_rtd_fcan_s32k144\Debug_FLASH/../SDK/platform/devices/S32K144/startup/system_S32K144.c:179: 'SystemSoftwareReset' の複数の定義; ./SDK/S32K144_SDK_4.0.1/platform/devices/S32K144/startup/system_S32K144.o:D:\Project\TYC\S32DS35\fmstr_rtd_fcan_s32k144\Debug_FLASH/../SDK/S32K144_SDK_4.0.1/platform/devices/S32K144/startup/system_S32K144.c:179:ここで最初に定義......
ビルドに失敗しました。エラーが 57、警告が 5 件。(6秒272msかかった)
何か提案はありますか、ありがとう。
Hi @CY9,
S32 Design Studioプロジェクトに添付されています。
注: このプロジェクトは S32DS 3.5 および S32SDK 4.0.1 でビルドされました。