0

このコードが実際に何をするのか理解しようとしています。特に、ポインタ ramVectorTable を宣言して初期化した後の部分は、私を最も混乱させます。

指定したシステム割り込み番号の割り込みベクタを設定する関数についてです。これが何らかの形で役立つ場合は、ARM Cortex M3を搭載したサイプレスのPsoC 5用です。

#define CY_INT_VECT_TABLE ((cyisraddress **) 0xe000ed08u)


typedef void (* cyisraddress)(void);


cyisraddress CyIntSetSysVector(uint8 number, cyisraddress address)
    {
        cyisraddress oldIsr;
        cyisraddress *ramVectorTable = *CY_INT_VECT_TABLE;

 /* Save old Interrupt service routine. */
        oldIsr = ramVectorTable[number & CY_INT_SYS_NUMBER_MASK];

        /* Set new Interrupt service routine. */
        ramVectorTable[number & CY_INT_SYS_NUMBER_MASK] = address;

        return (oldIsr);
    }

4

2 に答える 2