gpt4 book ai didi

c - 用于维护状态的 void*...(C 编程)

转载 作者:太空狗 更新时间:2023-10-29 17:20:51 24 4
gpt4 key购买 nike

目前我们正在学习如何对 AVR 微 Controller 进行编程(仅限 Ansi C89 标准)。包含的驱动程序的一部分是处理调度的标题,即以不同的速率运行任务。我的问题与文档中的引述有关:

"Each task must maintain its own state, by using static local variables."

这到底是什么意思?他们似乎将 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 中是线程安全的)。

关于c - 用于维护状态的 void*...(C 编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7565507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com