정말 간단하고 비 선진적인 작업 스케줄러.
이것은 매우 간단하고 비 배제적인 작업 스케줄러입니다. 이 데모 프로젝트는 ATMEGA48P 마이크로 컨트롤러 용 Atmel Studio 7에서 만들어졌지만 쉽게 포팅 할 수 있습니다.
이 스케줄러의 요점은 선택된주기로 모든 작업을 호출하고 실행하는 것입니다.
스케줄러는 OS 폴더 (OS.C 및 OS.H) 내부에 있습니다. 운영 체제는 아니지만 여전히 이름 지정이 더 쉽기 때문에 OS라고 부릅니다 (OS는 Scheduler, DUH보다 짧습니다).
세 가지 주요 기능이 있습니다.
세 가지 상태가 있습니다.
차단 : 타이머에서 전화를 기다립니다
준비 : 실행 준비
정지 : 장애인, 아무것도하지 않을 것입니다
그림 2. 작업의 상태 다이어그램.
OS_TASKTIMER ()는 작업을 구성하는 기능입니다. 타이머 인터럽트에 있어야합니다 (데모에서는 1 초 타이머이지만 무엇이든 할 수 있습니다). 기능 안에 카운터가 있습니다. 카운터가 더 크면 작업의 파열 시간이 표시되면 준비 상태가됩니다.
그림 3. OS_TASKTIMER ()의 활동 다이어그램.
os_taskexecution ()은 작업을 호출하는 함수입니다. main () 무한 루프에 있어야합니다. 준비된 작업이 있는지 확인한 다음 FIFO 스타일로 실행합니다. 이로 인해 실시간이 부드럽다는 것은 언급 할 가치가 있습니다. 타이밍을 잘못 선택하면 준비 상태에 너무 많은 작업이있을 수 있으며 원치 않는 지연이 발생할 수 있습니다.
그림 4. OS_TASKEXECUTUTE ()의 활동 다이어그램.
데모는 스케줄러 작동 방식을 보여주기위한 것입니다. 세 가지 작업이 있으며 각 작업은 1, 2 및 5 초로 LED (포트 D 0,1,2)를 깜박입니다. 두 번째 작업은 정지 상태에서 시작되므로 결코 실행되지 않습니다.