- uC/OS 특징
: 커널 코드의 대부분이 C 기반이라 이식하기 쉬움
: 선점형 스케줄링
: Real Time OS
: 우선순위를 이용한 멀티태스킹 지원
: 신뢰성과 안정성
: 인터럽트 관리(중첩, 일시정지: OSTaskSuspend(), 재개: OSTaskResume())
: 스택 체크, Mail Box, Mail Queue, Semaphore 등의 시스템 서비스 제공
: 같은 우선순위를 제공하지 않으므로, 라운드 로빈 기법 적용 불가
- uC/OS 태스크
: 태스크의 ID가 곧 태스크의 우선순위. 이 값이 낮을수록 우선순위는 높아짐
: Ready 상태의 태스크 중 가장 높은 우선순위의 태스크 실행
: ISR: 인터럽트 발생 후, CPU가 수행하는 인터럽트 서비스 루틴
: TCB
: 태스크 생성시 각 태스크에게 할당되는 Task Control Block
: OS_TCB는 메모리에 상주하여 태스크 상태 관리
: TCB가 담고있는 내부 변수
: OSTCBStkPtr: 태스크 스택을 가리키는 포인터(스택 포인터 인자를 최상위 인자로 배치하는 이유는 어셈블리 언어의 효율성 증대를 위함)
: OSTCBStat: 태스크의 상태 표시 비트 (ucos.c)
: OSTCBPrio: 태스크의 우선순위
: OSTCBDly: 태스크의 지연 시간. 이벤트 발생 대기용
: OSTCBX, OSTCBY, OSTCBBitX, OSTCBBitY: 태스크가 생성되거나 우선순위가 바뀔 때 사용
OSTCBY = prio >> 3;
OSTCBX = prio & 0x07;
OSTCBBitY = 1 << OSTCBY;
OSTCBBitX = 1 << OSTCBX;
: OSTCBNext, OSTCBPrev: TCB를 양방향으로 링크
: OSTCBEventPtr: Event Control Block를 가리키는 포인터
: OSTaskCreate(): 태스크 생성
: OSTaskDel(): 태스크 삭제
: OSTaskDelReq(): 공유자원을 점유한 태스크 삭제(삭제를 요청하는 쪽과 삭제 대상이 되는 쪽 모두에서 호출)
: OSTaskQuery(): 태스크 정보 획득
: OS_TCBInIt(): TCB구조체를 새로 만들고, 세팅하여 TCBList에 추가
: Task Ready List: OSRdyGrp과 OSRdyTbl[]를 통해 Ready 상태 태스크 관리
: 더욱 빠르게 찾기 위하여, 미리 계산한 결과를 담은 Lookup Table을 이용해서 OSTCBX ,OSTCBY 값을 찾고, 우선순위를 계산하여 Ready List 중 최고 우선순위의 태스크 찾거나 List에 추가하거나 제거함
: OS_Sched(): 우선순위가 가장 높은 태스크를 실행함
: Context Switch(os_cpu_a.asm에 구현): R4~R11는 LDM 명령어를 통해 수동 백업or복원하고, R0~R3,R12,LR,PC,xPSR은 자동 백업or복원(PSP, 프로세스 스택 포인터 이용)
: OSSchedLock(): 스케줄링 잠금 설정. OSLockNesting 변수 이용
: OSSchedUnlock(): 스케줄링 잠금 해제. (OSLockNesting--후, OSLockNesting==0이어야 해제됨)
: Idle Task: Ready 상태의 태스크가 없을 경우, 시스템에 의해 자동 실행되는 태스크
: Statistics Task: CPU 사용률 계산. 전체 CPU 수행 카운트 중에 Idle Task가 수행된 카운트를 제외한 카운트의 비율
Micrium | Real Time Operating Systems
Embedded Software for the Internet of Things μC/OS is an essential component of the DIRIS G Communications Gateway Learn...
www.micrium.com
본 게시글은 개인 공부용으로 작성하여 내용의 퀄리티가 부족할 수 있습니다.
'개발 > 임베디드' 카테고리의 다른 글
RTOS 3 - ECB (0) | 2021.05.12 |
---|---|
RTOS 1 - 개요 (0) | 2021.05.12 |
ARM Cortex M3 프로그래밍3 - 인터럽트, NVIC, DMA (0) | 2021.05.12 |
ARM Cortex M3 프로그래밍2 - 카운터, 타이머 (0) | 2021.05.12 |
ARM Cortex M3 프로그래밍1 - 기본 팁, GPIO, UART 제어 (0) | 2021.05.12 |