目前我們正在學習如何編程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
傳球是爲了維護任務的狀態?這是什麼意思?
感謝您的幫助
+1提到線程安全。鑑於這種情況,以及uC上的多線程操作系統,我會在所有這些模塊的頂部包含一個大型橫幅:「主要靜態狀態數據 - 不能從多個線程中調用」。 –