难度:★★★ 本文首发于我的嵌入式技术号「OneChan讲Soc嵌入式」,未经授权禁止转载。
前面我们花了大量篇幅讲裸机程序的启动文件。向量表里填好 Reset_Handler、默认中断处理函数,启动代码把 .data 搬好、.bss 清零,然后进入 main。一切都围绕“让 CPU 跑起来”。
但当你把 RTOS 塞进这个环境时,启动文件里有两个异常项突然变得至关重要:PendSV 和 SVC。它们不是普通外设中断,也不是简单的系统异常。它们承载着 RTOS 最核心的两件事:任务切换和系统调用。
如果启动文件没有正确声明它们,或者没有给它们正确的优先级,你的 RTOS 要么跑不起来,要么在某个深夜用 HardFault 把你叫醒。
今天这篇文章,就来拆开 PendSV 和 SVC 在 RTOS 中的真正角色,以及为什么启动文件必须为它们“预留位置”并“排好优先级”。
一、先看启动文件里的两个“钉子户”
打开一个典型的 Cortex‑M3 启动文件,向量表里你会看到这样两项:
DCD SVC_Handler ; 异常号 11
; …

![[开源]基于STM32单片机WIFI智能窗户系统 Onenet云平台设计HK-003-171主机测评](https://www.171host.com/wp-content/uploads/2026/09/20260903070616-6a991c6823886-220x150.jpg)

