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

cross mob

冗長コピーから復元したときのEm_EEPROM コンポーネント読み出し関数の誤データ返送 - KBA227530 - Community Translated (JA)

冗長コピーから復元したときのEm_EEPROM コンポーネント読み出し関数の誤データ返送 - KBA227530 - Community Translated (JA)

ChaitanyaV_61
Employee
Employee
50 questions asked 25 likes received 25 sign-ins

Community Translated by  YoOb_1790021          Version: **

Translation - English: Em_EEPROM Component Read Function Returns Incorrect Data when Restored from a Redundant Copy - KBA22...

内容:

PSoC® 3、PSoC 4、PSoC 5LP、または PSoC 6 MCUデバイス用の Em_EEPROM コンポーネント v2_0、v2_10 または v2_20 を用いた PSoC Creator™ 4.2 プロジェクト。

PSoC 6 MCUのエミュレートEEPROMミドルウェアを使用する psoc6sw-1.0 または psoc6sw-1.1 ライブラリを用いた ModusToolbox™ IDE プロジェクト。

問題:

冗長コピーが有効で、冗長コピーからデータが復元されると、Em_EEPROM_Read() および Cy_Em_EEPROM_Read() 関数は、Em_EEPROM にデータを復元しますが、結果として誤ったデータを返します。2番目の読み出し操作では、Em_EEPROM から正しいデータを返します。

原因:

この問題は、ポインタ演算のエラーが原因で発生します - 合算演算は、タイプの異なる2つのオペランド (uint32_t * と uint32_t) で実行されるため、予測できない演算結果が生じます。

回避策:

次の回避策を使用して問題を修正できます。

1.cy_em_eeprom.c ファイルを探し出して、そのバックアップを作成してください。PSoC ファミリとコンポーネントのバージョンに応じて、このファイルは次のディレクトリにあります。

     PSoC Creator 4.2 と PSoC 3, PSoC 4, またはPSoC 5LP

     a. Em_EEPROM v2_10

     C:\Users\<Username>\Documents\PSoC Creator\4.2\Downloads ( 4.2).cylib\Em_EEPROM_Dynamic_v2_10\API\cy_em_eeprom.c

     b. Em_EEPROM v2_20

     C:\Users\<Username>\Documents\PSoC Creator\4.2\Downloads ( 4.2).cylib\Em_EEPROM_Dynamic_v2_20\API\cy_em_eeprom.c

     PSoC Creator 4.2 と PSoC 6 MCU

     a. PDL 3.0.4

     C:\Program Files (x86)\Cypress\PDL\3.0.4\middleware\em_eeprom\cy_em_eeprom.c

     b. PDL 3.1.0

     C:\Program Files (x86)\Cypress\PDL\3.1.0\middleware\em_eeprom\cy_em_eeprom.c

     ModusToolbox と PSoC 6 MCU

     a. ModusToolbox v1.0

     <user_home>\ModusToolbox_1.0\libraries\psoc6sw-1.0\components\psoc6mw\em_eeprom\cy_em_eeprom.c

     b. ModusToolbox v1.1

     <user_home>\ModusToolbox_1.1\libraries\psoc6sw-1.1\components\psoc6mw\em_eeprom\cy_em_eeprom.c

2.cy_em_eeprom.c ファイルの CheckCrcAndCopy() 関数コードを更新してください。

     注:PSoC Creator および PSoC 6 MCU のコードを更新するには、管理者権限で編集ソフトウェアを実行してください。

次のコードを見つけてください。

if(CY_EM_EEPROM_SUCCESS == ret)

{

   (void)memcpy((void *)(dstAddr), (void *)(writeRamBuffer + rowOffset), numBytes);

}

...

          上記で見つけたコードを回避策を含む次のコードに置き換えてください。

if(CY_EM_EEPROM_SUCCESS == ret)

{

    (void)memcpy((void *)(dstAddr), (void *)((uint32_t)writeRamBuffer + rowOffset), numBytes);

}

...

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