PSoC® 6の両方のコア用の作業用フラッシュ領域を管理する- KBA224173 - Community Translated (JA)

Version 4

    Community Translated by YoOb_1790021 Expert       Version: **

     

    Translation - English: Manage Working Flash Space for Both Cores of PSoC® 6 – KBA224173

     

    質問:

    PSoC® 6プロジェクトでは、両方のコアが作業用フラッシュを占有しているとビルドエラーが発生する可能性があります。両方のコア用の作業用フラッシュ領域を適切に管理するにはどうすればよいですか?

     

    回答:

    PSoC 6の場合、デフォルトでは、コンパイラーは常に両方のコアにEEPROMエミュレーション用に作業用フラッシュの全範囲(0x14000000-0x14008000)を割り当てます。どちらのコアも同じフラッシュオブジェクトで動作します。 単一コアのメモリ範囲で非同期操作が発生すると、ビルドエラーが発生します。

    作業用フラッシュを占有する複数のコンポーネントが同時に使用されている場合、たとえば、Bluetooth Low Energy(BLE)と EEPROM では、elf ファイルの生成中にビルドエラーが発生します。このエラーは、ボンディングリストを保存するためにBLEに割り当てられた作業フラッシュ領域があり、そしてこの領域はBLEホストが存在するコアにのみに割り当てられるために発生します。2つのコア間のこの非同期により、ビルドが失敗します。

     

    ビルドエラーを回避するには、以下の方法に従います:

     

    方法1:作業用フラッシュを1つのコアのみに割り当てる

     

    1つのコアのみが作業用フラッシュにアクセスする必要がある場合は、リンカーファイルから関連セクションを削除して、手動で他のコアを分離します。ここでは、Arm® Cortex® M4 のみが作業用フラッシュにアクセスすると仮定します。次に、Cortex M0+ リンカーファイル(cy8c6xx7_cm0plus.ld)の次のコード スニペットのいずれかをコメントアウトまたは削除します:

    スニペット1:

    em_eeprom         (rx)    : ORIGIN = 0x14000000, LENGTH = 0x4000   

    スニペット2:

    /* Emulated EEPROM Flash area */

    .cy_em_eeprom :

       {

    KEEP(*(.cy_em_eeprom))

    } > em_eeprom

    ここで、cy_em_eeprom は、システムによって自動的に em_eeprom 領域に定義される唯一のセクションです。

     

    方法2:2つのコアそれぞれの作業用フラッシュ領域に分割する

    この方法を実装するには、2つのコアのそれぞれのリンカーファイルを変更します:

    cy8c6xx7_cm0plus.ld:

    em_eeprom (rx)    : ORIGIN = 0x14000000, LENGTH = 0x4000  

    cy8c6xx7_cm4_dual.ld:

    em_eeprom         (rx)    : ORIGIN = 0x14004000, LENGTH = 0x4000

     

    デフォルトでは、コンパイラは両方のコア用に作業用フラッシュの全範囲を割り当てます (ORIGIN = 0x14000000, LENGTH = 0x8000)。方法2では、コアごとに1つずつ、2つの別々の部分に手動で分割します。1つのコアが自身の作業用フラッシュ領域に発行したアクションは、他方のコアに指定された領域に影響を与えません。

     

    この方法の欠点は、割り当てられると、各コアのメモリ空間の範囲が固定されることです。各コアに必要な大まかなメモリサイズを認識し、適切に割り当てる必要があります。