문제

미세미엄 UC-OS / II 하에서 동적 C에서 2 가지 작업을 수행하려고합니다.한 가지 태스크는 직렬 포트의 다른 읽기 인 HTTP 핸들러입니다.직렬 포트 작업은 HTTP 태스크가 실행중인 것으로 보입니다.어떤 아이디어 이유는 무엇입니까?나는 UC-OS / II가 preemTive라고 생각했다.

void httptask(void* ptr)
{
 http_init();

 while(1) {
  http_handler();
 }
}

void gpstask(void* ptr) {

 int c;

 while (1) {
        c = serFgetc();
    }
}
.

두 스레드 모두 동일한 기본 우선 순위로 설정됩니다.

도움이 되었습니까?

해결책

UC / OS-II는 선제이지만 한 방향으로 만 우선 순위가 높은 스레드가 실행되도록 하위 우선 순위 스레드를 선점하지만 반전을하지는 않습니다.즉, 우선 순위가 높은 스레드가 더 낮은 우선 순위 스레드를 실행할 수 있도록 CPU를 명시 적으로 포기해야합니다.직렬 쓰레드가 HTTP 스레드보다 우선 순위가 높아지고 serFgetc()는 전혀 제어를 포기하지 않고 (Per OSMboxPend 또는 다른 루틴을 통해) 제어를 포기하지 않습니다.

시스템의 최저 우선 순위 스레드를 직렬 쓰레드를 만들거나 CPU를 제어 할 수 있도록 해당 코드에 무언가를 두십시오.(예를 들어, 데이터가 사용 가능한 인터럽트에서 게시 할 수있는 세마포어가없는 문자가없는 문자가없는 문자가 없을 때 "예를 들어, 세마포어를 기다리고 있습니다.).

다른 팁

UC / OS-II는 고유 한 우선 순위 만 지원합니다.또한 (x) 또는 작업 루프의 다른 항목이 스케줄러에 대한 통제를 포기하는 것과 같은 것을 필요로합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top