1

nesC でイベントを通知するのは難しいと思いました。誰でも助けることができますか?(編集: 以下のコードでは MainC コンポーネントを省略しました)。

簡単なインターフェースを定義しました:

interface MyInterface {
    command uint8_t action();
    event void actionDone();
}

1 つのアクションと 1 つのイベントがあります。

さらに、MyInterface を提供する 1 つのコンポーネントがあります。

configuration MyComponentC {
    provides interface MyInterface[uint8_t id];
}
implementation {
    components MyComponentM;
    MyInterface = MyComponentM.MyInterface;
}


module MyComponentM {
    provides interface MyInterface[uint8_t id];
}
implementation {
    command uint8_t MyInterface.action[uint8_t id]() {...}
    ...
    event void bar() {
        signal MyInterface.actionDone[foo]();
    }
}

イベントバーはまったく別のインターフェースです。このイベントでは、イベント actionDone を id == foo で通知したいと考えています。

「メイン」コンポーネントもあります:

configuration MyAppC {
}
implementation {
    components MyC as App;
    components MyComponentC as MC;
    App.MyInterface -> MC.MyInterface[unique("Hello")];
}

module MyC {
    uses interface MyInterface;
}
implementation {
    event void MyInterface.actionDone() {...}
}

しかし、コンパイル中にエラーが発生します。

MyInterface.actionDone not connected

どこで間違いを犯したのですか?コンポーネントを正しく接続するには?

4

1 に答える 1

1

これが原因かどうかはわかりませんが、アプリでエイリアスを介して MyC を参照してみてください。

MyC.MyInterface -> MS.MyInterface[unique("Hello")];

試す

App.MyInterface -> MS.MyInterface[unique("Hello")];

[アップデート]

このリンクで説明されているように、パラメータ化されたインターフェイスを使用しており、256 個のインスタンスすべてが MyComponentM モジュールでデフォルトの実装を提供する必要があるものに接続されるという保証はありません。

default event MyInterface.actionDone[foo]() {
    return;
}
于 2013-03-11T22:07:09.737 に答える