Nios® V プロセッサー・ソフトウェア開発者ハンドブック

ID 743810
日付 7/08/2024
Public
ドキュメント目次

7.7.2. アラーム

HAL アラーム機能を使用すると、指定時刻に実行する機能を登録できます。ソフトウェア・プログラムは、alt_alarm_start() 関数を呼び出してアラームを登録します。
int alt_alarm_start(alt_alarm* alarm, alt_u32 nticks, alt_u32 (*callback) (void* context), void* context); 

関数 callback() は、nticks が経過した後に呼び出されます。入力引数の context は、呼び出しが発生したときに入力引数として callback() に渡されます。HAL は context パラメーターを使用しません。 これは callback() 関数のパラメーターとしてのみ使用されます。

入力引数 alarm が指す alt_alarm 構造体は、コードにより割り当てる必要があります。このデータ構造の存続期間は、少なくともアラームの存続期間と同じである必要があります。この構造体を割り当てる最良の方法は、それを静的またはグローバルとして宣言することです。alt_alarm_start()*alarm を初期化します。

コールバック関数によりアラームをリセットできます。登録されたコールバック関数の戻り値は、次に callback が呼び出されるまでのティック数です。戻り値 0 は、アラームを停止する必要があることを示します。アラームは、alt_alarm_stop() を呼び出すことで手動でキャンセルできます。

alt_alarm_start() への呼び出しごとに 1 つのアラームが作成されます。複数のアラームを同時に実行できます。

アラーム・ コールバック関数は、例外コンテキストで実行されます。これにより、アラーム・ コールバックを記述する際に注意する必要がある機能上の制限が課されます。

定期的なアラーム・ コールバック関数の使用

#include <stddef.h> #include <stdio.h> #include "sys/alt_alarm.h" #include "alt_types.h" /* * The callback function. */ alt_u32 my_alarm_callback (void* context) { /* This function is called once per second */ return alt_ticks_per_second(); } ... /* The alt_alarm must persist for the duration of the alarm. */ static alt_alarm alarm; ... if (alt_alarm_start (&alarm, alt_ticks_per_second(), my_alarm_callback, NULL) < 0) { printf ("No system clock available\n"); }