どうやってRAMに持って行くの?

PCでプログラムを動かすときは、プログラムをRAMに展開して動かすわけだが、

マイコンではROMのプログラムを直接動かすことが多いのかな。

ROMから動かすならRAMへの展開とか考えなくてよいし、電源入れてすぐに動くし。

マイコンの性質にもよるでしょうけどね。


一方でパフォーマンスを重視したり、その他の事情によりRAM上にプログラムを展開して動かすこともある。

OSがあれば、OSがプログラムをRAMに展開したりしてくれるんだろうけど、OSがないシステムではどうするの?

やり方次第だが、けっこうめんどくさそう。


開発環境によるのだが、概ね次のような手順である。

  1. RAMに格納する関数を特定のセクション(例えば ramcode)に割り当てる
  2. 1.で割りあてたセクションをRAM領域の適当な領域に割り付ける
  3. 2.の領域のコピーをROM領域上に作る
  4. 初期化処理などで 3.の領域から2.の領域にデータを転送するプログラムをROM領域に作る

開発環境によっては、正しく設定さえすれば、そこまで考えずとも2~4をやってくれるようだが。


うちの職場でこれまで作ってきたシステムでもプログラムをRAMに展開することがなかったわけではない。

それはFlash ROMの書き換え用のプログラム。

ROMの書換を行うプログラムってROMに配置できないのよね。

よく考えれば当たり前のことなんだが。それができると、ROMを消したら実行中のプログラムが消えてしまうし。

ただ、メンテナンス用途でしか使わないし、変更頻度も低いので、手作業で作られている部分がけっこう多い。


ROMアクセスの遅さが足を引っ張っているシステムがあって、プログラムのRAMへの展開が検討されているが、

調べれば調べるほどめんどくさい仕組みだなぁと思う。

RAM展開するだけで、プログラム自体は大きく手が入らないだろうと思っていたが、なかなかそうもいかない。

乱暴に思えた他の対策案の方が実は考えるべきことは少ないかも知れない。

果たしてどうなることやら。