본문 바로가기
코스웨어/12년 내장형하드웨어

문자열 파싱

by 알 수 없는 사용자 2013. 6. 14.
728x90
반응형

시리얼을 통하여 여러 센서의 값을 하나의 문자열로 받아 쉽게 파싱하는 방법을 공유합니다.

gcc 컴파일러에서만 될 수도 있는 비표준 코드이니 이런게 있다는 것만 알아두시길 바랍니다. 하지만 임베디드 리눅스에서는 압도적으로 gcc를 사용하니..


아래는 sscanf 의 사용과 gcc에서 지원하는 정규표현식을 이용하여 필요한 부분만을 재가공하여 넘겨주는 코드입니다.

사용방법은 어렵지 않으니 한번씩 해보시면 나중에 크게 도움될거라 생각합니다.


/* Vaisala WXT520 온도 습도 기압 값 파서 */                                 

int getSensorValue10sec_WXT520(multiSensorArr *valueFromSensor, char sensor)

{                                                                           

    float pressure;                                                         

    float temp;                                                             

    float humidity;                                                         

                                                                            

    char buff[20];              /* 쓸모없는 문자열을 저장 */                

                                                                            

    /* 센서가 출력한 아래와 같은 문자열을 파싱                              

     * 0R2,Ta=24.6C,Ua=55.1P,Pa=1005.5H */                                  

    sscanf(valueFromSensor -> rev10secBuff, "%[^=]=%f%[^=]=%f%[^=]=%f",     

           buff, &temp,                                                     

           buff, &humidity,                                                 

           buff, &pressure);                                                

                                                                            

    /* 요청받은 센서의 값을 리턴 */                                         

                                                                            

    switch (sensor) {                                                       

    case 'T':                   /* 온도 */                                  

        return (int)((temp + 100) * 10);                                    

    case 'H':                   /* 습도 */                                  

        return (int)(humidity * 10);                                        

    case 'P':                   /* 기압 */                                  

        return (int)(pressure * 10);                                        

    default:                                                                

    }                                                                       

                                                                            

    return 1;                                                               

}                                                                           


728x90

'코스웨어 > 12년 내장형하드웨어' 카테고리의 다른 글

소스 작성의 나쁜 예..  (4) 2013.07.04
으앙  (6) 2013.06.20
디버그용 printf 찍을 때 tip  (4) 2013.06.19
대소식!!  (5) 2013.06.18
입사 3개월  (7) 2013.06.07
일하다 말고.. 간단한 리눅스 팁 몇 개..  (4) 2013.06.04
오예  (12) 2013.04.10
[정철/근황공개]다들 어찌 지내시요  (1) 2013.03.12