이 리포지토리는 ARMv7-A/R 환경에서 동작하는 최소 단위 커널/타이머/태스크 스케줄러 학습용 예제입니다. 주요 목적은 태스크 생성, 컨텍스트 스위칭, 간단한 인터럽트 기반 타이머와 UART 등 HAL(하드웨어 추상화 레이어)을 통해 시스템 초기화와 실행 흐름을 이해하는 것입니다.
-
boot/Entry.S: CPU 진입점, 초기 스택/벡터 테이블 설정.Handler.c: 인터럽트/예외 핸들러.Main.c: 부트 이후 최초 C 함수 호출 및 커널 시작부.
-
hal/HalInterrupt.h: 인터럽트 enable/disable, priority 제어.HalTimer.h: 타이머 설정 및 유틸 함수.HalUart.h: UART 송수신 추상화.rvpb/: 실리콘 레지스터 기반 드라이버 (Interrupt/Timer/Uart).
-
include/ARMv7AR.h,MemoryMap.h등 CPU/메모리 맵 정의.stdint.h,stdbool.h,stdarg.h: 표준 자료형, 가변인자 등.
-
kernel/Kernel.c,Kernel.h: 태스크 및 스케줄러 메인 로직.task.c,task.h: 태스크 제어 블록(TCB), 컨텍스트 스위칭 구현.
-
lib/armcpu.c,armcpu.h: 기본 CPU 코드(어셈블리 인터페이스).stdio.c,stdlib.c: 간단 lib 지원.
-
하드웨어 레이어 (HAL)
hal/과hal/rvpb/소스가 하드웨어를 직접 초기화하고 제어.- 타이머 인터럽트, UART 출력/입력, 인터럽트 컨트롤러를 추상화.
-
커널 레이어
kernel/에 태스크 생성, 스케줄링 및 컨텍스트 스위칭 구현.- 태스크 상태 관리, 우선순위(필요하면)와 데이터 구조.
-
애플리케이션 레이어
boot/Main.c에서 초기화 후 테스트 태스크를 등록하고 스케줄러 시작.
-
Entry.S진입- CPU 모드 설정, 벡터 테이블, 스택 포인터.
-
C 런타임/데이터 초기화 (부트 코드)
.data,.bss초기화, 전역 변수 초기화.
-
Main.c- HAL 초기화 (
HalUart_Init,HalTimer_Init,HalInterrupt_Init). - 커널/태스크 초기화 (
Kernel_Init,Task_Create).
- HAL 초기화 (
-
타이머 인터럽트 활성화
- 주기적 틱 생성, 스케줄러 트리거.
-
커널 시작
- 첫 태스크 컨텍스트로 전환 후 태스크 실행.
-
HalUartHalUart_Init(): UART 설정.HalUart_SendChar(),HalUart_SendString(): 출력.HalUart_RecvChar(): 입력(폴링).
-
HalTimerHalTimer_Init(tick_ms): 타이머 모드/주기 설정.HalTimer_OnTick(): 틱 핸들러 콜백.
-
HalInterruptHalInterrupt_Enable(),HalInterrupt_Disable().HalInterrupt_Register(vector, handler)(가능 시).
rvpb/Interrupt.c: NVIC/프로그램 인터럽트 레지스터 제어.rvpb/Timer.c: 타이머 매치/재로드 설정.rvpb/Uart.c: UART FIFO, 통신 속도, 상태 확인.
-
태스크 스케줄러
- 간단한 라운드 로빈 또는 우선순위 기반 전환.
- 타이머 틱에 의해
Kernel_TriggerContextSwitch()호출.
-
컨텍스트 스위칭
- 각각 태스크 잠재 상태(R0-R12, SP, LR, PC, CPSR) 저장/복원.
task.c에서Task_SaveContext,Task_RestoreContext에 구현.
-
UART 디버깅
printf스타일 출력과 로그 메시지를 통해 상태 확인.- 태스크 전환 로그, 인터럽트 발생 및 타이머 틱 메시지.
-
예제 태스크
- LED 토글 또는 시리얼 카운트 출력 (플랫폼 의존).
- CPU 사용률과 스케줄링 동작 검증.
Makefile에 정의된 빌드 규칙 사용.- 예:
make all/make run(실행 대상 플랫폼에 따라 수정 필요).
- 더 많은 태스크 상태 (대기, 대기중, 블록 등) 추가.
- 세마포어/뮤텍스, IPC 큐, 이벤트 플래그 구현.
- 사용자 모드/시스템 모드 분리(RUN/IRQ/SVC 등).
boot/: 부트스트랩 및 예외hal/: 하드웨어 추상화kernel/: 스케줄러/태스크 관리lib/: 표준 라이브러리 지원- 초기화:
Entry.S->Main.c-> HAL -> 커널 - 기능: 타이머 기반 컨텍스트 스위칭 + UART 로깅