2396380_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2396380_ja-JP

2396380_ja-JP

FreeMaster Over CANは割り込み時にポーリングモードでコンパイルできません

「FreeMaster over CAN」と「s32k3xx_fm_over_can_s32ct」から生成されたコードから、ポーリングモードを有効にするために3 micoを変更しようとしています。

FMSTR_SHORT_INTRFMSTR_POLL_DRIVEN 、およびFMSTR_DEBUG_TX

しかしコンパイルに失敗しました。理由は、転送機能のフリーマスターオーバーが割り込み時に「s32k3xx_fm_over_can_s32ct」応答から可能になるためです。しかし、モータ制御の場合、少なくとも10kHzの高速タスクやBCTU、ホール、ワッチドッグ、フリーマスターはControllewr K312からの応答を受け取れず、ポーリングモードが必要です。

これら3つのマイクロコントローラを有効にして、「s32k3xx_fm_over_can_s32ct」のポーリングモードを開く方法

Re: FreeMaster Over CAN on interrupt fail to compile in polling mode

通信手段は相互に排他的な選択肢である。エラーメッセージはまさにそのことを意味しています。
FreeMASTERドライバールーチンはかなりの処理時間を必要とする場合があり、これら3つの設定は利用ケースに応じて実行のバランスを取るのに役立ちます。

  • FMSTR_POLL_DRIVEN - FreeMASTERルーチンはFMSTR_Poll関数内で完全に実行されます。開発者は呼び出しタイミングを決定しますが、FreeMASTERが通信速度に追いつけるような頻度で呼び出されるようにする必要があります。
  • FMSTR_LONG_INTR - FreeMASTERルーチンは完全にFMSTR_CanIIsr関数内で実行されます。デベオパーはシステムに高い優先度を割り当てることで実行を強制します(これは多数の割り込み時に最適だったため使われたと思います)。
  • FMSTR_SHORT_INTR - は前述の2つの混合であり、通信は割り込みハンドラー(FMSTR_CanIsr)で行われ、プロセッシングは(FMSTR_Poll)で行われます

あなたが試すべきなのは、最後の方法(ポーリングと割り込みの組み合わせ)だと思います。それでも割り込みはCANフレームの読み取りを保証するかもしれませんが、FMSTR_Poll呼び出す頻度が十分でない場合(より高い優先度の割り込みによる)、ボードが時間通りに応答しないことがあります。その結果、FreeMASTERデスクトップツールでタイムアウトエラーが表示されます。

開発者は、計算集約型アプリケーションにおいてFreeMASTERドライバーのルーチンに十分な時間を割り当てられるかを確実にしなければなりません。

これでFreeMASTERの通信モードが明確になったことを願います。

Re: FreeMaster Over CAN on interrupt fail to compile in polling mode

以前、あなたと同じ設定で試してみました。

例えば、 FMSTR_POLL_DRIVENを1に変更しました(以前は割り込みモードとして0でした)。

// 割り込み駆動またはポーリング駆動のシリアル通信を選択します

#define FMSTR_LONG_INTR 1 割り込みにおけるメッセージプロセッシングの完了

#define FMSTR_SHORT_INTR 0 //割り込みでキューイングが完了

#define FMSTR_POLL_DRIVEN 1 /*0 */


7 エラー: 主に

#if (FMSTR_LONG_INTR && (FMSTR_SHORT_INTR || FMSTR_POLL_DRIVEN )) || \

(FMSTR_SHORT_INTR && (FMSTR_LONG_INTR || FMSTR_POLL_DRIVEN )) || \

( FMSTR_POLL_DRIVEN && (FMSTR_LONG_INTR || FMSTR_SHORT_INTR)) || \

!( FMSTR_POLL_DRIVEN || FMSTR_LONG_INTR || FMSTR_SHORT_INTR)

割り込みモードでは1つだけ選択可能です */

#エラーFMSTR_LONG_INTR、FMSTR_SHORT_INTR、またはFMSTR_POLL_DRIVENのいずれか1つだけを有効にする必要があります

#endif

コンパイル時に上記で3つのエラーが発生しました


../FMsrc/freemaster_private.h:326:2: エラー: #error FMSTR_LONG_INTR、FMSTR_SHORT_INTR、またはFMSTR_POLL_DRIVENのいずれか1つだけを有効にする必要があります

326 | #エラー FMSTR_LONG_INTR、FMSTR_SHORT_INTR、またはFMSTR_POLL_DRIVENのいずれか1つだけを有効にする必要があります。

| ^~~~~

../FMsrc/freemaster_private.h:326:2: エラー: #error FMSTR_LONG_INTR、FMSTR_SHORT_INTR、またはFMSTR_POLL_DRIVENのいずれか1つだけを有効にする必要があります

326 | #エラー FMSTR_LONG_INTR、FMSTR_SHORT_INTR、またはFMSTR_POLL_DRIVENのいずれか1つだけを有効にする必要があります。

