gpt4 book ai didi

c - wdStart 具有多个参数

转载 作者:行者123 更新时间:2023-11-30 17:23:51 25 4
gpt4 key购买 nike

我四处寻找解决问题的方法,但没有成功。似乎没有任何东西可以解决我的问题。我非常感谢你的帮助。我需要使用看门狗调用TemperatureControl()。但是,TemperatureControl 需要 2 个参数,而 wdStart 只能调用只有 1 个参数的函数。有解决办法吗?

wdStart(watchDog, args.tPeriod , (FUNCPTR)temperatureControl, arg1, arg2); 

代码:

struct arguments{
int tPeriod; /* Time in ticks used inside watchdog to change temperature*/
int room; /* Room targetted */
int temperature; /* Desired temperature*/
};

/* Set the chosen room to the desired temperature after tperiod time*/
void setTemperatureUsingWatchDog(struct arguments args)
{
watchDog = wdCreate();
wdStart(watchDog, args.tPeriod , (FUNCPTR)temperatureControl, args);
logMsg("Room #%d",args.room, "temperature is set to%f", roomTemperature[args.room],0,0,0);

最佳答案

通过使用结构,您走在正确的轨道上,但请注意看门狗参数是一个指针。传入一个整数是可以的,但是当你移动到一个真实的结构时,你必须使用一个指向它的指针。

在您的代码中,您尝试传入一个结构而不是它的地址。并且请不要简单地在代码中按原样使用 & 运算符。这将使用一个堆栈地址,然后该地址将在 ISR 上下文中使用,但会产生不幸的结果。

这是一个使用全局的示例(如果您只有一个结构,则可以):

struct arguments myGlobalArg;
...
void setTemperature() {
wd = wdCreate();
wdStart(wd, myGlobalArg.tPeriod, (FUNCPTR)temperatureControl, &myGlobalArg);
}

如果您有多个不同的参数,则可以使用全局结构数组,或动态分配结构。

关键是看门狗参数是一个指针,该指针不应位于堆栈上,而应位于全局可访问的内存中。

关于c - wdStart 具有多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27374735/

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