*

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を使用した内容を書きます。

ではっ!

関連記事

raspberry-pi

RaspberryPi3対応のタッチスクリーンを買いました

どもです。 ついに、念願のRaspberryPi3対応のタッチスクリーンを買いました。 今回のエ

記事を読む

Arduino_DHT11

温度(湿度)センサを使ってみた(1)-ArduinoでDHT11

どもです。 今回は、久しぶりにセンサーを購入して使ってみたので、それについて記載します。 1.使

記事を読む

google_test

C言語でEV3開発(6)

どもです。 今回のエントリーは、前回のエントリーの続き、google testでの単体テスト環境に

記事を読む

think_about_utest

VisualStudioで実行した単体テストの結果の出力(2)-出力ファイルの読める化

どもです。 前回の続きです。 前回は、VisualStudio/C#での単体テストの効率

記事を読む

Arduino_Logo

ホールセンサーの種類と使い方

どもです。 今回のエントリは、表題にある「ホールセンサー」についてです。 1.「ホールセンサ

記事を読む

no image

C言語でEV3開発(9)-opOUTPUT_SPEEDコマンド

どもです。 今回のエントリーでは、前回に引き続きEV3のモーターを動かしていきます。 ただし、単

記事を読む

ADT7310_DHT11_eye_catch

温度センサの出力値の比較

どもです。 今回は、センサーの性能、測定結果を比較してみたので、それについて書きます。 1.

記事を読む

raspberry-pi

libpigpioでのRaspberryPi3とArduinoのSPI通信

どもです。 今回は、libpigpioを使用してRaspberryPi3とArduinoでSPI通

記事を読む

toppers

C言語でEV3開発(26)-EV3で機械学習(1)-QLearningをC#に委譲してみた

どもです。 前回の投稿では、Q-LearningをEV3本体に実装してみたら、メモリが足りなくて動

記事を読む

eclipse_oxygen

Eclipse/CrossCompile環境でプロジェクトをクリーンできない

どもです。 今回は、Eclipseでクロスコンパイル環境を作成した場合、を実行すると「指定されたフ

記事を読む

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="">

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

どもです。 前々回、前回と、VisualStudio/C#での単

think_about_utest
VisualStudioで実行した単体テストの結果の出力(2)-出力ファイルの読める化

どもです。 前回の続きです。 前回は、VisualStud

think_about_utest
VisualStudioで実行した単体テストの結果の出力(1)-ファイルへの出力

どもです。 最近、VisualStudio/C#でよく開発してい

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

どもです。 「単体テストの効率化について考える」の6回目です。

think_about_utest
単体テストの効率化を考える(5)-スタブの自動生成への入力

どもです。 「単体テストの効率化について考える」の5回目です。

→もっと見る

PAGE TOP ↑