0

uC/OS-II RTOS에는 다른 작업을 실행할 준비가되지 않은 경우 실행되는 유휴 작업이 있습니다. 유휴 작업이 리소스를 소비 할 수 있다면 어떻게 줄일 수 있습니까?Idle 작업의 자원 사용량 줄이기

+0

무엇을 줄이려고합니까? idle 태스크는 본질적으로 while (nothing_ready_to_run) {no_op; }'최적화 할 것이 없습니다. – msw

+0

유휴 작업은 메모리, 전원 또는 I/O 리소스를 소비 할 수 있습니다. 어느 것을 줄일 필요가 있습니까? – Gabe

+0

메모리와 전원. 유휴 작업 중에 I/O 리소스가 사용된다는 사실을 알고 싶습니다. I/O 리소스를 어떻게 사용할 수 있습니까? –

답변

3

일반적으로 유휴 작업은 저전력 시스템이고 프로세서에 그러한 모드가있는 경우 저전력 (슬립) 모드로 전환됩니다. 이것은 대개 특정 어셈블리 명령어입니다 (예 : ARM Cortex M3에서 "WFI"명령어를 실행하는 경우). 다른 칩에는 전력을 관리하는 코어 외부의 특정 레지스터가있을 수 있습니다 (명령어와 반대).

절전 모드로 들어가기 전에 조건 (충족해야하는 요구 사항)이있는 경우가 많습니다. 가끔 잠들기 전에 인터럽트를 잠글 때가 있고 때로는 잠기지 않도록해야 할 때가 있습니다. 칩의 데이터 시트를 확인하십시오.

일반적으로 저전력 모드로 들어가기 전에 필요없는 주변 장치의 전원을 차단합니다. 다시 한 번 칩의 데이터 시트를 확인하십시오. 또한 웨이크 업을 위해 인터럽트를 사용하려는 경우 주변 장치의 전원이 꺼져 있지 않은지, 인터럽트가 활성화되어 있는지 확인하십시오. 그렇지 않으면 웨이크 업하지 않습니다.

마지막 포인트 : 종종 디버깅을 할 때 (예 : JTAG 장치의 제어하에 있음), 저전력 모드로 들어가면 이상한 일이 발생하므로 디버깅 할 때 유휴 작업에서 "잠자기"를 비활성화하고 실행 중에 만 디버거없이. 일반적으로 이것은 컴파일 타임 결정입니다 (#ifdef ...)

1

일반적인 유휴 루프는 프로세서 게이트를 거의 실행하지 않으므로 코어에서 전력을 거의 소비하지 않지만 중요한 경우에는 슬립 모드에서 슬립 모드로 전환하면 코드가 전혀 실행되지 않습니다. 코어가 멈 춥니 다. 그러나 실시간 응답을 유지하기 위해 주변 장치는 전원이 켜져 있고 인터럽트를 생성 할 수 있으므로 실제로는 이점이 미미할 수 있습니다.

다른 리소스와 관련하여 유휴 루프는 일반적으로 현재 명령에 대한 브랜치 일뿐입니다. 하나의 명령, 데이터 없음; 그것보다 훨씬 작아 질 수는 없습니다. uC/OS-II의 소스 코드가 제공되므로 살펴볼 수 있습니다!

물론 유휴 작업을 직접 수정하거나 후크를 구현하여 유휴 작업을 확장 한 경우 해당 리소스 사용은 완전히 사용자가 제어 할 수 있지만 아무 것도 얻을 수 없습니다.