嵌入式操作系统中ADC的回调函数写在哪

2025-04-16 11:30:02
推荐回答(1个)
回答1:

嵌入式程序中比较让人头疼的是回调函数的运用,下面说一下回调函数的意义,以帮助程序理解。

    我们写了两个用于向用户输出信息的函数,它们的功能基本相同,只是使用了不同的输出设备,假设为:

void Printer(char a)

{

使用打印机做输出;

}

void Screen(char b)

{

使用显示器做输出;

}

    我们检查自己的编程设备后发现它只连接了打印机,那么要做输出就只能使用打印机,假设有两个程序要这样做输出,就应该这样调用它:

void Program1(void)

{

 Printer (“开始输出”);

}

void Program2 (void)

{

 Printer (“开始输出”);

}

    这样看起来也挺好用的。但是,如果换了一个设备,我们发现它只有显示器,怎么办?你是不是觉得把这两个函数替换成Screen(“开始输出”)就可以了?没错,这样很有效。但是就是觉得有点不舒服,心中肯定惦记,如果下次又换个设备,并且有很多的输出调用,那岂不是很麻烦。

    于是需求出现了,有没有比较省事的办法,让我不用改整个程序而是只改一处就搞定。这可能首先想到的是使用#define,但它的局限性是可想而之的,一两个还行,一套程序下来全篇都是#define难于书写和扩展,而且也不professional。与#define类似的,C为我们提供了一个更高级的关键字typedef,它可以用来定义我们自己的类型,这有什么意义呢?这意义可大了,你觉得C给你提供的类型太少,不够用?没问题,给你自己定义的自由,随便去定义吧。通常我们用它来定义结构体类型,实现我们希望的各种封装。但是这里,我们用它来定义一个函数类型:

typedef void (*OutputFunc) (char c)

    这个OutputFunc代表的是void XX (char c)这种形式的一类函数,typedef的强大之处正在于此。

    但是只有类型是不够的,就像只有一个int,你依然没法做什么。下面我们要定义一个OutputFunc类型的变量,并且为它赋初值:

OutputFunc Myout = Printer;

    现在这个变量指向的就是Printer函数了。这样我们就通过OutputFunc这种函数类型统一了这一类函数的入