これまで、私はRAMとフラッシュの両方がチップに直接格納された8ビットAVRとMSP430で多くの作業を行ってきました。あなたがプログラムをコンパイルしてダウンロードするとき、それは「ちょうどうまくいく」のようなもので、実際に変数がどこにどのように格納されるか心配する必要はありません。マイクロコントローラで外部メモリを使用する方法
今私はマイクロコントローラ(TI Stellaris LM3S9D92)にいくつかの外部メモリを追加したいと思っていますが、コードをどのように使用するのかは完全にはわかりません外部RAM。どのように他の周辺機器と同様に外部バスを設定するのか分かりますが、私が混乱させるのは、プロセッサがどのように外部メモリと通信するのか、またいつ内部のものと通信するのかを把握する方法です。
私が知る限り、外部RAMは内部SRAMと同じアドレス空間にマップされています(内部は0x20000000から開始し、外部は0x60000000から開始します)。
int* x= 0x20000000;
int* y= 0x60000000;
は、xとyは、それぞれ内部および外部RAMの(32ビットint型を仮定して)最初の4つのバイトを指すことになります:私はこのような何かを書いた場合には、ということですか?もしそうなら、私はこのような何かなかった場合、どのような:
int x[999999999999]; //some super big array that uses all the internal ram
int y[999999999999]; //this would have to be in external ram or it wouldn't fit
を私はメモリの各タイプがあるか、私はそれがすべて間違っているとハードウェア持たない場所の境界に関する何かを伝えるために必要があるだろうと想像しますそれはそれ自身で出てくるのですか?リンカスクリプトはこれを処理しますか?彼らはメモリマッピングと何か関係があると知っていますが、私は正確に何がわかりません。 ARMクロスコンパイラをセットアップする方法を読んだ後、私はwinavr(avr-gcc)のようなものが私のためにこのように多くのことをやっていたので、それに対処する必要はないと感じました。
私はこのようなものと正しい軌道にいるかどうか誰かが私に教えてもらえれば、ちょっと散歩に申し訳ありませんが、本当に感謝します。将来の読者のために
更新
私はhttp://www.bravegnu.org/gnu-eprog/index.htmlをグーグルでの別の数時間後にこれを見つけました。ここの答えと組み合わせると、それは私を大いに助けました。
http://electronics.stackexchange.com/でお問い合わせください。また、[Stellarisのデータシート](http://www.ti.com/lit/ds/spms257a/spms257a.pdf)も参照してください。 –