マイコンによっては、メモリアドレスがコードエリア、データエリアに分けられています。データエリアではプログラム実行はできません。一部のマイコンは、データエリアにRAMが割り当てられています。そのようなマイコンでは、RAMでプログラムを実行できません。
例えば、ハーバードアーキテクチャで、データバスしかRAMに割り当てられていなくて、かつ、データバスからプログラムを実行できない場合などは、RAMではプログラムが実行できません。
まずはマイコンの仕様を確認しましょう。
本記事で例としてあげるSTM32ファミリの場合は、ハーバードアーキテクチャですが、RAMでプログラムを実行することができます。
内蔵RAMにユーザーのプログラムをロードし、実行する方法は、マイコンごとに異なります。しかし、一般的には、次の2種類の方法に分けられます。
1. IDEでプログラムコードを作成後、直接内蔵RAMにプログラムをロードし、実行する方法
2. フラッシュメモリからプログラムをRAMに転送して、実行する方法
「1.」は、IDEでプログラムを作成し、通常ならフラッシュメモリにそのコードをロードしてから実行しますが、その際に、最初から内蔵RAMにロードして、RAMの先頭アドレスから実行する方法です。
「2.」は、IDEでプログラムを作成し、いったん、フラッシュメモリにそのコードをロードして、実行します。ですが、途中で、プログラムコードをRAMに転送し、その後、転送先のRAMのアドレスにジャンプして、そのままRAM上で、プログラムを実行する方法です。
具体的な方法は、マイコンによって異なりますので、各製品のマニュアルを確認してください。本記事ではSTM32ファミリを例にとって説明します。
STM32ファミリの中でも、製品ごとに具体的な方法は異なります。「STM32F103」では、Boot1とBoot0という端子があり、両方Highレベルに設定して、IDEで開発したプログラムコードを書き込むと、マイコンのハードウェアによって自動的にRAMに書き込まれ、RAM上でプログラムを実行します(図2参照)。
別の製品である「STM32F051」では、オプションバイトというハードウェア・オプションを決めるレジスタがあり、そのレジスタの設定内容にしたがって、プログラムコードをフラッシュメモリに書き込むか、RAMに書き込むかを設定します。
STM32F405では、さらにメモリ再配置レジスタというレジスタを使って、プログラムをスタートした後に、RAMでプログラムを実行するかどうかを選択できます。
IDEのオプションで、プログラムコードをフラッシュメモリに書き込んで実行するか、RAMに書き込んで実行するかを設定することができます。これはマイコンではなくIDEの仕様に依存しますので、IDEのマニュアルを確認してください。
Copyright © ITmedia, Inc. All Rights Reserved.