| ^~~~~


../FMsrc/freemaster_private.h:326:2: エラー: #error FMSTR_LONG_INTR、FMSTR_SHORT_INTR、またはFMSTR_POLL_DRIVENのいずれか1つだけを有効にする必要があります

326 | #エラー FMSTR_LONG_INTR、FMSTR_SHORT_INTR、またはFMSTR_POLL_DRIVENのいずれか1つだけを有効にする必要があります。

| ^~~~~



1つでは不十分だが、2つでもすべて失敗に終わった。

Re: FreeMaster Over CAN on interrupt fail to compile in polling mode

こんにちは、 @millerhughes さん

ポーリングモードを有効にするには、以下のマクロを更新する必要があります。

#define FMSTR_LONG_INTR    0
#define FMSTR_SHORT_INTR   0
#define FMSTR_POLL_DRIVEN  1

3つのうち1つだけを1に設定する必要があります。そうしないと、コードはコンパイルされません。

FMSTR_DEBUG_TXについてですが、これはTXラインを検証するためのデバッグマクロです。これまでの定義と合わせて、次の定義も考えられます。

#define FMSTR_DEBUG_TX  1

FreeMASTERドライバーに継続的にデバッグフレームを送信するよう指示します(注:これはTXラインの検査に役立ちますが、この機能が有効になっている間はFreeMASTERツールでボードに接続できません)。

コンパイルエラーログを共有してもらえますか?

私の知る限り、s32k3xx_fm_over_can_s32ct例はモデルベースデザインツールボックス(MBDT)チームによって実装されています 。Simulinkでアプリケーションを開発する場合、手動のコード変更ではなくブロック設定の更新が必要になるかもしれません。この場合、MBDT開発者は専用のMBDTコミュニティを通じて、あなたのユースケースにより適切な支援を提供できます

Re: FreeMaster Over CAN on interrupt fail to compile in polling mode

ご説明ありがとうございます。はい、ポーリングと割り込みの組み合わせが私の目標です。

問題の要約:ターゲットk312は、freeamsterをしばらく実行した後、応答を送信できません。

フィードバックは以下のとおりです。

割り込みモード:フリーマスター動作中、上記の問題発生、FMSTR_LONG_INTRのみ

ポーリングモード: コンパイル、freemaster が動作しない、freemaster_private.h:326:2 のエラーメッセージを削除しても FMSTR_POLL_DRIVEN:

混合:FreeMasterは動作し、コンパイルは可能ですがトラフィックの問題は残ります。FMSTR_LONG_INTRまたはFMSTR_SHORT_INTRまたはFMSTR_POLL_DRIVENの3つすべてが1に設定され、freemaster_private.h:326:2のエラーメッセージが削除されます:

今は正当化します:おそらくCANドライバーの問題かもしれません。

もし追加のサポートができるなら、どのような情報が必要ですか?

Re: FreeMaster Over CAN on interrupt fail to compile in polling mode

こんにちは、 @millerhughes さん

FMSTR_LONG_INTRモードは、たとえ短時間しか動作しないとしても、唯一動作するモードなので、このモードのトラブルシューティングを試みるつもりです。私が調査するであろう事項は以下のとおりです。

  1. ロジックアナライザでCANバスを点検して、CANメッセージがボードから送信されていないのか、送信されているものの破損しているのかを確認できますか?
  2. PC側で読み込んでいる変数はいくつありますか?変数の数は、PCツールとボード間でやり取りされるデータ量に正比例する。可能であれば、まずは少数の変数から始めて、徐々に数を増やしていき、どこで問題が発生するかを確認したいです。
  3. CANインスタンスはFreeMASTERドライバー以外のルーチンで使われていますか?

MATLAB/Simulinkモデルから始めましたか?それともS32 Design Studioのサンプルアプリケーションから始めましたか?元のソースによって、FreeMASTER CANドライバの実装は異なる場合があります。

可能であれば、ソースファイル( freemaster_s32_flexcan.hfreemaster_s32_flexcan.cという名前である必要があります)を添付してください。

Re: FreeMaster Over CAN on interrupt fail to compile in polling mode

1. Peakcan Viewを使用してメッセージフローを監視しました。

はい、CANメッセージはもうボードから送信されていません

フリーアムスターがスムーズに動作しているとき、メッセージが非常に速く点滅します。freeamasterがフリーズすると、S32k312minEVBから送信されたCANメッセージは停止したようですが、Freemasterからのメッセージは依然として表示され、動作が遅くなっています。

2、合計で20個の変数が少ないですが、その数はdemon fmプロジェクトs32k312_mc_pmsm_2sh_s32ct.pmpx "s32k344_mc_pmsm_2sh_s32ct"よりもはるかに少ないです。

3.フリーマスター専用のCANインスタンス;

