tags: [source-summary] type: source source: "尚硅谷嵌入式技术之FreeRTOS实时操作系统 V1.0.3 — 第3章" author: "尚硅谷研究院" date: 2026-07-12 url: ""
来源:尚硅谷 FreeRTOS 教程第 3 章。覆盖:源码结构、HAL 库移植步骤、寄存器移植步骤、FreeRTOSConfig.h 配置详解。
FreeRTOS/
├── Demo/ 演示例程(多芯片架构)
├── License/ 许可
├── Source/ 核心源码
│ ├── include/ 头文件(通用)
│ ├── portable/ 移植文件(编译器相关)
│ │ ├── Keil/ → 指向 RVDS
│ │ ├── RVDS/ 不同内核芯片移植文件
│ │ │ └── ARM_CM3/ port.c + portmacro.h
│ │ └── MemMang/ heap_1~5.c
│ ├── tasks.c 任务管理
│ ├── queue.c 队列
│ ├── timers.c 软件定时器
│ ├── event_groups.c
│ ├── stream_buffer.c
│ └── list.c 列表
└── Test/ 测试代码
port.c:上下文切换等核心汇编代码,由 FreeRTOS 官方为各内核编写。 portmacro.h:数据类型和宏定义。
MemMang 五个 heap 文件必须使用一个(初学推荐 heap_4.c)。
Project/FreeRTOS/
├── portable/ (Keil + RVDS + MemMang,保留 ARM_CM3 + heap_4.c)
└── source/ (7 个 .c 文件)
Core/Inc/FreeRTOSConfig.h (从 Demo 目录拷贝)
FreeRTOS/Source 和 FreeRTOS/Portableport.c + heap_4.cinclude/ 和 RVDS/ARM_CM3/#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define INCLUDE_xTaskGetSchedulerState 1
#include "FreeRTOS.h"
#include "task.h"
// 注释掉 SVC_Handler() 和 PendSV_Handler()
extern void xPortSysTickHandler(void);
void SysTick_Handler(void) {
if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
xPortSysTickHandler();
}
}
注意:HAL 和 FreeRTOS 都默认依赖 SysTick,建议在 CubeMX 中将 HAL 时基换成其他定时器。
与 HAL 移植类似,但不需要 HAL 相关配置。main.c 中直接添加 SysTick_Handler:
extern void xPortSysTickHandler(void);
void SysTick_Handler(void) {
if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
xPortSysTickHandler();
}
}
配置项分三类:
| 配置 | 值 | 说明 |
|---|---|---|
configUSE_PREEMPTION |
1 | 抢占式调度 |
configCPU_CLOCK_HZ |
SystemCoreClock | CPU 主频 |
configTICK_RATE_HZ |
1000 | 系统节拍频率 |
configMAX_PRIORITIES |
32 | 最大优先级数 |
configMINIMAL_STACK_SIZE |
128 | 空闲任务栈大小(Word) |
configTOTAL_HEAP_SIZE |
10*1024 | 堆大小(Byte) |
configUSE_MUTEXES |
1 | 使能互斥信号量 |
configUSE_TIMERS |
1 | 使能软件定时器 |
configUSE_TICKLESS_IDLE |
0 | 低功耗模式 |
configMAX_SYSCALL_INTERRUPT_PRIORITY |
5<<4 | FreeRTOS 管理的最高中断优先级 |
移植完成的 HAL 库基础工程模板:
code/00_HAL_Key/ — HAL 库按键检测模板(FreeRTOS 移植基础工程)后续章节:[[04-数据类型与命名规范]]、[[05-任务创建删除与挂起恢复]]