FreeRTOS学习(一)-框架简述 概览这是FreeRTOS 202411.00版本的完整仓库包含FreeRTOS Kernel V11.1.0开发分支。FreeRTOS 是一个开源、实时抢占式操作系统专为微控制器和小型微处理器设计由 Amazon 维护。采用 MIT 许可证。顶层目录结构E:\Code\Open\FreeRTOS\ ├── FreeRTOS\ # 内核 示例 测试 │ ├── Source\ # 内核源码核心 │ ├── Demo\ # 各架构移植示例~50 平台 │ ├── Test\ # CBMC/CMock/VeriFast 形式化验证与单元测试 │ ├── License\ │ └── README.md ├── FreeRTOS-Plus\ # 附加组件TCP、MQTT、PKCS11 等子模块 ├── tools\ # AWS 配置、uncrustify 等工具 └── README.md核心内核FreeRTOS/Source/内核非常精简由三个核心文件组成README 第 122-126 行明确说明文件职责list.c双向链表实现是任务调度队列的基础数据结构queue.c队列/信号量/互斥锁统一实现同结构Queue_t通过pcHeadNULL区分互斥锁tasks.c任务调度核心TCB、调度器、上下文切换加上可选模块timers.c— 软件定时器event_groups.c— 事件组stream_buffer.c/message_buffer.h— 流/消息缓冲区croutine.c— 协程仅极低内存系统使用atomic.h— 原子操作关键设计观察1. 任务控制块 (TCB)— 见 task.h#L94-L96tskTaskControlBlock用不透明指针隐藏实现细节便于内核调试器兼容。2. 调度模型— tasks.c#L67-L109 揭示了一个重要演进通过configNUMBER_OF_CORES支持单核与SMP 多核调度宏taskYIELD_TASK_CORE_IF_USING_PREEMPTION在两种模式下行为不同。3. 队列复用— queue.c#L56-L78队列、计数信号量、互斥锁、递归互斥锁共享Queue_t结构通过QueuePointers_t与SemaphoreData_t联合体节省内存。4. 内存管理—portable/MemMang/提供 5 种堆实现供选择heap_1.c只分配不释放最简单heap_2.c支持释放但不合并相邻块heap_3.c包装标准malloc/freeheap_4.c推荐合并相邻空闲块防碎片见 heap_4.c#L29-L36heap_5.c支持非连续内存区域heap_4.c使用BlockLink_t单链表管理空闲块并通过 MSB 标记分配状态heap_4.c#L76-L80含溢出检测宏。可移植层portable/这是 FreeRTOS 跨平台能力的核心支持30 架构 × 多编译器组合ARMCM0/CM3/CM4F/CM7/CM23/CM33/CM35P/CM55/CM85含 TrustZone secure/non-secure、CA5/CA9/CA53、CR4/CR5/CR82RISC-V带 chip-specific 扩展Pulpino、RV32I 等其他AVR、AVR32、MSP430、RX、RL78、PPC、MicroBlaze、TriCore、ColdFire、x86 (IA32_flat) 等编译器GCC、IAR、CCS、CodeWarrior、CCRH、ARMClang每个移植包含port.c上下文切换/中断处理portmacro.hportYIELD、portENTER_CRITICAL等宏 可选portASM.S。可配置性通过FreeRTOSConfig.h进行编译期裁剪关键配置项见 FreeRTOS.h#L52-L91configUSE_PREEMPTION— 抢占式 vs 协作式configTICK_TYPE_WIDTH_IN_BITS— 16/32/64 位 tickconfigNUMBER_OF_CORES— SMP 核数configUSE_MPU_WRAPPERS_V1— MPU 内存保护configENABLE_ACCESS_CONTROL_LIST— ACL 访问控制质量保障Test/非常严格的多层验证体系CBMCC Bounded Model Checker— 形式化证明证明无溢出/空指针等CMock— 单元测试覆盖 list/queue/tasks/timers/event_groupsVeriFast— 形式化验证list/queue createSMP 测试— 多核专门测试套件构建系统主仓库Git submodulesKernel、FreeRTOS-Plus 各组件独立仓库Kernel 可独立用CMake FetchContent引入README.md#L41-98代码格式化用 uncrustify拼写检查用 cSpellCIGitHub Actions.github/workflows/总结维度评价代码规模内核仅 ~6 个核心 C 文件极度精简可移植性业界最广30 架构 × 多编译器可配置性编译期裁剪无运行时开销安全性MPU/TrustZone/ACL 多层保护 CBMC 形式化验证可读性命名规范清晰匈牙利式注释详尽许可证MIT商用友好