Ucos 원리

Ucos-ii 는 stm32 의 경우 시스템 틱톡 타이머를 사용하여 작업 스케줄링, 관리, 전환 등을 추진하는 클럭 비트를 정기적으로 생성하는 탈착형 커널의 실시간 운영 체제입니다.

시스템의 일반적인 작동 원리 정보

2. 클럭 비트를 생성할 때 현재 실행 중인 작업보다 우선 순위가 높은 작업이 준비되면 우선 순위 (우선 순위가 0 일 때 우선 순위가 가장 높음) 가 높은 작업이 CPU 를 선점하고 CPU 가 현장 환경을 저장하여 작업 스택에 배치합니다. 우선 순위가 높은 작업의 스택에서 현장 환경을 꺼내서 CPU 레지스터에 기록합니다. (CPU 의 레지스터는 아직 자세히 연구하지 않았다.) 이 임무가 지연될 때, 혹은 어느 시간이나 신호량을 기다려야 한다. 그러면 CPU 의 사용권을 포기하고, 시스템은 임무 준비표에서 우선 순위가 가장 높고 준비 상태의 임무를 CPU 에 사용할 수 있는 권한을 부여합니다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 준비명언) 이로써 전체 시스템을 추진하고 모든 작업을 예약할 수 있다.

중단 없이 UCOS 시스템 시간 및 작업 전환

① 현재 실행 중인 작업이 우선 순위가 낮은 작업이라고 가정하면 CPU 프로그램 레지스터에 있는 일부 레지스터는 우선 순위가 낮은 작업입니다

② 프로그램이 높은 우선 순위를 감지한 작업이 준비 상태로 들어가면 CPU 가 일부 명령을 전송하여 CPU 의 현재 프로그램 레지스터 중 일부를 낮은 우선 순위 작업의 스택에 복사합니다. 즉, 1 과정입니다.

③. 지금 막 준비된 테이블의 메커니즘을 통해 프로그램에서 가장 높은 우선 순위를 얻을 수 있는 임무, 즉 2 과정 =

4. 마지막 프로세스 3 은 방금 높은 우선 순위 작업의 스택 포인터를 CPU 의 프로그램 레지스터에 복사하여 작업 전환을 실현하는 것입니다.

중단 시 UCOS 시스템 작동 방식

프로그램이 인터럽트 서비스 함수를 실행 중일 때 시스템 틱톡 인터럽트가 발생합니다. 시스템 틱톡 타이머의 우선 순위가 높기 때문에 인터럽트 서비스 기능이 중단되어 작업 전환을 수행합니다. 때로는 중단 시 연기할 수 없는 경우도 있다. 예를 들어 데이터를 수신할 때 수신 오류가 발생합니다. 심각한 결과를 초래하다.

이때 다음 그림의 작업이 있으므로 피할 수 있습니다.

PendSV 예외 (인터럽트라고 함) 는 가장 낮은 우선 순위 인터럽트로 프로그래밍됩니다. 인터럽트가 실행 중이고 시스템이 틱톡 선점한 경우, 인터럽트는 PendSV 인터럽트를 일시 중단하여 작업 전환을 지연시킵니다.

UCOS 작업 전환 시간은 os_cfg.h 에서 OS_TICKS_PER_SEC 매크로 UCOS 작업 수 등의 구성을 설정할 수 있으며 이 파일에서도 찾을 수 있습니다.

UCOS-II 주요 서비스 제공

메모리 관리

멀티 태스킹 관리

주변 자원 관리

Make 및 컴파일 정보

책에 이 부분이 나와 있어서 나도 나의 이해

를 기록했다

평소 keil 과 같은 통합 개발 환경을 사용했기 때문에, 이전에도 한동안 리눅스를 공부한 적이 있었지만, 컴파일에 대한 makefile 의 이해는 그리 좋지 않았다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 컴파일명언)

Makefile 을 편집하여 소스 파일과 포함된 헤더 파일을 필요한. obj 파일로 컴파일한 다음 이러한. obj 파일을 생성할 프로그램에 연결합니다. Makefile 에 대해서는 각 컴파일러마다 자체 makefile 규칙과 명령이 있는 것 같습니다. 왜냐하면 이전에 GCC 컴파일러를 공부했던 것과 현재 책에서 볼 수 있는 BCC 컴파일러가 쓴 makefile 이 다르기 때문입니다. 나도 깊이 연구하지 않았다.

그래서 통합 개발 환경이 좋다. 도구는 어떻게 하면 편리할 수 있는가.

공부의 원리가 필요할 때 다시 이해하고, 실제 앱에서 자신이 쓴 Makefile 을 이용해 서류를 컴파일하는 것은 석악지일지도 모른다. (윌리엄 셰익스피어, 햄릿, 공부명언)

UCOS 작업

임무 3 요소 (이해함)

작업 제어 블록

Ostaskcreate ((void () (void)) start _ task,

//작업 함수

(void*)0,

//작업 함수에 전달된 매개 변수

(OS _ STK *) amp; Start _ task _ STK [start _ STK _ size-1],

//작업 스택 스택 맨 위

(INT8U)START_TASK_PRIO,

//작업 우선 순위

주로 작업의 스택 맨 위 주소,

프로세서 스택이 높은 주소에서 아래로 자라면 스택 맨 위 주소