- - PR -
前回は、目の前のパソコンを通じてコンピュータの内部で何が行われているかを理解し、マイコンのアセンブラを理解するのに必要な基礎知識を固めた。今回はいよいよ、アセンブラでのマイコン・プログラミングに踏み込む。自作LEDフラッシャボードの完成までの道のりは、今回で八割までたどれると考えてよい。
AVR Studioを使って、プログラムを動かしてみよう
「AVR Studio」を最初に起動すると、プロジェクトの作成・選択画面が現れる(図1)ので、「New Project」を選択して次に進む。
次に、プロジェクトのタイプを選択する。「アセンブラかC言語か」ということなのだが、今回はアセンブラなので「Atmel AVR Assembler」を選択し、さらに「Project name」にプロジェクト名を入力する。今回まずは、
- 入出力ピン「PORT B」の7番〜0番(PB7〜PB0)を出力に設定する
- PB7〜PB0を「Low」にする
だけのプログラムを実行するため、プロジェクト名は「ledflash-low」とした(図2)。
図2 プロジェクトの設定(言語の選択、プロジェクト名の決定)
さらに進み、「Debug platform」で「AVR Simulator」を、「Device」で「ATmega16」を選択する(図3)。実際にATmega16を動作させるのではなく、「動作のシミュレーションを行ってみる」ということだ。
図3 プロジェクトの設定(デバッグ・プラットフォームとデバイスの設定)
シミュレータは万能ではないし、人が作る以上は不具合もあり得る。不具合がなくても、「シミュレーションは完ぺきなのに、実際に実行してみると問題が発生する」という問題が、実際にはしばしば発生する。計算機シミュレーションの結果は、どこまでも計算結果でしかないので、生々しいモノの世界では想定外の出来事が起こる。「シミュレータは当てにならないから嫌い」と公言する開発者は少なくない(注1)。
しかし、シミュレータがあれば、実際にモノがなくても、プログラムだけは動かしてみることができる。特に「初めて」の障壁を下げるのには有効なので、今回は利用する。シミュレータの中では、どういう失敗をしてもモノは何も壊れない。そう思えば、アセンブラが初めてでも、まったく怖くない気分にならないであろうか?
ここまでの設定が終わると、図4の画面が現れる。
中心の真っ白なウィンドウが、プログラムを書き込むための場所だ。ここに、リスト1のソースコードを書き込み、「File」→「Save」で保存する。内容は分からないままで構わない。
; PORTBをLOWにするプログラム |
| リスト1 PORTBをLOWにするプログラム |
次に「Build」→「Build」でアセンブルを行い、このソースコードを機械語にする。エラーがなければ、次に動作のシミュレーションを行うことができる。「Debug」→「Start Debugging」で、シミュレーションが開始される。このとき、ソースコードの「RESET:」の次の行の左側に、黄色い矢印が表示されているはずだ(図5)。
「これからその行を実行する」ということであるが、まだ実行されていない。この状態で、「View」→「Toolbars」で「Processor」にチェックを入れて画面左側に表示させ、リストから「Registers」をクリックし、その中の「R16」が視野に入るようにする。右側の「I/O View」で「PORTB」を選択すると、その下に「PORTB」「DDRB」「PINB」が表示される(図6)。
「F11」キー(Step Into)を押し続けると、黄色い矢印が1行ずつ下に進んでゆき、プログラムがステップ実行される様子が分かる。同時に、左側の「R16」や、右側の「DDRB」の表示に何か変化が起こる。黄色い矢印は最後の行の下には進まない。最後の行で「F11」を押すと、矢印は実行を開始した行に戻る。もう一度、最初から実行したかったら、「Debug」→「Reset」でリセットしたことにして、また「F11」を押してステップ実行する。
あなたがアセンブラでプログラムを書くのが初めてで、内容がまったく分からないままのコピー&ペーストであるとしても、とにもかくにも、あなたの書いたプログラムは動いている。まずは祝おうではないか。
| 注1:筆者は足掛け20年ほど、計算機シミュレーションにかかわり続けている。その立場からも、ぜひ、シミュレータを過信しないでいただきたいと願う。想定外の出来事はシミュレーション技術の重要な推進力なのだが、実在するシミュレータは、必ずどこかが不完全なものである。「当てにならない」といわれたら、筆者は「済みません。でも、そういうものだと思って使ってもらえませんか?」というしかないのだ。 |
関連記事 半導体/エレクトロニクス
- 連載:イチから作って丸ごと学ぶ! H8マイコン道
- 特集:組み込みシステムに吹く“仮想化”の風
- 連載:組み込みマルチコア進化論(連載中)
- 連載:必修! FPGAタイミング解析の基礎(全5回)
- 連載:−ザ・組み込み−ソフトウェアのハードウェア化(連載中)
- 連載:S08ではじめるマイコン制御プログラミング(全6回)
- 連載:マイコン制御基礎の次(連載中)
- 連載:マイコン制御基礎の基礎(全10回)
- 連載:マイコン制御基礎以前(全10回)
- 連載:H8で学ぶマイコン開発入門(全13回)
- 連載:触って学ぼう FPGA開発入門(全6回)
- 連載:FPGA開発テクニック、チューニングの心得(全6回)
- 特集:いまさら聞けない FPGA入門
- 連載:バラして納得! 電子部品入門(全18回)
- 連載:完全マスター! 電子回路ドリル III(全14回)
- 連載:完全マスター! 電子回路ドリル II(全25回)
- 連載:完全マスター! 電子回路ドリル(全25回)
- 目指せ! 電子回路マスターへの道
- 目指せ! 電子回路マスターへの道 Part2
- 分かっておきたい、IP活用の落とし穴
ホワイトペーパー(TechTargetジャパン)
組み込み開発フォーラム 新着記事
- ブロック定義図の基礎(2010/2/8)
- 微細化を超える革新が見えたアルテラ28nm FPGA(2010/2/5)
- OESFとJASAが提携、Android技術認定制度の構築へ(2010/2/5)
- ないと困る!? ファイルシステムのありがたみ(2010/2/4)
- カーエレの進化を支える組み込みソフトウェア開発(2010/2/2)
- アルテラ、28nm FPGAに向けた最先端技術を発表(2010/2/2)
- 【問題6】 高速化技術「パイプライン制御」について(2010/2/1)
- AndroidのカーネルをLinux以外のOSに置き換える(2010/2/1)
- いま振り返るFPGA普及・発展の歴史(2010/1/27)
- 割り込みテクニックでタイマを使おう(2010/1/26)
- Silverlight for Windows Embeddedの実装方法(2010/1/25)
- 【問題5】 ページング方式の「仮想記憶」について(2010/1/20)















