Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

PDL 2.1.0での列挙型「en_mfs_mode」の誤った定義 - KBA229085 - Community Translated (JA)

PDL 2.1.0での列挙型「en_mfs_mode」の誤った定義 - KBA229085 - Community Translated (JA)

SivaK_96
Employee
Employee
50 questions asked 10 questions asked 5 questions asked

Community Translated by  NoTa_4591161       Version: *A

Translation - English: Incorrect Definition of Enumerator “en_mfs_mode” in PDL 2.1.0 - KBA229085

PDL 2.1.0の列挙型「en_mfs_mode」は次のように定義されています。

<PDLインストールディレクトリ>\drivers\mfs\mfs.h

/// MFSモード

typedef enum en_mfs_mode

{

    MfsInitMode = 0u/// <MFS初期モード

    MfsUartMode = 1u/// <MFS UARTモード

    MfsCsioMode = 2u/// <MFS CSIOモード

    MfsI2cMode = 3u/// <MFS I2Cモード

    MfsLinMode = 4u/// <MFS LINモード

} en_mfs_mode_t;

ただし、FM0 +ファミリのペリフェラルマニュアルコミュニケーションマクロパーツ(文書番号002-05024改訂版* C)によると、I2Cモードは「4」、LINモードは「3」です。

1.png 

したがって、PDL 2.1.0の列挙型「en_mfs_mode」の定義は正しくありません。列挙型「en_mfs_mode」の正しい定義は次のとおりです。

/// MFSモード

typedef enum en_mfs_mode

{

    MfsInitMode = 0u/// <MFS初期モード

    MfsUartMode = 1u/// <MFS UARTモード

    MfsCsioMode = 2u/// <MFS CSIOモード

    MfsLinMode = 3u/// <MFS LINモード

    MfsI2cMode = 4u/// <MFS I2Cモード

} en_mfs_mode_t;

さらに、MFSドライバーのインターフェイスモードは、列挙型「en_mfs_mode」を使用する代わりに、数値でハードコードされています。曖昧さを回避するために、MFSドライバーでは列挙型「en_mfs_mode」の定義を使用する必要があります。

次のPDL 2.1.0 mfs.cコードスニペットでは、赤の行はハードコーディングを示し、青の行は列挙型「en_mfs_mode」が使用されていることを示しています。

--- mfs.c.org 2017-12-23 01:29:26.000000000 +0900

+++ mfs.c       2019-11-25 15:07:50.429769700 +0900

@@ -1025,10 +1025,10 @@

switch (pstcConfig->enMode)

{

case UartNormal:

-     stcSMR.MD = 0u;   /* ノーマルモード */

+     stcSMR.MD = MfsInitMode;   /* ノーマルモード */

      break;

case UartMulti:

-     stcSMR.MD = 1u;    /* マルチプロセッサモード */

+     stcSMR.MD = MfsUartMode;   /* マルチプロセッサモード */

      break;

default:

      return (ErrorInvalidParameter);

@@ -2011,7 +2011,7 @@

pstcMfsInternData->enMode = MfsCsioMode;

/* CSIOモードを設定 */

-    stcSMR.MD = 2u;

+    stcSMR.MD = MfsCsioMode;

/* Sマスター/スレーブモードを設定 */

switch(pstcConfig->enMsMode)

@@ -3372,7 +3372,7 @@

{

case I2cMaster:

case I2cSlave:

-     stcSMR.MD = 4u;

+     stcSMR.MD = MfsLinMode;

break;

default:

return (ErrorInvalidParameter);

@@ -4424,7 +4424,7 @@

pstcLin->SCR_f.UPCL = TRUE;

/* LINモードをHWおよびプリセット変数に設定 */

-     stcSMR.MD = 3u;

+     stcSMR.MD = MfsI2cMode;

/* シリアル出力を有効にする */

stcSMR.SOE = TRUE;

0 件の賞賛
114 件の閲覧回数
寄稿者