与C99驱动程序

时间:2017-03-10 15:50:56

标签: c function pointers struct

我正在编写代码来连接外围设备和MCU开发板。外围设备配备了可供使用的驱动程序。我有以下表格:

在d_base.h中:

struct S1 {
   void (*funcptr)(int x, int y);
};

在driver.c中:

#include "d_base.h"
#include "driver.h"

static struct S1 const* ptr;

在driver.h中,预编写的函数作为外围设备驱动程序的一部分。只要需要特定功能,这些函数就会引用ptr->funcptr。例如:

#include "d_base.h"

ptr->funcptr(x,y);

由于该功能与我正在使用的硬件有关,因此该功能的实现由我来决定。

然后我在main.c中编写了一个函数,如下所示:

#include "driver.h"

void fun(int x, int y)
{
      // do nothing
}

我的问题与将ptr->funcptr功能与fun相关联。每当调用ptr-> funcptr时,如何使编译器转到函数中?

感谢您的协助。

1 个答案:

答案 0 :(得分:0)

您可能在struct S1的某处,可以指定fun

#include <stdio.h>
#include <stdlib.h>

struct S1{
 void (*funcptr)(int,int);
};

static struct S1 const* ptr;

void fun(int x, int y){
  printf("Hello");
}

int main(){
  struct S1 s;
  s.funcptr = fun;
  ptr=&s;
  ptr->funcptr(0,0);
  }

如果您无权访问struct S1,可能会有动态生成它的API函数。