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

はじめまして。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • FAQ 1011075

    デバッグ時、E1またはE20を使用してV850マイコンの外部バスに接続されたフラッシュメモリへダウンロードすることは可能ですか?

    は参考になるかと思いますが

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

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

    V850用はこれです↓

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

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

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

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

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

  • lKUZO様

    ありがとうございます。

    ご提示いただいたFAQを見てみました。

    デバッグ時でなくHEXファイルとしてマイコンにインストールする方法を知りたい状況です。

    すみません、ここが私の知識が乏しいため諸先輩方との認識が合わないところです。

    そもそも、フラッシュにライブラリのようなファイルを置いて参照はしないものなのでしょうか。

    実装したいのは表示言語を切り替えをコンパイルなしに行うことです。

    表示したい文字の文字コードがそれぞれ異なるため、

    作成しているファイルの文字コードを変換しないと表示文字が化けてしまいます。

    これを解決するために表示言語ごとにオブジェクトを作成してリンクさせて表示を行おうと思ったのですが、

    ROM容量オーバ的なメッセージで言語オブジェクトが格納できない状態になってしまいました。

    そこで、フラッシュRAM領域に空きがあるため、ここに格納して参照したいと思いリンクディレクティブに行き着き

    今に至っています。

  • 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 リンク・ディレクティブ」も参考になるかと思います。

  • lKUZO様

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

    とんでもございません。

    わかりやすいご説明、感謝いたします。

    基地のデータが参照される部分(const)でフラッシュ領域にアクセスするための

    指示を書いて使用する形ということですね?

    ユーザーズマニュアルを熟読して実行してみます。

  • チョコ様

    ありがとうございます。

    この部分の理解に時間が掛かっています・・・

    マニュアルをもっと読み込みます!

  • masa さん

    http://www2u.biglobe.ne.jp/~tequila/electro_850es.html

    にもセクション等わかりやすく説明しています。

  • lKUZO様

    返事が遅れて申し訳ありません。

    ありがとうございます。

    拝見いたします。