2010-06-03 7 views
4

RTOS를 사용하여 Arm7 용 코드를 작성했습니다. 우선 순위가 동일한 수준으로 설정된 여러 작업이 있습니다. 따라서 작업은 라운드 로빈 기반으로 실행됩니다.RTOS 작업 시간을 계산하는 방법

하나의 작업 (기본값)이 우선 순위보다 낮게 설정된 다음 rtos에서 다른 작업으로 설정된다는 예외가 있습니다. 따라서 실행중인 작업이 없으면 기본 또는 우선 순위가 낮은 작업이 실행됩니다.

이제 기본 작업이 실행될 정확한 총 시간 (기간)을 계산하고 싶습니다.

중 하나가 어떻게 .... 어떻게 코드에서 할 수있는 것을 몇 가지 아이디어를 줄 수 ..

감사 다니

답변

3

당신이 당신의 플랫폼에 대해 더 많은 정보를 준 경우가 도움이 될 것입니다 (CPU, RTOS)하지만 일반적인 생각은 다음과 같습니다.

대부분의 RTOS에는 "작업 전환"콜 아웃 또는 후크 유형이 있습니다. 대부분의 임베디드 플랫폼에는 쉽게 액세스 할 수있는 타이머 주변 장치 (하드웨어 타이머)가 있습니다.

그래서 : 우선 순위가 낮은 작업에서 &으로 바뀔 때마다 타이머의 스냅 샷을 찍으십시오. & 시간 간격을 계산하십시오.

타이머 롤오버 (타이머 기간이 매우 짧은 경우 다중 롤 오버 포함), 저전력/절전 모드 (사용하는 경우), ISR에서 소비 된 시간 등과 같은 모든 종류의 경고가 적용됩니다.

5

기본 또는 유휴 작업이 실행 중일 때 매우 간단한 방법은 사용하지 않는 (액세스 가능한) GPIO 핀이나 표시기 LED를 토글하는 것입니다 (하드웨어에 이러한 작업이있는 경우). 그런 다음 오실로스코프를 I/O 라인에 연결하면 범위에 표시된 발진 기간 동안 프로세서가 유휴 작업에 얼마나 오래 남아 있는지 알 수 있습니다. 다른 작업이 실행 중일 때마다 선은 정상 상태로 유지됩니다.

다른 방법으로, OS 코드를 얻을 수있는 경우, 기본 작업이 선택 될 때마다 라인을 높이고 다른 작업을 수행 할 때 낮게 설정하십시오.

1

나는 댄의 답변에 동의 - 여기에 몇 가지 추가/개선 사항은 다음과 같습니다

(1) 윈도우 기반의 계산. 기본값은 아마도 주기성이 없으므로 일부 창 (예 : 1000msec)에 대해 해당 작업에 소비 된 백분율로 런타임을 계산해야합니다. 타이머 누적 누적에 사용되는 정적 변수를 정의해야합니다. 창이 만료되면 (즉, 1000msec가 경과 한 경우) 기본적으로 소비 된 백분율이 1000msec에 비해 기본으로 소비 된 시간을 계산할 수 있습니다. 설명을 읽으면서 기본 상태는 기본적으로 유휴 상태 인 것처럼 보입니다. 즉,이 비율은 대략 사용 가능한 미세 사용률입니다.

(2) 시간당 롤오버.. 32 비트 카운터를 사용할 수 있고 usec 타임 스탬프를 캡처하는 경우 롤오버가 발생하기 전에 1 시간 이상 만 경과 할 수 있습니다. 이것을 홈 프로젝트에 사용하는 경우에는 롤오버 무시 옵션이 있습니다. 그것은 1000msec의 왜곡 된 하나의 창에 기여할 것입니다. 반면에 최대 활용도를 모니터링하고 이로 인해 오류 또는 진단을 설정하면 ... 고려해야합니다.

(3) ISR 스큐. 다른 작업에서 보낸 시간과 다른 ISR에서 보낸 시간을 처리해야하는지 결정하는 것은 RTOS가 컨텍스트 스위칭을 처리하는 방법에 따라 다릅니다. Dan이 언급했듯이, 대부분의 RTOS에는 작업 스위치가 발생할 때 트리거되는 콜백이나 훅 (hook)이 있습니다. 일부 RTOS는 ISR 용으로 별도의 훅을 가지고 있습니다. 나는 이것이 사용자의 임무보다 짧은 ISR에 소요되는 시간에 대해 사용자가 신경을 덜 쓰는 일반적인 이론 이외의 다른 동기라고 확신하지는 않습니다. 어떤 경우이든, RTOS가이 스위칭을 처리하고 거기에서 어떻게 움직이는 지 확인하십시오.

이 문제를 올바르게 처리하지 않으면 ISR에 소요 된 시간은 ISR이 실행 된 시간에 실행 된 작업에 기인합니다. 당신이 Default에 있다면 우연한 기본 작업은 ISR 시간을 흡수합니다. ISR이 많이 실행되지 않으면이 문제를 완전히 무시합니다.

행운을 빈다. 필자는 PowerPC 551X 제품군으로이 작업을 수행했으며, 완벽한 자동차 용 SW를 위해 완벽하게 작동해야했습니다! 당신은 훨씬 쉽게해야합니다 :)

관련 문제