おっしゃる通り、私たちのBSWはRTDを使ってCANを使ったFMを実装し、DEMON s32k3xx_fm_over_can_s32ct MCALドライバーのflexcan_43とflexcan_ipwレイヤーを統合しています。しかし、上記の問題にはまだ取り組んでいます。

ちなみに、CANのIP層制限により、私たちのCANドライバは標準のmsg IDを受け入れることができるので、freeamsterの設定設定:標準送信、受信拡張。


添付ファイルに、あなたに近いと思われる4つのファイルがありますのでご確認ください。

すべてのCAN IP設定ファイルが必要ですか?実際、43/ipw はすべて demon s32k3xx_fm_over_can_s32ct と同じように構成されます。

直接メールで連絡することもできます。


Re: FreeMaster Over CAN on interrupt fail to compile in polling mode

こんにちは、 @millerhughes さん

残念ながらこのThreadには添付ファイルは見つかりませんでしたが、MBDTから入手したファイルでは、確かに私たちのチームの実装とは異なっていました。

MBDTの実装を私たちのバージョン(添付ファイル参照 - freemaster_s32k3xx_can.cfreemaster_s32k3xx_can.hに対応しています)に置き換えてみてはどうでしょうか。

私が気づいた一つの矛盾点は、CAN割り込みハンドラのシグネチャです:

FMSTR_BOOL FMSTR_CanIsr(FMSTR_U16 RxObjectId, FMSTR_U32 RxCanId, FMSTR_U32 RxMsgLength, const FMSTR_U8 * RxMsgData, FMSTR_U16 TxMsgBufId);

void FMSTR_CanIsr(void);

CANの詳細(バッファIDなど)がfreemaster_cfg.hで定義されていると仮定しますハンドラー内でそれらは必要ありません。当社もRTD(低ハードウェア層)を使用しており、お客様の設定を変更する必要はありません。

Re: FreeMaster Over CAN on interrupt fail to compile in polling mode

ファイルのアップロードリクエストに失敗しました。このThreadにファイルをアップロードする方法

Re: FreeMaster Over CAN on interrupt fail to compile in polling mode

ただし、CAN readバッファをリセットする関数を探す助けを求めてください。

また、MBD CANドライバーコードCan_43_FLEXCAN_Ipw.cに変更が加わったのではないかと疑っています

MBD MCAL CANドライバーをRTD非MCALドライバーに統合すると、機能Can_43_FLEXCAN_Ipw_ProcessRxMesgBufferが強制的にMEMCPYに転送されます。

手動転送がなければ、RTD非MCALのCANドライバーを使うCan_43_FLEXCAN_Ipw_ProcessRxMesgBufferすべてのCAN情報を読み取れません。

オリジナルのMBD DEMON s32k3xx_fm_over_can_s32ct手動転送は不要です。なぜなら、demonはMCAL CAN 43ドライバを使用しているからです。

Freemasterの問題を引き起こす場合、関数Can_43_FLEXCAN_Ipw_ProcessRxMesgBuffer()での手動転送を回避する方法はありますか?

あるいは、あなたが知っている何らかの機能を使ってバッファを手動でリセットすることもできますか?


static void Can_43_FLEXCAN_Ipw_ProcessRxMesgBuffer

const Can_43_FLEXCAN_ControllerConfigType * Can_pControllerConfig、

const Can_43_FLEXCAN_HwObjectConfigType * Can_pHwObjectConfig、

uint8 u8MbIdx

{

Can_HwHandleType u8HwObjectID = 0U;

Can_HwType CanIf_Mailbox;

PduInfoType CanIf_PduInfo;

const Can_43_FLEXCAN_HwObjectConfigType * Can_pHwObject = NULL_PTR;

Flexcan_Ip_MsgBuffType * pReceivedDataBuffer = NULL_PTR;


/**/

memcpy(&Can_Ipw_xStatus0,&FlexCAN_State0,sizeof(FlexCAN_State0));

/**/


u8HwObjectID = Can_Ipw_au16MbIdxToObjIDMap[Can_pControllerConfig-> Can_u8ControllerID ][u8MbIdx];


Re: FreeMaster Over CAN on interrupt fail to compile in polling mode

フィードバック:RTD版Freemasterドライバーコードの提供ありがとうございます。

MBDのバージョン機能はFMSTR_CanIsr(*,*,*..*)はMCALドライバ freemaster_s32k3xx_canで、RTDドライバ freemaster_can_flexcanではFMSTR_CanIsr()によって使われています。

統合と実行時に、Freemasterがs32k312MINEVBとの接続に失敗しました。

フリーマスターがフリーズしたときにデバッグを始めました。S32K312N=MINEVBがメッセージを送信失敗したとき、SWが「読み取れる」状態になり、これが未完了のCAN読み取りを引き起こし、間接的には送信遅延が無制限になることがわかりました。

バッファがいっぱいになった場合にリセットするなど、読み取り用のバッファを手動でクリアする機能はありますか?

タグ(1)
評価なし
バージョン履歴
最終更新日:
2 週間前
更新者: