現在、我々はAVRマイクロコントローラ(Ansi C89標準のみ)のプログラム方法を学習しています。含まれているドライバの一部は、スケジューリング、すなわち異なる速度でタスクを実行するヘッダーです。 「各タスクは、静的なローカル 変数を使用することにより、自身の状態を維持しなければならない。」状態を維持するためにvoid *が使用されています...(Cプログラミング)
:私の質問は、ドキュメントからの引用で行うことです
実際にはどういう意味ですか?彼らは状態を維持するために関数にvoid*
を渡すようですが、それを使用しないでください?私はこれを収集し、ファイル内のコードを見てみると
は、彼らが何を意味するかです:
{.func = led_flash_task, .period = TASK_RATE/LED_TASK_RATE, .data = 0}
/* Last term the pointer term */
しかし、それは唯一のスケジューラとして機能し、アレイ内の上記のパラメータを使用して実行機能があります。次に関数led_flash_task
は
static void led_flash_task (__unused__ void *data)
{
static uint8_t state = 0;
led_set (LED1, state); /*Not reall important what this task is */
state = !state; /*Turn the LED on or off */
}
ヘッダ
#define __unused__ __attribute__ ((unused))
からのものであり、void *data
の通過は、タスクの状態を維持することを意味しますか?これは何を意味していますか?
感謝 - あなたは__unused__コンパイラマクロから見ることができるようにあなたの助け
+1スレッドセーフです。このconStraintと、uC上のマルチスレッドOSがあれば、そのようなすべてのモジュールのトップに大規模なバナーを含めることにします: '静的な状態を維持する - 複数のスレッドから呼び出されてはいけません'。 –