3

Linuxでタイマー割り込みを使ってソフトウェアワスドッグタイマーをやりたい。Linuxでタイマー割り込みを生成するにはどうすればよいですか?

4

2 に答える 2

8

タイマー割り込みを使用する場合は、シグナル、特にを使用しますSIGALRM。関数alarm()を使用して、タイムアウトを要求できます。usecの粒度が必要な場合は、ualarm()を使用できます。タイムアウトに達すると、前に定義したコールバック関数が呼び出されます。

コード例は次のとおりです。

#include <signal.h>

void watchdog(int sig) 
{
  printf("Pet the dog\r\n");
  /* reset the timer so we get called again in 5 seconds */
  alarm(5);
}


/* start the timer - we want to wake up in 5 seconds */
int main()
{
  /* set up our signal handler to catch SIGALRM */
  signal(SIGALRM, watchdog);
  alarm(5);
  while (true) 
   ;
}

ウォッチドッグを実装するための他のオプションはほとんどありません。

  1. カーネルドライバーを作成/使用します。これは実際にはウォッチドッグとして機能し、犬がペットでない(または蹴られていない)場合はデバイスにハードリセットを適用します。
  2. ソフトウェアウォッチドッグデーモンの興味深い実装であるウォッチドッグを使用します。
于 2013-03-25T06:46:08.393 に答える
1

割り込みはアプリケーションレベルでは存在しません(カーネルのみが割り込みを管理し、実際、すでに多くのタイマー割り込みを取得しています)。シグナル、タイマー、およびシステムコールの遅延(特にpollまたはnanosleep)を使用できます。AdvancedLinuxProgrammingを読んでください。

最初にtime(7)のマニュアルページを読んでください。次に、timer_create(2)poll(2)timerfd_create(2)setitimer(2)sigaction(2)nanosleep(2)clock_gettime(2)など...

一部のカーネルは、ウォッチドッグタイマーを持つように構成することもできます...

于 2013-03-25T06:47:26.950 に答える