我使用一个线程,该线程使用函数回调并传递 2 个参数。但是,我一直收到回调错误

Im using a thread that uses callback for function and passing 2 arguments. However I keep getting callback error

提问人:syafi masri 提问时间:11/4/2022 最后编辑:EsmaeelEsyafi masri 更新时间:11/4/2022 访问量:85

问:

#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".

我真的不熟悉使用线程,我真的找不到任何解决我的问题的方法。我希望我能得到一些帮助。

C 多线程 回调 RTOS

评论


答:

0赞 lzl 11/4/2022 #1

您需要将要修改的变量的地址传递给回调,而不是变量本身。编译器正在抱怨,因为它无法确定您传递的变量的类型,并且不知道如何将它们转换为函数指针。