*

QtでRaspberryPi/GUI開発(8):pigpioを使用したチャタリング対策の問題の対策

公開日: : 最終更新日:2019/01/23 C言語, pigpio, RaspberryPi, 開発

どもです。
だいぶ、間が空いてしまいました。
久しぶりの更新です。

前回のエントリーで、「pigpioを使用したチャタリング対策」で発生した問題について記載しました。
今回のエントリーでは、この「問題」への対処の方法を書きます。

(発生環境)
H/W:RaspberryPi3
OS:Raspbian 9.4(stretch)
LIB:libpigpio(Raspbian 9.4(stretch)でデフォルトインストール済?)

1.発生した問題って?
発生している問題は、「タイマーの停止/再開」を何度も行っていると、「メモリリークが発生する」というものです。
どのような過程でメモリリークが発生するかについては、前回のエントリに記載しています。
この問題により、ボタンのON/OFFの操作ができなくなってしまいます。

2.で、どうする?
今回のエントリで提案する解決方法は、簡単に言ってしまえば「タイマーを止めない」です。
即ち、チャタリング対策のためのスレッドを新規に作成、その中で時間を測定し、指定したチャタリングタイム対策時間が経過したら、本来実行したい割込み処理を実行するようにします。

3.少し具体的に
実装上は、チャタリング用のデータの配列を用意します。
(実際にはmapでもlistでもvectorでも何でもよいです。慣れている、扱い易い方法で問題ないです。)
割込み発生時には、

  • 割込みが発生したタイミング
  • チャタリング対策として待つ時間
  • 時間が満了した際に実行したい処理

を登録します。
で、pigpioライブラリの「gpioSetTimerFunc()」で登録するコールバック関数内で、この配列の要素の「チャタリング対策の待ち時間」として指定された時間が経過していたら、「実行したい処理」を実行します。

このような手順を踏むことで、タイマーを止めることなく、チャタリング対策処理が実現できます。

4.実装と解決の確認
え~…実装ですが、すみません。
今回はありません。

この解決方法を考えている間、いくつかサンプルを作ったのですが、それらと一緒に消してしまいました。
Gitにも登録していませんでした。
迂闊!
不覚!!

時間ができたら、作り直します。

ただ、実験を行った結果としては、問題の解決はできていました。
なので、「解決方法」としては間違っていないようです。

さて。
タイトルに反してQtが関係しないエントリを、期せずして連続して投稿してしまいました。
次回こそ、タイトルに合った、QtとRaspberryPiを使用した内容を書きます。

ではっ!

関連記事

think_about_utest

VisualStudioで実行した単体テストの結果の出力(3)-テスト実行からレポート生成までをツールで自動化

どもです。 前々回、前回と、VisualStudio/C#での単体テストの効率化について書いて

記事を読む

think_about_utest

単体テストの効率化を考える(6)-スタブの自動生成ツール

どもです。 「単体テストの効率化について考える」の6回目です。 1回目から5回目まではコチラ

記事を読む

no image

C言語でEV3開発(15)-TOPPERS/HRP2 EV3 で PID制御

どもです。 今回のエントリーは、コレまでのエントリーから内容を変えて、モーターの動作の制御をします

記事を読む

no image

C言語でEV3開発(14)-opOUTPUT_TIME_SPEEDコマンド

どもです。 今回のエントリーは、モーターを動かすコマンドである「opOUTPUT_TIME_SPE

記事を読む

raspberry-pi

RaspberryPi3を購入しました

どもです。 突然ですが、「Raspberry Pi3 model B」を購入しました。 今回のエ

記事を読む

eclipse-juno-logo

C言語でEV3開発(1)

どもです。 2回目の投稿。 本格的な投稿としては、初めての投稿になります。 内容は、LEG

記事を読む

Arduino_Logo

Arduino nano(中華版)をセットアップしてみた

どもです。 突然ですが、「Arduino nano」互換(なのか?)の中華ボードを手に入れました。

記事を読む

source_trail_eye_catch

Sourcetrailを試してみました

どもです。 つい最近、ソースコードの解析に役に立ちそうなツールを見つけたので、ここで少し紹介をしま

記事を読む

GitHub

C/C++のスタブを自動生成するツールを公開しました

どもです。 突然ですが、C/C++の単体テストで使用する「スタブ」を自動で生成するツールを公開

記事を読む

c_sharp_eye_catch

Windowsでのカバレッジ測定-OpenCoverageを使ってみた

どもです。 以前、OpenCppCoverageを使用してWindows上でカバレッジ測定する方法

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

arduino_relay_switch_002_ae_g5v_drv_eye_catch
Arduinoでリレースイッチ(2)-AE-G5V-DRV

どもです。 前回の記事では、「フォトカプラリレー」を使用したLチ

tlp222af_001_eye_catch
Arduinoでリレースイッチ(1)-TLP222AF

どもです。 つい先日、やっとのことでリレースイッチを手に入れるこ

c_sharp_eye_catch
外部からMariaDbにアクセスする(2)-C#からMariaDbにアクセスする。

どもです。 前回のエントリで、外部からMariaDbにアクセスす

c_sharp_eye_catch
外部からMariaDbにアクセスする(1)-データベースの設定

どもです。 今回は、Linux上のMariaDbにWindows

think_about_utest
middle_unit
最小…よりも(ほんの)少し大きいテストフレームワーク

どもです。 今回は、単体テストのフレームワークについて書きます。

→もっと見る

PAGE TOP ↑