シリアル割り込みを使って、2つのプログラムを並行動作させる:「mbed」で始めるARMマイコン開発入門(10)(3/3 ページ)
“割り込み”の概念を理解することで、複数のプログラムを並行しているかのように処理できますが、その方法はタイマーを使うだけではありません。今回はシリアル割り込みを使った並行動作について学びます。
Tickerとの比較
前回のTickerを使ったタイマー割り込みと今回のシリアル受信割り込みのプログラムを比較してみましょう。
前回のプログラムも今回のプログラムも非常に似た動作になることに気が付かれたでしょうか。元になった2つのプログラムが同じなので、当然といえば当然なのですが、2つの構造は全く異なります。
このプログラムでは、発光ダイオードの点滅とシリアルポートに対するエコー処理(受信したデータを送信元に送り返す)という2つの処理が同時に並行して実行されているように見えますね。
前回紹介したTickerを用いたプログラムは、メインルーチンでシリアルポートのエコー処理を行い発光ダイオードの点滅をTickerによる割り込み処理関数で行っています。これに対して今回紹介したシリアル割り込みを使ったプログラムでは、メインルーチンで発光ダイオードの点滅処理を行い、割り込み処理関数でシリアルポートのエコー処理を行っています。
(編注:初出時、Tickerを用いた割り込みとシリアル割り込みについて全く同じと記載しましたが、正しくは異なりますので、当該箇所を修正いたしました 2015/07/22)
1: #include "mbed.h" 2: Ticker timer; 3: DigitalOut led1(LED1); 4: Serial pc(USBTX,USBRX); 5: void attime(){ 6: led1 = !led1; 7: } 8: int main(){ 9: led1 = 1; 10: timer.attach(&attime,0.5); 11: while(1){pc.putc(pc.getc());} 12: }
おわりに
2回に渡って、割り込み処理を用いて2つの処理を(擬似的に)同時処理させる方法について考えてみました。前回のプログラムと今回のプログラムでは動作こそ同じに見えるのですが、メインルーチンで行う処理と割り込み処理関数で行う処理が逆になっていましたね。
割り込み処理を使ったプログラムを設計する場合、どちらをメインルーチンにしてどちらを割り込み処理関数で処理させるかは思案のしどころかと思います。例えばLEDの点滅時間を正確に行いたい場合は、前回のTicker割り込みを使うべきでしょう。このあたりは、組み込み技術者として腕の見せ所ですね。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「割り込み」を理解してタイマーを使いこなす
ARMマイコン「LPC1114」には周辺機器としてタイマーが搭載されており、“割り込み”の概念を理解することで、複数のプログラムを並行しているかのように処理できます。 - ARMマイコンからのPWM出力でLEDを“ボヤっと”光らせる
デジタルの出力は本来「0」か「1」ですが、PWM出力を用いれば疑似的なアナログ出力を得ることができます。ARMマイコン「LPC1114」を使って、LEDを“ボヤっと”光らせてみたり、サーボモータの制御に挑戦してみましょう。 - ARMマイコンに内蔵された周辺デバイスの使い方を学ぶ−アナログ入力編−
ARMマイコン「LPC1114」にはさまざまな周辺デバイス(ペリフェラル)が内蔵されています。今回はアナログ信号をデジタル信号に変換するA/Dコンバータの使い方を学びます。