PSoC 4 で定数を固定アドレスに配置する方法 - KBA229222 - Community Translated (JA)

Version 1

    Community Translated by  MoTa_728816          Version: **

     

    質問:

    PSoC® 4 数を固定アドレスに配置するのにはどうしたら良いですか

     

    回答:

    数はフラッシュメモリの固定アドレスに配置することが可能です。その為にはリンカコントロールファイル (リンカスクリプト) 変更する必要があります

     

    アプリケーションのメモリ領域と定数を保存するストレージ領域が重複しないように、アプリケーションの最終アドレスを算出して目的の定数を置くアドレスを決定する必要があります

     

    以下の手順にしたがって PSoC 4 用の GCC MDK コンパイラ のリンカコントロールファイルを更新して定数を定義してください

     

    1. プロジェクトを開いてビルドします。これはリンカスクリプトを生成するために必要です。

     

    2. リンカスクリプトのあるディレクトリ \<プロジェクト名>.cydsn\Generated_Source\POC<4, 5>\.  へ移動します。

     

    GCC コンパイラでは、リンカコントロールファイルは cm0gcc.ld\cm0plusgcc.ld という名称です

     

    MDK コンパイラでは、リンカコントロールファイルは Cm0RealView.scat / Cm0plusRealView.scat という名称です

     

    3. 対象となるリンカスクリプトを選択して同じディレクトリ内に複製後、名称を変更します。たとえば cm0gcc.ld custom_cm0gcc.ld と名称変更します。 (様に Cm0RealView.scat Custom_Cm0RealView.scat と名称変更します。)

     

    4. Build Settings ダイアログを開きます。左側の枠から、選択したコンパイラの下にある Linker を展開します。General を選択します。そして Custom Linker Script 横にある [...] ボタンをクリックして、適切なファイルを選択してください

     

    GCC では、custom_cm0gcc.ld を選択します

     

    MDK では、ファイルタイプを *.scat 変更してから Custom_Cm0RealView.scat を選択します

     

    5. OK をクリックします。

     

    6. GCC コンパイラでは、カスタムリンカスクリプト ( custom_cmogcc.ld ) を開いて以下の記述を見つけてください:

     

    .cy_checksum_exclude : { KEEP(*(.cy_checksum_exclude)) } >rom

     

    a. 下記のコードをコピーし上記の記述の直後に張り付けてください

     

    #define MY_VAR_START_ADDRESS      <フラッシュ内の絶対アドレス>

    .my_emulated_eeprom MY_VAR_START_ADDRESS :

    {

    KEEP(*(.my_var_fix_addr))

    } >rom

     

    b. 変更結果を保存して、ファイルを閉じてください。

     

     MDK コンパイラでは、カスタムリンカスクリプト ( Custom_CmoRealView.scat ) を開いて以下の記述を見つけてください:

    APPLICATION APPL_START (CY_FLASH_SIZE - APPL_START)

    {

        ...

    }

     

    a.下記のコードをコピーし上記の記述の直後に張り付けてください

     

    #define MY_VAR_START_ADDRESS      <フラッシュ内の絶対アドレ>

    EM_EEPROM ( MY_VAR_START_ADDRESS )

    {

    . my_var_fix_addr+0

    {

    *(.my_var_fix_addr)

    }

    }

     

    b. 変更結果を保存して、ファイルを閉じてください

     

    7. 新規に作成されたセクションに定数を宣言します。それのためには、フラッシュに配列を宣言します。下記が配列宣言の例です

     

    const uint8 Test[512]

    CY_SECTION(".my_var_fix_addr") = {0xFFu,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,0x55};