提问人:syafi masri 提问时间:11/4/2022 最后编辑:EsmaeelEsyafi masri 更新时间:11/4/2022 访问量:85
我使用一个线程,该线程使用函数回调并传递 2 个参数。但是,我一直收到回调错误
Im using a thread that uses callback for function and passing 2 arguments. However I keep getting callback error
问:
#include "mbed.h"
#include "rtos.h"
DigitalOut led(LED1);
DigitalIn switch1(PC_9); //turns on the carpark
DigitalIn switch2(PC_8); //car entry
DigitalIn switch3(PC_10); //car exit
void BeginDisplay(int *count,int *space_count){
Thread::signal_wait(0x2);
int avail=0;
while(true){
if(*space_count<=10){
avail = *count - *space_count;
printf("\nAvailable space %d\n\r",avail);
}
else{
printf("\ncar park full\n\r");
}
}
}
void BeginCarPark(int *count,int *space_count){
Thread::signal_wait(0x1);
while(true){
if(count==0){
printf("\n Car Park is full");
}
else{
printf("\n Car Park is available");
}
if(!(switch2 == 0)){ //car entring carpark
count = count - 1;
if(count<=0){
space_count = 0;
}
}
else if(!(switch3 == 0)){ //car leaving carpark
count = count + 1;
space_count = count;
}
//return space_count;
}
}
int main(){
Thread CarPark;
Thread Display;
int space_count = 0;
int space_capacity = 10;
printf("\n Car Park is Closed\n\r");
while(1){
Display.start(callback(BeginDisplay,&space_capacity,&space_count));
CarPark.start(callback(BeginCarPark,&space_capacity,&space_count));
while(!(switch1 == 0))
{
CarPark.signal_set(0x1);
Display.signal_set(0x2);
}
}
}
在代码中,我不断收到该行的错误
Display.start(callback(BeginDisplay,&space_capacity,&space_count));
错误是
Error: No instance of overloaded function "callback" matches the
argument list in "main.cpp".
我真的不熟悉使用线程,我真的找不到任何解决我的问题的方法。我希望我能得到一些帮助。
答:
0赞
lzl
11/4/2022
#1
您需要将要修改的变量的地址传递给回调,而不是变量本身。编译器正在抱怨,因为它无法确定您传递的变量的类型,并且不知道如何将它们转换为函数指针。
评论