メディア
連載
» 2017年01月26日 11時00分 公開

Q&Aで学ぶマイコン講座(34):RAMで命令を実行する方法 (2/3)

[菅井賢(STマイクロエレクトロニクス),EDN Japan]

まずはRAMでプログラムが実行できるか確認

 マイコンによっては、メモリアドレスがコードエリア、データエリアに分けられています。データエリアではプログラム実行はできません。一部のマイコンは、データエリアにRAMが割り当てられています。そのようなマイコンでは、RAMでプログラムを実行できません。

 例えば、ハーバードアーキテクチャで、データバスしかRAMに割り当てられていなくて、かつ、データバスからプログラムを実行できない場合などは、RAMではプログラムが実行できません。

 まずはマイコンの仕様を確認しましょう。

 本記事で例としてあげるSTM32ファミリの場合は、ハーバードアーキテクチャですが、RAMでプログラムを実行することができます。

方法はさまざま

 内蔵RAMにユーザーのプログラムをロードし、実行する方法は、マイコンごとに異なります。しかし、一般的には、次の2種類の方法に分けられます。

1. IDEでプログラムコードを作成後、直接内蔵RAMにプログラムをロードし、実行する方法
2. フラッシュメモリからプログラムをRAMに転送して、実行する方法

 「1.」は、IDEでプログラムを作成し、通常ならフラッシュメモリにそのコードをロードしてから実行しますが、その際に、最初から内蔵RAMにロードして、RAMの先頭アドレスから実行する方法です。

 「2.」は、IDEでプログラムを作成し、いったん、フラッシュメモリにそのコードをロードして、実行します。ですが、途中で、プログラムコードをRAMに転送し、その後、転送先のRAMのアドレスにジャンプして、そのままRAM上で、プログラムを実行する方法です。

 具体的な方法は、マイコンによって異なりますので、各製品のマニュアルを確認してください。本記事ではSTM32ファミリを例にとって説明します。

直接内蔵RAMにプログラムをロードする方法

1)マイコンのハードウェア・オプションで指定する方法

 STM32ファミリの中でも、製品ごとに具体的な方法は異なります。「STM32F103」では、Boot1とBoot0という端子があり、両方Highレベルに設定して、IDEで開発したプログラムコードを書き込むと、マイコンのハードウェアによって自動的にRAMに書き込まれ、RAM上でプログラムを実行します(図2参照)。

図2 図2:直接内蔵RAMに命令をロードする方法 (クリックで拡大)
STマイクロエレクトロニクス製マイコン「STM32F103」の場合

 別の製品である「STM32F051」では、オプションバイトというハードウェア・オプションを決めるレジスタがあり、そのレジスタの設定内容にしたがって、プログラムコードをフラッシュメモリに書き込むか、RAMに書き込むかを設定します。

 STM32F405では、さらにメモリ再配置レジスタというレジスタを使って、プログラムをスタートした後に、RAMでプログラムを実行するかどうかを選択できます。

2)IDEのオプションで指定する方法

 IDEのオプションで、プログラムコードをフラッシュメモリに書き込んで実行するか、RAMに書き込んで実行するかを設定することができます。これはマイコンではなくIDEの仕様に依存しますので、IDEのマニュアルを確認してください。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.