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 型変数に使える方法を教えていただけませんか?

 

宜しくお願いいたします

 

 

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

    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 の追加で ビルドがエラーなしで 通りました。

    有難うございました。
  • RZFanさん、こんにちは。NoMaYと申します。

    念の為、確認したいのですが、この相談は、以下のように3つセクションを定義すれば良いことは分かっているけれども、諸般の事情でそうしたくない(1つだけセクションを定義したい)ので、どうすればよいか?という内容で合っていますでしょうか?(勘ですけども、Crusoeさんのリプライは、その次元でのリプライのような気がしたのです、、、でも、ひょっとして、もっと素朴な次元での相談なのかも?とも思いましたので、、、)

    Bsdram
    Bsdram_2
    Bsdram_1

    CS+の画面コピー

     

  • NoMaYさん
       
      ご指導、ありがとうございます。
      ご教授して頂いた通りに 
      
      セクション定義は 以下したら

      Bsdram
      Bsdram_2
      Bsdram_1

    下記のような char , short , int 型変数に配置できました、ビルドOK、正常動作できました。

      
    ------------------------------------------------------------------------------------------------------
    //
    #define ETHER_REV_SAVE_BUFF_SIZE 2048
    #define ETHER_SEND_SAVE_BUFF_SIZE 1024
    #define ETHER_SEND_SAVE_BUFFS 400
    //
    #pragma section sdram
    //
    struct ETHER_SEND_DATA
    {
    int savePoint;
    int readPoint;
    int size[ETHER_SEND_SAVE_BUFFS] ;
    char data[ETHER_SEND_SAVE_BUFFS][ETHER_SEND_SAVE_BUFF_SIZE];
    };
    //
    struct ETHER_SEND_DATA EtherSendData;
    //
    char EtherRevSaveData[ETHER_REV_SAVE_BUFF_SIZE];
    //
    int TestIntData ; //TEST
    short TestShortData; //TEST
    //
    #pragma section

    --------------------------------------------------------------------------------------------------------