Current Architecture

Nitroblue 1·2025년 9월 19일

Task Stack Structure

|---------------------| ← SP (PSP) → Software context
| R4                 |
| R5                 |
| R6                 |
| R7                 |
| R8                 |
| R9                 |
| R10                |
| R11                |
|---------------------|
| R0                 | ← HW context (자동 저장/복원)
| R1                 |
| R2                 |
| R3                 |
| R12                |
| LR (return addr)   |
| PC                 |
| xPSR               |
|---------------------|

Architecture Diagram

┌──────────────────────────────┐
│           MAIN               │
│  (entrypoint, init, start)   │
└────────────┬─────────────────┘
             │
             ▼
┌──────────────────────────────┐
│         BOARD LAYER          │
│  HAL: GPIO Init, Read, Write │
│ Implements: Syscalls         │
└────────────┬─────────────────┘
             │
     Register Syscalls + Init
             │
             ▼
┌──────────────────────────────┐
│           SVC                │
│ Syscall Client Interface     │
│ SVCall Exception Handler     │
│ Dispatch Table (Syscalls)    │
└────────────┬─────────────────┘
             │
             ▼
┌──────────────────────────────┐
│        SCHEDULER             │
│  - Task Stack Setup          │
│  - Context Switching         │
│  - PendSV & SysTick Handler  │
└───────┬───────────────┬──────┘
        │               │
        ▼               ▼
┌──────────────┐   ┌──────────────┐
│   Task 0     │   │   Task 1     │
│ LED ON loop  │   │ sleep_ms     │
└──────────────┘   └──────────────┘
        │
        ▼
┌──────────────┐
│   Task 2     │
│ now_ms loop  │
└──────────────┘

Flow Example

[SysTick interrupt]
      ↓
[MSP → PendSV]
      ↓
[asm: Save r4-r11 to PSP]
      ↓
[Rust: Save PSP to TCB, Load next PSP]
      ↓
[asm: Load r4-r11 from next PSP, set PSP]
      ↓
[bx lr or bx 0xFFFFFFFD]
      ↓
[HW context restore, task resumes]

Switch timing

| 시점        | 모드           | 스택  | 주체  | 역할                      |
| --------- | ------------ | --- | --- | ----------------------- |
| SysTick   | Privileged   | MSP | 커널  | PendSV 요청               |
| PendSV 진입 | Privileged   | MSP | 커널  | Context Save            |
| Rust 진입   | Privileged   | MSP | 커널  | PSP 계산                  |
| 태스크 복귀    | Unprivileged | PSP | 태스크 | Resume from saved state |

0개의 댓글