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

Version 2

    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;