상세 UCOS의 작업 전환

1 UCOS 지식

(1) UCOS은 선점 형 멀티 태스킹 커널입니다. 우선 순위가 높은 작업 준비 및 작업 스케줄링이 시간에 발생하면, 다음 우선 순위가 높은 작업은 CPU를 사용할 수있는 권리를 얻을 것이다.

(2) 임무는 다른 작업을 수행하는 대신 현재 작업 스케줄러의 실행을 종료하는 것입니다.

(3) 각 작업은 자신 갖는다 : 태스크 제어 블록 OS_TCB 종류 (구조의 유형). 같은 주소 작업 스택, 스택 용량, 현재 작업 상태 등의 정보를 관련 유지 보수 작업하십시오. OS_TCB는 RAM에 저장된다.

(4) 각 작업은 그 자체가 스택 OS_STK 유형 (배열). 스택은 정적 할당은 사용의 malloc () 함수는 동적 힙으로부터 할당 될 수있다. 때문에 자주로 만들고 삭제 작업이 생성 메모리 조각화가 발생할 수 있습니다, 일반적으로 스택 공간이 해제 할 필요가 없습니다 것입니다. 첫째, 지역 변수의 작업 스택 효과 저장, CPU 레지스터 (예 : 사이트) 둘째 절약, 작업 중단됩니다.

(5) 작업이 전역 변수에 액세스 할 수 있지만 전역 변수는 다중 작업에 의해 공유되고, 작업이 그렇게 선제 때문에 안전하지 않은, UCOS 보호 메커니즘 (세마포어, 뮤텍스 세마포어)를 제공합니다.

2 UCOS 태스크 스위칭

슬립 상태 (1) 태스크 (태스크 참조 메모리에 기억되어 있지만 UCOS 관리);

(2) OSTaskCreate에 의해 () 함수는, 준비 상태에서 작업, 준비 작업의 작업 준비 목록이 저장되었습니다.

(3) 작업 스케줄링 일어났다. 두 가지 방법으로 작업 스케줄링 : 작업 수준 스케줄러가 OSSched (); 2 인터럽트 레벨 스케줄러시키고 OSIntExit () ..

  ) (OSSched :

  준비 작업 테이블 준비 작업 우선 순위가 가장 높은 작업 스캔 (1);

  (2) 작업의 제어 블록에 가장 높은 우선 순위를 얻으십시오;

  (3)은 CPU와 상기 스택 포인터 레지스터 (TSP)의 값 안의 스택의 값을 현재의 작업 레지스터를 저장하기 위해 CPU가 OS_TCB에 저장되고;

  (4) 스택 포인터 레지스터 TSP OS_TCB 새로운 태스크를 유지 값은 CPU (TSP)에로드되고

  새로운 스택에서 (5), CPU 레지스터를 복원하는 이 시간에 실행에 새 작업을 .

  시키고 OSIntExit () :

  (1) 저장 OSIntNestingCtr 1 중첩 카운터를 중단

  (2) OSIntNestingCtr = 0 인 경우, 즉 (태스크 레벨로 되돌아에) 중첩 된 인터럽트의 마지막 층과, 상기 스케줄러는 잠겨 있지

  작업의 제어 블록에 높은 우선 순위를 획득 (3);

  (4) 인터럽트 서비스 루틴 작업 현장에 들어가기 전에 저장되어 있기 때문에, 그래서 여기에 다시 저장하기 간다;

  (5) 스택 포인터 레지스터 TSP OS_TCB 새로운 태스크를 유지 값은 CPU (TSP)에로드되고

  새로운 스택에서 (6), CPU 레지스터를 복원하는 이 시간에 실행에 새 작업을 .

비고 :

() 실제로 OS_TASK_SW () OS_TASK_SW (호출)를 OSCtxSw (호출) OSSched 및 OSCtxSw ()는 물질 서비스 루틴 OS_CPU_PendSVHandler 인터럽트 예외 들어가고

작업 스케줄링 포인트 3

3.1 전화는 ()의 경우를 OSSched :

  (1)) (또는 다른 작업 세마포어 OS ??? 포스트에 메시지를 보낸다

  (2) 업무 호출 지연 기능 OSTimeDly () 또는 OSTimeDlyHMSM ()

  (3) 작업 대기 시간 () (또는 세마포어 메시지) OS ??? 발생을 보류

  OS ??? PendAbord 대기 (4) 작업 취소 ()

  (5)) (우선 순위가 높은 작업 OSTaskCreate를 만들

  (6) 현재 작업)을 (OSTaskDel를 삭제

  (7) 작업 자체가) (OSTaskSuspend를 일시 중단

  (8) 사용자는 직접) (OSSched를 호출

3.2 통화시키고 OSIntExit ()의 경우 :

  모든 중첩 된 인터럽트의 끝에서, 작업에 반환하기 전에 당신이 전화시키고 OSIntExit 원하는 () 함수

추천

출처www.cnblogs.com/Mike2019/p/12548536.html