2012-12-01 2 views
1

나는 세분성이있는 캘린더 + 시계를 지원해야하는 프로젝트를 개발 중입니다. 시간 관리에 도움이되도록 칩의 RTC를 구성 할 수 있었지만 시간을 표시하는 데 올바른 데이터 유형을 찾는 데 어려움이 있습니다.시스템 시계가 내장 된

나는 항상 time_t (Unix 시대)으로 작업했지만 초 단위이기 때문에 작동하지 않습니다. struct timeval은 어떨까요? 이 구조는 프레젠테이션 (asctime)의 문맥에서 struct tm으로 지원되지 않는 것으로 보입니다.

임베디드 시스템에서 시간을 나타내는 데 가장 좋은 방법은 무엇입니까?

참고 :이 시스템은 자바 기반 백엔드 서버를 인터페이스하므로 시간을 동기화해야하므로 여러 가지 언어로 즉시 사용할 수있는 구조를 찾고 있습니다.

+0

운영체제가 있습니까? –

+0

C 또는 C++? 하나를 선택. –

+0

@JoachimPileborg, 현재 운영체제 없음 – stdcall

답변

1

세분화 된 세분화와 Java 기반의 상호 작용에 대한 필요성은 모두 에포크 이후 64 비트 시간이 적합하고 직선적 인 선택이라는 것을 암시합니다.

오늘날 대부분의 컴파일러에는 64 비트 유형이 있습니다. 그렇지 않다면 로컬 엔디안 적절한 순서로 두 개의 32 비트 유형의 구조체로 처리하고 캐리를 처리하는 코드를 넣을 수 있습니다.

+1

컴파일러가 64 비트 타입을 처리 할 수 ​​있다고하더라도,이 값을 사용하여 수행되는 연산의 양에 따라 기본적으로 처리 할 수없는 임베디드 시스템에서는 사용하지 않는 것이 좋습니다. –

+0

밀리 초가 필요할 경우 32 비트 값이 약 49 일 동안 오버플로됩니다. 이러한 종류의 가동 시간 제한으로 시스템을 설계하는 것은 좋지 않은 생각 인 것 같습니다. 따라서 원격 시스템이 원하는 것과 호환되는 것을 설계하는 것이 좋습니다. 32 비트 MCU는 오늘날 8 비트보다 약간의 비용이 들기 때문에 큰 문제는 아닙니다. 앞서 언급했듯이 32 비트 값의 구조체와 오버 플로우를 수동으로 처리하는 것은 옵션입니다.하지만 64 비트 경우를 수행하기 위해 항상 클럭 사이클을 수행하는 것이 더 좋을 수도 있고 타이머 ISR 일 때 놀랄 위험을 피할 수도 있습니다 49 일마다 머리카락이 길어집니다. –

+0

흠, 좋은 점, 밀리 세컨드를 잊었습니다 (다소 늦었습니다). –

0

밀리 초 및 밀리 초가 있습니다. 하나는 쉽고, 다른 하나는 어렵습니다.

솔리드 래스터에서 작동해야하는 물건 (모터 컨트롤 등)을 처리하는 1ms 하드웨어 타이머 인터럽트 루프를 실행합니다. 이 루틴 내에서 글로벌 32 비트 "틱"값을 증가시켜 잠시 후 (EMS 폴링 간격으로 50ms마다) 필요한 작업을 수행 할 수 있습니다.

시간 기록 참조로 마이크로의 하드웨어 타이머를 사용하는 것과 같지 않습니다. 시계 크리스탈의 정확성에서부터 모든 잠깐 멈춤 시간에 이르기까지 시스템의 정확성에 문제가 있습니다. 이제 우리는 모터 제어 루틴이 1 초당 999 회 또는 초당 1001 회 실행되는지 또는 50 초가 아닌 49.5ms마다 핀의 상태를 폴링하는지 여부에 상관하지 않습니다. 이는 충분히 가깝고 중요하기 때문에 그것은시기 적절하게 일어난다. 24 시간 동안 우리는 밀리 세컨드 (milliseconds)보다 더 많은 "진드기 (ticks)"로 끝날 수 있습니다. 이것은 끔찍한 시계를 만들 것입니다.

예를 들어 - 클럭 prescaler가 N으로 카운트 한 다음 재설정하거나 n-1로 재설정하고 재설정합니까? 그것은 즉시 리셋되거나 1 클럭 사이클이 걸립니까? 이러한 종류의 세부 사항은 마이크로에서 타이밍 두통을 만듭니다.

시간 참조로 RTC를 사용한 다음 ms 카운터를 동기화하여 ms-value가 의미하는 1Hz RTC 인터럽트마다 0으로 재설정 ("틱"을 재설정)하십시오. RTC와 관련해서는 아주 조금 밖에 나오지 않습니다. RTC의 입력 클럭 레지스터를 직접 읽을 수있어 RTC (일반적으로 32.768kHz 클럭)를 실행하는 훨씬 빠른 클록을 추출 할 수도 있습니다. 우리는 1kHz 타이머의 프리스케일러 클록 레지스터로부터 마이크로 초 값을 얻기 위해이 작업을 수행합니다. 완벽하지는 않습니다. 시간을 지키기 위해 사용하지 않고 하위 ms 이벤트를 잡습니다.

또는 당신이 정말로 이 응용 프로그램에 대한 MS에서 모든 필요한 경우를 보면, 아니면 그냥이 100ms 이내의 숫자를 구성하고처럼하지,보고 할 수 있다면 JS 현명 원자 시계 등급 타이밍 - 그것은이다 심지어 미키 - 마우스 - 시계 등급. 당신이 정말로 그 정확성을 필요로한다면, 당신은 그것을 잘못하고 있습니다.