2011-11-22 4 views
1

나는 RTOS를 실행하는 PIC32MX460F512L을 가지고 있으며 코드에서 두 점 사이의 차이를 얻는 방법을 찾고있다.PIC32, 무료 RTOS 시계 (ms)

아래의 코드는 틱 시간을 가져 오지만 시간은 ms로 표시하지 않습니다.

static unsigned long gMSTP_timer_tick = 0 ; 
void MSTP_timer_reset() { 
    gMSTP_timer_tick = xTaskGetTickCount() ; 
} 
FLOAT32 MSTP_timer_differences() { 
    unsigned long differences = xTaskGetTickCount() - gMSTP_timer_tick ; 
    gMSTP_timer_tick += differences ; 

    return (FLOAT32) differences ; 
} 

내 질문이free RTOS에서

MS의 현재 상대 시간을 얻을 수있는 방법이 무엇입니까?

답변

1

틱 : 가치보고 어떤 생각이 당신의 필요 여부를 맞게하지 않을 것이다 경우,하지만 어쩌면이 될 것입니다. 1000Hz 틱 -> 인터럽트 및 태스크 스위치가 매 1ms마다 트리거됩니다. 다른 인터럽트가있는 경우에는 그렇지 않습니다. 그러나 그것은 그 빈도를 유지해야합니다.

두 번의 틱 수를 비교하고 틱 속도로 나눠서 지연으로 끝날 수 있어야한다고 생각합니다.

또 다른 고전적인 트릭은 시간 간격 시작과 끝에서 (반복적으로) GPIO 핀을 직접 토글 한 다음 오실로스코프를 사용하여 간격을 캡처하는 것입니다. 그러면 매우 정확한 실시간 결과를 얻을 수 있습니다.

FreeRTOS list을 요청할 수도 있습니다.

+2

주어진 시간에 타이머가 5-8ms만큼 꺼져있는 것처럼 보입니다. 좀 더 자세하게 살펴본 결과, 다른 인터럽트 때문이라는 것을 알았습니다. –

1

According to this related question에는 configTICK_RATE_HZ 값이 있습니다.

이 값을 사용하면 틱 수가 몇 밀리 초인지를 판별하기위한 간단한 계산 만 수행하면됩니다. 다음과 같은 것 :

return (FLOAT32) (differences/configTICK_RATE_HZ/1000); 

타임 아웃 간격으로 코드에 콜백을 지원하는 타이머 API 세트가 있습니다. 설정된 주파수를 가져야한다

http://www.freertos.org/FreeRTOS-Software-Timer-API-Functions.html

+0

configTICK_RATE_HZ == 1000, 1 tick은 1ms의 가치가 있습니까? 내 검사는 그렇지 않습니다. –

+0

@Stevensmethurst : 패밀리 가이 (Family Guy)와 마찬가지로 "나는 단지 하나의 문장과 그 하나를 설명하는이 문장을 알고 있습니다"라고 말하면서 FreeRTOS를 전혀 알지 못합니다. 난 그냥 문서를 찾은/당신이 수학을 할 수 있도록 진드기 계수 상수가있을 수도 기존의 답변을 찾았습니다. 틱 개수가 상수가 구성되는 방식과 일치하지 않으면 잘못되었거나 버그가 있거나 잘못 구성된 것 같습니다. 기대되는 동작이라면 다른 API를 살펴볼 것입니다. 어쩌면 그 타이머 기능들 ... –