/C++ comparsion 연산자 동작 :IAR C 내가 정의 다음 한
#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
자, ident 변수는 LIS3DSH_Read 함수 호출 후에 값 0x3f를 얻습니다. 제 질문은, 왜 지옥 if 절이 failureHandler로 점프합니까? DEVICE_ID 및 ident의 값은 동일합니다. failureHanlder()로 이동하면 안되면 둘 다 0x3f입니다. 나는 IAR C/C++과 STM32F4 Discovery Board를 사용하는 LIS3DSH 가속기 라이브러리에 대해 연구 중이다.
DEVICE_ID를 마스킹하는 다른 정의가 있는지 확인하십시오. – stark
코드에서 DEVICE_ID를 정의한 행을 주석 처리했으며 DEVICE_ID를 찾을 수 없어 프로젝트가 빌드되지 않습니다. – KernelPanic
나는 당신이 우리에게 보여주고있는 의사 코드에 문제가 있다고 생각하지 않는다. * 실제 코드를 더 추가 할 수 있습니까? –