もみあげあしめ

組み込みとかIoTとか、いろいろ

スイッチを押すとき #前編

という小説*1があったのですが、覚えているでしょうか。
懐かしいと思ったそこのあなた、もしかしてアラサーでは?

f:id:shima_nigoro:20170205220733p:plain:h300

この記事ではスイッチ(プッシュスイッチの押下検出)の恐るべき実装を語る。

前提

  • スイッチは正極性(押されると通電)
  • スイッチの通電状態は下記関数で取得する
/* スイッチの値を取得(0:OFF、それ以外:通電) */
int sw_value(void);
  • ボタンが押されたときに何かをする
  • 基本的には sleep を挟んでぶん回す(別のスレッドで)

恐るべきスイッチのコード

こんなコードを書いていた時期もありました…。

int is_pressed()
{
  return sw_value();
}

int main(void)
{
  while(1) /* for(;;)派の人とはきっと仲良くなれない */
  {
    if( is_pressed() ){
      do_someting();
    }
    usleep(XX);
  }
}

さて、問題です。

上記のコードを動かしたとき、何が起こるでしょうか。次回に続く。