フラッシュメモリにオブジェクトを配置する方法

はじめまして。

よろしくお願いいたします。

c言語については理解できていると思っているのですが、

マイコンプログラミングがいまいち理解できていない状態です。

現在、ROM領域に入らない大きさのオブジェクトを外部フラッシュに格納する方法で困惑しております。

リンクディレクティブによって設定できるそうなのですが、リンクディレクティブ事態がよくわかりません。

CubeSuiteのヘルプからサンプルファイルを参照し、

内蔵ROM、内蔵RAMの設定があることは確認できました。

(この部分にどんなことが書いてあってどう設定するのかは理解できていません。)

その後、#pragma 指定で行うようなのですが

ここもどう指定してよいかが理解できません。

#pragma section で変数や関数を置くことはわかっているのですが、

オブジェクトやライブラリを置く方法がわかりません。

リンクディレクティブを設定し、

フラッシュ領域にオブジェクト、ライブラリを格納する方法を

ご教示いただけないでしょうか。

よろしくお願いいたします。

Parents
  • コンパイラが生成するセクションとリンカの働きが理解できていないようですね。

    ヘルプでは断片的な情報になってしまうので、コンパイラのマニュアルを参照する事をお勧めします。

    V850用はこれです↓

    このマニュアルの「3. 4 セクション名一覧」「第 5 章 リンク・ディレクティブ仕様」「第 8 章 ROM 化」にセクション・リンカについて書かれています。

    リンカの設定を変更した時は、リンカが出力するMAPファイルを必ず確認して下さい。

    所望のオブジェクトが出来ても、デバッグ時に外部フラッシュに書込む手段が必要になりますが、それはIKUZOさん紹介のFAQに概要が書かれています。

    さらに、デバッグ完了後はリリース方法についても考える必要があります。

    内蔵フラッシュと外部フラッシュは別に書く必要がありますので、ROMイメージファイルも別々に生成する必用があるはずです。

  • windypon様

    ありがとうございます。

    まさにおっしゃる通りで、コンパイラ、セクション、リンクが理解できていません・・・

    ご提示いただいたユーザーズマニュアルをダウンロードして勉強します。

    そのうえでまた質問をさせていただきたく思いますので、

    その時はまたご指導をおねがいできますでしょうか。

    よろしくお願いいたします。

  • CubeSuite+ V2.00.00 統合開発環境 ユーザーズマニュアル コーディング編 (CX コンパイラ)

    「3. 4 セクション名一覧」「第 5 章 リンク・ディレクティブ仕様」「第 8 章 ROM 化」

    簡単に説明しますと(一般的な例ですV850そのものではありませんが似たようなものと思います)

    C言語の実行される部分(code)

    既知のデータが参照される部分(const)

    データの内容が変わりうる部分(data)

    というように区分けした領域(アドレス)をセクションと呼び

    これを全てROMにすることは無理なので

    C言語の実行される部分(code)->ROM

    既知のデータが参照される部分(const) ->ROM

    データの内容が変わりうる部分(data)->RAM

    というような約束を指定しないとうまく動作しません

    C言語の実行される部分(code)->ROM (0x0000~0x3FFF)

    既知のデータが参照される部分(const) ->ROM(0x4000~0x7FFF)

    データの内容が変わりうる部分(data)->RAM(0xF000~0xF800)

    というようなアドレスの割り当てが必要になります

    この上さらに外部ROMを増設する場合は

    セクション名を xrom2とでもしてセクション属性とアドレス設定してプロジェクトに追加して

    外部ROM部分(xrom2)->ROM(0x8000~0x8400)ここにデータを入れておけば

    #pragma section で呼び出して使用できるようになります

    長文になりましたが(マニュアルにあるので余分なことかもしれませんが)

     

  • チョコです。

    「2. 6 リンク・ディレクティブ」も参考になるかと思います。

Reply Children