2017-03-10 28 views
1

MCU開発ボードと周辺デバイスをインタフェースするためのコードを記述しています。周辺機器には、使用可能なドライバが付属しています。 d_base.hでC99ドライバとのインタフェースに関する問題

:driver.cで

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

:私は、次の形式有するdriver.hで

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

static struct S1 const* ptr; 

が予め作成された関数があるのためのドライバの一部として周辺装置。これらの機能は、特定の機能が必要な場合は常にptr->funcptrを参照します。例:

#include "d_base.h" 

ptr->funcptr(x,y); 

機能の実装は、私が使用しているハードウェアに関連しているので、私に任せてください。次のように

は、それから私はmain.cの中の関数を書いた:

#include "driver.h" 

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

私の質問は、funに機能ptr->funcptrをリンクに関連しています。 ptr-> funcptrが呼び出されるたびに、どのようにコンパイラを関数funにするのですか?

ご協力いただきありがとうございます。あなたがfunを割り当てることができる場所

+0

なぜC++タグを追加するのですか?それは無関係の言語です。タグをスパムしないでください! – Olaf

+0

これは、MCUドライバの不良インダフェースのようです。それはコードの残りの部分のオーバーオール品質に疑問を呈します。 – Olaf

+0

不要なタグは大変申し訳ございません。 – JayD

答えて

0

あなたはどこかにstruct S1ている可能性があります:

#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); 
    } 

場合、あなたは、それを動的に生成するかもしれないがAPI関数をstruct S1にはアクセスできません。

+0

ありがとうございます。これに続いて、さらに分析すると、最終的には適切にリンクされます。最終的な設定は以下の通りである: の#include の#include 構造体S1 { ボイド(* funcptr)(INT、INT)。 }; 静的構造体S1 const * ptr; struct S1 const * sfun; 静的構造体S1 s; void fun(int x、int y){ printf( "Hello"); } void init(struct S1 const * sfun){ ptr = sfun; } int main(){ s.funcptr = fun; init(&s); ptr-> funcptr(0,0); } – JayD

関連する問題