2016-10-14 16 views
1

私はそれができないので、私は仕事を始めることができるという問題があります。マップ関数の実行時に特定の数値へのポインタ

だから我々は、私はそれらの関数のregister_irq_handler、do_interrupt(29)を作るために必要なコード

int test_handler() { 
    printf("Test handler called\n"); 
    return 1; 
} 

// Test your implementation here 
int main() 
{ 
    register_irq_handler(30, &test_handler); 
    do_interrupt(29); // no handler registered at this position, should return zero 
    do_interrupt(30); // calls handler at position 30, expected output: Test handler called 

    return 0; 
} 

を持っています。 しかし、私は始める方法が分からない、私は正しい方向に私を送るために少し助けを探しています。

「接続」を格納するグローバル変数がない場合、または何かが見つからない場合、この関数を30ポイントで保存します。

+1

私はあなたの質問を理解していませんが、関数ポインタの配列が役立つかもしれないと感じています。 –

+0

ok thx少し助けてくれるでしょう。 – twistedhat

答えて

1

グローバル変数なしでは実行できません(グローバル変数が問題になるのはなぜですか)。

// array of 30 function pointers (all automatically initialized to NULL upon startup) 
static int(*functionpointers[30])();  

void register_irq_handler(int no, int(*fp)()) 
{ 
    functionpointers[no] = fp; 
} 

int do_interrupt(int no) 
{ 
    if (functionpointers[no] != NULL) 
    { 
    // is registered (!= NULL) call it 
    return (*functionpointer[no])(); 
    } 
    else 
    { 
    // not registered, just return 0 
    return 0; 
    } 
} 

免責

この不テストされて非エラーチェックコードはちょうどあなたのアイデアを与えるために:

は、おそらくこのようなものが必要。

+0

あなたの時間をありがとう、ありがとうございます。しかし、私はそれをあなたの答えのように働きました、globale関数ポインタ配列を作って、単純なコードを書くだけです。この部分 'fp'は '*(&fp'を使用していましたが、どのように見えますか? – twistedhat

+0

はい、 'fp'と'&fp'は厳密に同じです。 –

関連する問題