我有以下定义:
#define DEVICE_ID ((uint8_t)0x3f)
我有以下功能:
void LIS3DSH_Init(LIS3DSH_InitTypeDef* LIS3DSH_InitStruct)
{
// uint8_t ctrl=0x00;
uint8_t ident=0x00;
LIS3DSH_LowLevel_Init();
LIS3DSH_Read(&ident,
LIS3DSH_WHOAMI_REG_ADDR,
1);
if(DEVICE_ID==ident)
{
// LIS3DSH detected
}
else
{
// LIS3DSH not detected
failureHandler();
}
} // LIS3DSH_Init
现在,如果我在这个函数中一步一步地进行,在 LIS3DSH_Read 函数调用之后,ident 变量的值是 0x3f,这没关系。我的问题是,为什么该死的 if 子句会跳转到 failureHandler?DEVICE_ID 和 ident 的值相同 - 都是 0x3f,如果不应该跳转到 failureHanlder()。我正在使用 IAR C/C++ 和 STM32F4 Discovery Board 开发 LIS3DSH 加速器库。以下是情况截图: