Lhh*_*h92 6 c microcontroller avr void
目前我们正在学习如何编程AVR微控制器(仅限Ansi C89标准).部分包含的驱动程序是一个标题,用于处理调度,即以不同的速率运行任务.我的问题是与文档中的引用有关:
"每个任务必须通过使用静态局部 变量来维护自己的状态."
那是什么意思呢?他们似乎传递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__编译器宏中可以看出,该参数未使用.通常这样做是因为该方法需要匹配某个签名(中断处理程序,新线程等等).想想pthread库的情况,其中签名就像void*func(void*data).您可能会也可能不会使用这些数据,如果您不这样做,编译器就会抱怨__unused__宏会删除警告,告诉编译器您知道自己在做什么.
还忘了静态变量,正如在另一个答案中所说,静态变量不会从方法调用更改为方法调用,因此变量在调用之间保留,因此保留状态(仅在C++ 11中是线程安全的).
| 归档时间: | 
 | 
| 查看次数: | 445 次 | 
| 最近记录: |