プロが教えるわが家の防犯対策術!

arduinoって同時にプログラム実行できないんでしょうか。例えばシリアル通信中にLチカをして通信状態確認するとか。回答よろしくお願いします。

A 回答 (3件)

>arduinoって同時にプログラム実行できないんでしょうか。



できません。
ちなみにマルチコアなどでない限りPCでも同時に実行できるのは1つの命令が基本です。
# 最近はマルチコアも普通になってきていますが。

>例えばシリアル通信中にLチカをして通信状態確認するとか。

処理を細切れにして実行するようにスケッチを作成すれば可能です。

シリアルの受信バッファにデータがあったら1文字(1Byte)読み込んで配列に格納。なかったら次の処理へ。
時間を取得して、前回のLED点灯(または消灯)から一定時間過ぎていたらLEDを消灯(または点灯)。
シリアルからの受信データがある程度貯まったら内容判定して必要な処理を実行、

というかんじでループ中に細切れに処理していきます。
# シリアル送信も1ループ中に1文字(1Byte)だけ送信。とか。
    • good
    • 1

回答が難しいですね…。



マルチコアでないので、本当に同時に、任意のプログラムを実行することは、できません。
ただし、

本当に同時に実行していなくても、数ミリ秒程度の間隔で別のプログラムを順に実行すれば人間の目には同時に見えます。
これはPCでも行っていることです。あまりArduinoでこれ(時分割マルチタスク)を行うのは一般的ではないですが、やってできないことはないでしょう。

もうひとつ、プログラムを実行するのはマイコンの中のCPUですが、マイコンにはCPU部の他に周辺機能(ペリフェラル)があります。
マイコンによってできる機能は違いますが、大抵のマイコンではシリアル通信をするとかPWMでLEDを点滅させるとかの作業がプログラムの実行と同時にできます。
    • good
    • 1

arduinoのCPUは、マルチコアではないので並列処理はできません。


代わりによくあるパターンとしては、受信割り込み、タイマー割り込みなどの割り込みを使います。

割り込み処理中はメインスレッドは停止していますが、
メインスレッドからみると自分が行っている処理とは無関係に処理が進んだように見えます。

割り込み処理は、並列実行と同じような問題(2つの処理が同じ変数にアクセスする場合に
何も考えずに作るとデッドロックするなど)が発生しますが、それらに気をつけるとよいと思います。
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!