FreeRTOS 测试框架实操手册:3 步跑通第一条队列用例
发布时间:2026/9/20 20:28:44 作者:尧图编辑部 阅读量:1,286

FreeRTOS 测试框架实操手册3 步跑通第一条队列用例【免费下载链接】FreeRTOSClassic FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeRTOS凌晨三点任务死锁串口日志停在往队列里发消息你缺的往往不是代码而是证据内核的队列到底靠不靠谱。FreeRTOS 测试框架就在仓库的 Test 目录下分四条线内存安全证明、单元测试、功能正确性证明、目标板集成测试。照下面走一遍你能亲手跑通一条真实用例并读懂它的结果。看懂四类验证能力Test 目录下四个子目录各管一类问题先按手头的问题挑对应的那条线。用 CBMC 证内存安全对内核 API 的每个入口做有界模型检测证明它不会越界访问、不会解引用空指针每条证明是 FreeRTOS/Test/CBMC/ 下 proofs 里的一个叶子目录跑完生成 HTML 和 JSON 报告Errors 一栏显示 None 即通过。用 CMock 隔离依赖做单元测试在 PC 上对队列、链表、任务、定时器这些内核 API 做单元测试FreeRTOS/Test/CMock/ 里对任务管理、移植层这类跑不动的依赖提供 td_task.c 之类的模拟实现其余桩函数由 CMock 自动生成。用 VeriFast 证功能正确性证明队列和链表实现在任意数量任务与中断下都内存安全、线程安全、表现像一个队列且结论不依赖队列长度证明文件就是加了 / ... / 注释的内核源码本身路径 FreeRTOS/Test/VeriFast/。上目标板跑集成测试FreeRTOS/Test/Target/ 放的是必须在真实开发板上运行的功能测试用来补上PC 上逻辑对和真机跑得对之间那段空白。 三步跑通第一条用例取代码。内核本体在 submodule 里漏初始化会让后面所有构建失败git clone https://gitcode.com/GitHub_Trending/fr/FreeRTOS cd FreeRTOS git submodule update --init --recursive --checkout构建并运行队列单元测试用例组织在 FreeRTOS/Test/CMock/queue/cd FreeRTOS/Test/CMock make queue读结果。终端逐条打印用例名和通过/失败可执行文件落在 build/bin想一次跑完全部模块用 make run想看覆盖率用 make coverageHTML 报告在 build/coverage 下。走查一条队列用例拿 xQueueGenericSend 为例按四拍过一遍设计用例先定好三种它必须处理对的情况——正常入队、队列满且不等待时返回失败、唤醒一个正在等接收的任务。设计的重点是写清内核承诺了什么而不是急着写断言。隔离依赖真实入队会走任务状态机和移植层PC 上没有调度器于是用 td_task.c 当假任务管理再用 CMock 生成的桩函数替换掉跑不动的部分被测代码保持原样。执行make queue 编译即运行用例之间互相独立想顺带抓内存问题在 make 时加上 ENABLE_SANITIZER1。读结果终端按顺序打印用例名结尾给出总数与失败数红了就先看失败用例名和它打印的断言那是 queue.c 里的函数与行号直接指向该读哪段源码。判断该用哪条线VeriFast 证明只覆盖队列和链表两个数据结构想给别的模块证内存安全走 CBMC 按入口点证明的路线别在 VeriFast 里找。CMock 单元测试跑在 PC 上只验证逻辑对不验证时序单独跑没问题、中断一来就死锁这类要靠 Target 下的目标板测试暴露别指望在 PC 上复现真实硬件行为。新手最常踩的坑忘了初始化 submodule。内核源码在子模块里make 报找不到 queue.c 就是它不是 Makefile 的锅。回到开头那次凌晨三点的死锁动手改业务代码之前先确认内核队列的行为符合约定。下一步很具体——把 make queue 跑起来第一行 PASS 读完内核可靠性就有了第一份证据。【免费下载链接】FreeRTOSClassic FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeRTOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考