1

mainで宣言された変数を、コンストラクターの引数として渡さずに、クラスのプライベート変数に取得しようとしています。割り込みインスタンスを再初期化して上書きせずに、割り込みコントローラーを複数のハードウェア割り込みにリンクする必要があります。

XScuGic InterruptInstance;

int main()
{
    // Initialize interrupt by looking up config and initializing with that config
    ConfigPtr = XScuGic_LookupConfig(INTERRUPT_DEVICE_ID);
    XScuGic_CfgInitialize(&InterruptInstance, ConfigPtr, ConfigPtr->BaseAddr);

    Foo foo;
    foo.initializeSpi(deviceID,slaveMask);

    return 0;
}

クラス Foo の実装:

class Foo
{
     // This should be linked to the one in the main
     XScuGic InterruptInstance;
public:
     // In here, the interrupt is linked to the SPI device
     void initializeSpi(uint16_t deviceID, uint32_t slaveMask); 
};

deviceID と slaveMask は、含まれるヘッダーで定義されます。

これを達成する方法はありますか?

4

1 に答える 1

0

グローバル変数を使用するコンストラクターでプライベート クラス参照メンバーを初期化できるため、コンストラクターで渡す必要はありません。

XScuGic InterruptInstance_g; // global variable

class Foo {
private:
    const XScuGic& InterruptInstance; // This should be linked to the one in the main
public:
    Foo() : InterruptInstance{InterruptInstance_g} {}; // private variable is initialized from global variable
    void initializeSpi(uint16_t deviceID,uint32_t slaveMask); // In here, the interrupt is linked to the SPI device
};

int main()
{
    // Initialize interrupt by looking up config and initializing with that config
    ConfigPtr = XScuGic_LookupConfig(INTERRUPT_DEVICE_ID);
    XScuGic_CfgInitialize(&InterruptInstance,ConfigPtr,ConfigPtr->BaseAddr);

    Foo foo{}; // reference is not required as it will come from the global variable to initialize the private reference member
    foo.initializeSpi(deviceID,slaveMask);

    return 0;
}
于 2016-05-30T13:45:02.630 に答える