cc-rx コンパイラー のセクションについて (RX72M)

お世話になります。

cc-rx コンパイラー のセクションの使い方には 困っている、

教えていただければ、有難いとおもいます。

CPU RX72Mの評価ボードを使用していますが(AP-RX72M-0A)

CS+ V8.04 ; CC-RX V3.02.00 の環境です。

拡張のSDRAMを使用するのですが、

下記のグローバル変数(TEMP_SDRAM_DATA[256]) は SDRAMのセクション アドレス: 0x08000000 に配置しています。

//----------------------------------
#pragma section sdram
char TEMP_SDRAM_DATA[256];
#pragma section

//----------------------------------

上記の定義では、 ビルドして、 SDRAMを正常アクセスできるようになりました、

しかし SDRAMのセクショ部には 下記に int (32Bit)型の変数を定義したら、

//----------------------------------
#pragma section sdram
int Test777;
#pragma section

//----------------------------------

 

ソフトをビルドしたら、下記のエラーが出ました。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

0561120:Section address is not assigned to "Bsdram"
F0563100:Section address overflow out of range : "Bsdram"

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

SDRAMのセクションの定義は 下記画像の通りです

 

 

 

どうか、 SDRAMのセクション内の変数に対して

3タイプ :char, short , int 型変数に使える方法を教えていただけませんか?

 

宜しくお願いいたします

 

 

Parents
  • 通りすがりのものです。

    CCRXのマニュアルを見ますと、通常は、1つのセクションにつき
    1種類のアライメントの変数しか配置できないですが
    -nostuffオプションを指定することで1,2バイトのアライメントの変数を4バイトアライメントで配置できます。
    ただし、このオプションはC,D,B,Wというレベルでの指定しかできない為、
    特定のsdramセクションだけというのはできなさそうですね。

    解決策とはいえませんが、構造体で定義することでビルドは通ると思います。

    #pragma section B sdram
    typedef struct {
    char TEMP_SDRAM_DATA[256];
    int Test777;
    } t_SDRAM;
    t_SDRAM sddata;
    #pragma section
  • Crusoe さん
    ご回答、ありがとございます。
    残念ながら、 構造体で定義することでも、 同じビルドエラーが発生しました。
  • 以下の様に#pragma packを追加してもだめでしょうか?

    #pragma section B sdram
    #pragma pack
    typedef struct {
    char TEMP_SDRAM_DATA[256];
    int Test777;
    } t_SDRAM;
    t_SDRAM sddata;
    #pragma section

    あと、別の方法として以下もあると思います
    ・内蔵RAMに配置しているセクションをSDRAMに移動する
    ・コンパイルオプションの「初期値なし変数をアライメント4のセクションに配置する」を「はい」に設定
    (-nostuff=B)
  • Crusoe さん

    #pragma pack の追加で ビルドがエラーなしで 通りました。

    有難うございました。
Reply Children
No Data