クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

ポーリングと割り込みの違い

このレッスンのあとで: ポーリングと割り込みの違いを説明し、バウンスを取り除くことができる。

55分のレッスンコマンド2件組み込みシステムラボ:シミュレートしたチップでレジスタ、ピン、PWM、割り込みを学ぶ

ポーリングと割り込みとは何ですか

ポーリングとは、プログラムが自分から何度もピンを読んで、変化を探す方法です。割り込みは、変化が起きたときに、チップがプログラムを呼んでくれる方法です。

このレッスンでは、同じボタンを2つの方法で読み、ボタンのバウンスを数えて取り除きます。

このレッスンのゴール

メモ

ポーリングと割り込みの違いを説明し、バウンスを取り除くことができる。

キーワード

ことばいみ
ポーリングプログラムが自分で何度もピンを読むこと
割り込み変化を知らせて、処理を呼び出す仕組み
ハンドラ割り込みのときに呼ばれる関数
立ち上がりピンが0から1に変わる瞬間
バウンスボタンが押された瞬間に、細かく揺れる信号
デバウンスバウンスによる余計な押下を取り除くこと

学生が入力するセルは、このプレビューでは空白です。

ポーリングは何度も聞きに行く

ポーリングでは、ループの中で毎回ピンを読みます。前の値が0で、今の値が1なら、立ち上がりです。ボタンが押されたと分かります。

簡単ですが、ループがほかの仕事で忙しいと、短い変化を見逃します。

画面の語は英語です

重要

ラボのチップは、実在しないマイコンのシミュレータです。スクリプトは英語で出力します。pin はピンの値、press seen? の yes は、立ち上がりを見つけたしるしです。

ポーリングで12ティック読む

コマンド
docker exec jupyter python3 steps/poll.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ポーリングの出力を読む表

ティックピンの値押しを見つけたか
0 と 10いいえ
21はい
30いいえ
41はい
5 から 91いいえ
10 と 110いいえ

学生が入力するセルは、このプレビューでは空白です。

1回の押しが2回に数えられる

最後の行は one real press, but the loop counted 2 です。実際の押しは1回なのに、2回と数えました。

ティック3で信号が一瞬0に戻り、ティック4でまた立ち上がったからです。これがバウンスです。

割り込みはチップが呼んでくれる

割り込みでは、立ち上がりが起きると、チップが IFR の旗を立てます。タイマーの制御で IE が有効なら、チップがハンドラを呼びます。

プログラムは、ピンを読み続けなくて済みます。ほかの仕事をしていても、変化を逃しません。

割り込みでハンドラを呼ぶ

コマンド
docker exec jupyter python3 steps/interrupt.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

割り込みでもバウンスは残る

ハンドラは、ティック2とティック4で呼ばれ、handler calls: 2 と出ます。ポーリングと同じ2回です。

そのあとスクリプトは、前に残した呼び出しから3ティック以内のものを捨てます。結果は calls kept after waiting out the bounce: 1 で、1回の押しになります。

立ち上がりを手元で数える

コード: python
signal = [0, 1, 1, 0, 0, 1, 0, 1, 1, 1]
last = 0
edges = 0
for value in signal:
    if last == 0 and value == 1:   # 0から1への変化
        edges = edges + 1
    last = value
print("立ち上がりは", edges, "回")
# 練習: 後ろから4つ目の 0 を 1 に変えると、立ち上がりはいくつになりますか。

よくある間違い

注意

「割り込みを使えば、バウンスはなくなる」と考える人が多くいます。ハンドラは、揺れるたびに呼ばれます。割り込みが省くのは、読み続ける手間です。バウンスは、プログラムで取り除きます。

このラボとソースについて: 組み込みシステムラボ:シミュレートしたチップでレジスタ、ピン、PWM、割り込みを学ぶ

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。