私は、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 を制御します。
ありがとうピーター