PDL 2.1.0での列挙型「en_mfs_mode」の誤った定義 - KBA229085 - Community Translated (JA)
- RSS フィードを購読する
- 新着としてマーク
- 既読としてマーク
- ブックマーク
- 購読
- 印刷用ページ
- 不適切なコンテンツを報告
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」です。
したがって、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;