0

私は、Analog Devices の ad7176-2 アナログ - デジタル IC 用の開発ボードを購入しました。「汎用ドライバーファイル」をダウンロードしました(OS固有ではありません)。私は、Raspian と呼ばれる Debian の変種を実行するアーム デバイスである Raspberry Pi でそれらをコンパイルしてきました。Code::Blocks を IDE として使用しており、「GNU GCC」コンパイラと「GNU ARM GCC」コンパイラの両方を使用しています。

「'AD7176_regs' への未定義の参照です」というエラーが表示されます

AD7176_regs.h ファイルのコードは次のとおりです。AD7176.h に #include され、AD7176.c に #include され、コンパイラによってエラーが検出されます。

コード:

    /*! AD7176 register info */
typedef struct _st_reg 
{
    int32_t addr;
    int32_t value;
    int32_t size;
}st_reg;

/*! AD7176 registers list*/
enum AD7176_registers
{
    Status_Register = 0x00,
    ADC_Mode_Register,
    Interface_Mode_Register,
    Register_Check,
    Data_Register,
    IOCon_Register,
    ID_st_reg,
    CH_Map_1,
    CH_Map_2,
    CH_Map_3,
    CH_Map_4,
    Setup_Config_1,
    Setup_Config_2,
    Setup_Config_3,
    Setup_Config_4,
    Filter_Config_1,
    Filter_Config_2,
    Filter_Config_3,
    Filter_Config_4,
    Offset_1,
    Offset_2,
    Offset_3,
    Offset_4,
    Gain_1,
    Gain_2,
    Gain_3,
    Gain_4,
    Communications_Register,
    AD7176_REG_NO
};


**Defining the undefined**


#ifdef AD7176_INIT
/*! Array holding the info for the AD7176 registers - address, initial value, size */
st_reg AD7176_regs[] = 
{
    {0x00, 0x00,   1}, //Status_Register
    {0x01, 0x0000, 2}, //ADC_Mode_Register
    {0x02, 0x0100, 2}, //Interface_Mode_Register
    {0x03, 0x0000, 3}, //Register_Check
    {0x04, 0x0000, 3}, //Data_Register
    {0x06, 0x0000, 2}, //IOCon_Register
    {0x07, 0x0000, 2}, //ID_st_reg
    {0x10, 0x8002, 2}, //CH_Map_1
    {0x11, 0x0000, 2}, //CH_Map_2
    {0x12, 0x0000, 2}, //CH_Map_3
    {0x13, 0x0000, 2}, //CH_Map_4
    {0x20, 0x0000, 2}, //Setup_Config_1
    {0x21, 0x0000, 2}, //Setup_Config_2
    {0x22, 0x0000, 2}, //Setup_Config_3
    {0x23, 0x0000, 2}, //Setup_Config_4
    {0x28, 0x020A, 2}, //Filter_Config_1
    {0x29, 0x0200, 2}, //Filter_Config_2
    {0x2a, 0x0200, 2}, //Filter_Config_3
    {0x2b, 0x0200, 2}, //Filter_Config_4
    {0x30, 0, 3}, //Offset_1
    {0x31, 0, 3}, //Offset_2
    {0x32, 0, 3}, //Offset_3
    {0x33, 0, 3}, //Offset_4
    {0x38, 0, 3}, //Gain_1
    {0x39, 0, 3}, //Gain_2
    {0x3a, 0, 3}, //Gain_3
    {0x3b, 0, 3}, //Gain_4
    {0xFF, 0, 1} //Communications_Register
};
#else
extern st_reg AD7176_regs[AD7176_REG_NO];
#endif

ここは、レジスタ値にアクセスしたい場所の 1 つですが、エラー メッセージが表示されます。

        /***************************************************************************//**
* @brief Reads the conversion result from the device.
*
* @param pData - Pointer to store the read data.
*
* @return Returns 0 for success or negative error code.
*******************************************************************************/
int32_t AD7176_ReadData(int32_t* pData)
{
    int32_t ret;

    /* Read the value of the Status Register */
    ret = AD7176_ReadRegister(&AD7176_regs[Data_Register]);

    /* Get the read result */
    *pData = AD7176_regs[Data_Register].value;

    return ret;
}

これを修正した場合、GCC for ARM を使用するか、GCC のみを使用する必要があります。コードは Raspberry Pi で実行され、開発ボード上の ADC IC を制御します。

ありがとうピーター

4

1 に答える 1

3

どうやらAD7176_INITは定義されていないため、次のようになります。

extern st_reg AD7176_regs[AD7176_REG_NO];

宣言はしますが定義はしません。これが、リンカーの未定義参照エラーが発生AD7176_regsする理由です。

現在、オブジェクト定義はヘッダー ファイルに表示されるべきではなく、定義はファイルに配置する必要があり.cます。

于 2013-06-30T21:32:56.807 に答える