マイコン制御基礎以前

マイコン制御基礎以前(8)

アセンブラなんて簡単じゃないか

みわよしこ(執筆協力:山本栄一、小椋秀一)  2007/11/27

組み込み開発の中でも、ハードウェアに近い部分を担当するエンジニアは慢性的に不足している。本連載は、ハードウェアが分かる組み込みソフトウェア開発者になるために、最も基礎的な知識から解説していく。(編集部)

- PR -

 前回は、目の前のパソコンを通じてコンピュータの内部で何が行われているかを理解し、マイコンのアセンブラを理解するのに必要な基礎知識を固めた。今回はいよいよ、アセンブラでのマイコン・プログラミングに踏み込む。自作LEDフラッシャボードの完成までの道のりは、今回で八割までたどれると考えてよい。

AVR Studioを使って、プログラムを動かしてみよう

 「AVR Studio」を最初に起動すると、プロジェクトの作成・選択画面が現れる(図1)ので、「New Project」を選択して次に進む。

図1 AVR Studioの起動画面画面をクリックすると拡大します

 次に、プロジェクトのタイプを選択する。「アセンブラか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の画面が現れる。

図4 AVR Studioの作業画面画面をクリックすると拡大します

 中心の真っ白なウィンドウが、プログラムを書き込むための場所だ。ここに、リスト1のソースコードを書き込み、「File」→「Save」で保存する。内容は分からないままで構わない。

; PORTBをLOWにするプログラム
;
.include "m16def.inc"


.def TEMP = R16 ; レジスタR16に「TEMP」と命名


.org 0x0000     ; リセット時にプログラムメモリの0番地から実行


RESET:
          ldi     TEMP,  0xFF      ; TEMPに 0xFF を書き込む
          out     DDRB,  TEMP      ; PORTBを出力にセット


PORTB_LOW:
          ldi     TEMP,  0x00      ; TEMPに 0x00 を書き込む
          out     PORTB, TEMP      ; PORTBにTEMPの内容を書き込む
リスト1 PORTBをLOWにするプログラム

 次に「Build」→「Build」でアセンブルを行い、このソースコードを機械語にする。エラーがなければ、次に動作のシミュレーションを行うことができる。「Debug」→「Start Debugging」で、シミュレーションが開始される。このとき、ソースコードの「RESET:」の次の行の左側に、黄色い矢印が表示されているはずだ(図5)。

図5 シミュレーションの実行画面をクリックすると拡大します

 「これからその行を実行する」ということであるが、まだ実行されていない。この状態で、「View」→「Toolbars」で「Processor」にチェックを入れて画面左側に表示させ、リストから「Registers」をクリックし、その中の「R16」が視野に入るようにする。右側の「I/O View」で「PORTB」を選択すると、その下に「PORTB」「DDRB」「PINB」が表示される(図6)。

 「F11」キー(Step Into)を押し続けると、黄色い矢印が1行ずつ下に進んでゆき、プログラムがステップ実行される様子が分かる。同時に、左側の「R16」や、右側の「DDRB」の表示に何か変化が起こる。黄色い矢印は最後の行の下には進まない。最後の行で「F11」を押すと、矢印は実行を開始した行に戻る。もう一度、最初から実行したかったら、「Debug」→「Reset」でリセットしたことにして、また「F11」を押してステップ実行する。

図6 シミュレーションの終了画面をクリックすると拡大します

 あなたがアセンブラでプログラムを書くのが初めてで、内容がまったく分からないままのコピー&ペーストであるとしても、とにもかくにも、あなたの書いたプログラムは動いている。まずは祝おうではないか。

注1:筆者は足掛け20年ほど、計算機シミュレーションにかかわり続けている。その立場からも、ぜひ、シミュレータを過信しないでいただきたいと願う。想定外の出来事はシミュレーション技術の重要な推進力なのだが、実在するシミュレータは、必ずどこかが不完全なものである。「当てにならない」といわれたら、筆者は「済みません。でも、そういうものだと思って使ってもらえませんか?」というしかないのだ。
  • 連載バックナンバー
  • 全記事インデックス
  • 組み込み開発トップ
  • MONOistトップ

スキルアップ/キャリアアップ(JOB@IT)

スポンサーからのお知らせ

- PR -
@IT Sepcial

震災関連・復興支援情報

震災関連・復興支援情報
@IT MONOist/EE Times Japan/環境メディアの製造業技術者向け3メディアを中心に、震災関連/復興支援情報を集めました

次世代エンベデッドコーナー

次世代エンベデッド
“次世代”の組み込み機器を開発するエンジニアを支援するコーナー。新潮流・新技術をインタビューやコラム、解説記事で分かりやすく紹介!

Windows Embeddedコーナー

Windows Embedded
Windows Embedded専門コーナー。Windows Embedded StandardやWindows Embedded CEをはじめとする「Windows Embedded」ファミリの最新動向や技術情報をお届けします!!

Androidコーナー

Android
Android専門コーナー。組み込みデバイスへの適用からアプリケーション開発、イベントレポート、ニュースなどAndroidに関するさまざまな技術情報がここに集結!!

@IT MONOist 求人情報

- PR -