2013-01-02 2 views
0

ZigBee 기반 응용 프로그램을 개발할 때 Z-stack-CC2530-2.5를 사용하고 있습니다. timestmap 변환 문제가 발생했습니다.IAR 타임 스탬프에서 C 프로그래밍 읽을 수있는 형식으로 변환

나는 다음과 같이 timestampStruct에 UINT32 타임 스탬프 값을 변환 할 osal_ConvertUTCTime 방법을 사용하고 다음과 같이 구조체가 정의

osal_ConvertUTCTime(& timestampStruct, timestamp); 

을 :

typedef struct{ 
uint8 seconds; 
uint8 min; 
uint8 hour; 
uint8 day; 
uint8 month; 
uint16 year; 
} UTCTimeStruct 

내 질문 :

방법 구조체의 내용을 사람이 읽을 수있는 형식으로 UART 포트에 쓰도록 변환 하시겠습니까?

예 :

HalUARTWrite (Port0, timestampStruct, len)  // Output: 22/1/2013 12:05:45 

감사합니다.

답변

0

나는 순간에 기능 HalUartWrite의 프로토 타입이없는,하지만 난 그것을 봤 누군가가이로 사용 :

HalUARTWrite(DEBUG_UART_PORT, "12345", 6); 

그래서 내가 두 번째 인수는 char에 대한 포인터해야합니다 같아요. struct UTCTimeStruct 변수를 두 번째 인수로 전달할 수 없습니다. 원시 데이터를 직렬 포트에 출력하면됩니다. 컴파일러를 행복하게 만들려면 구조체를 char *로 캐스팅해야합니다. 하지만 일반적으로 이것은 나쁜 습관입니다. 8 비트 프로세서에서 모든 구조체 필드가 ​​char 또는 short 인 경우이 경우 문제가되지 않을 수 있습니다. 일반적으로 구조체를 char *로 캐스팅하고 그것을 구조체 패딩으로 인쇄하면 구조체 필드 사이에 많은 말도 안되는 문자가 생깁니다.

확인. 조금 벗어난 주제. 질문으로 돌아 가면 구조체를 직접 친숙한 문자열로 변환해야합니다. 출력 문자열의 길이가 고정 된 "22/1/2013 12:05:45"형식이므로 길이의 char [] 만 선언하면됩니다. uint32 타임 스탬프 값을 비트 조작하여 수동으로 숫자를 채 웁니다. 그런 다음 char []를 두 번째 인수로 전달하고 정확한 길이를 세 번째 인수로 전달할 수 있습니다.

관련 문제