ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

3 个工具跑通 FreeRTOS 测试框架:嵌入式单元测试到形式化验证

3 个工具跑通 FreeRTOS 测试框架:嵌入式单元测试到形式化验证 3 个工具跑通 FreeRTOS 测试框架嵌入式单元测试到形式化验证【免费下载链接】FreeRTOSClassic FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeRTOS你的 RTOS 在实验室里功能测试全过量产半年后却开始偶发任务死锁甚至队列数据被破坏。这类 bug 往往不是逻辑写错而是缺少系统化验证。FreeRTOS 官方仓库的 FreeRTOS/Test/ 目录就是为这件事准备的测试框架CMock 做功能单元测试CBMC 做内存安全的形式化验证VeriFast 证明数据结构层面的安全属性——三种手段覆盖不同深度按需求选武器。工具选型速查CBMC、CMock、VeriFast 各管什么工具解决什么问题适用阶段上手门槛CMock功能正确性mock 掉移植层逐个测试内核 API功能开发、日常回归低一条make unit就能跑CBMC内存安全有界模型检查数学上排除越界读写、内存泄漏代码冻结前、PR 门禁中需装 CBMC 工具链并准备 proofVeriFast安全属性证明队列内存安全、线程安全、功能正确且结论不依赖队列长度架构评审、关键模块签署高需为源码维护/* ... */证明注解一次完整的测试流程从环境准备到回归环境准备拉取代码并初始化子模块CMock 需要 gcc、Make、unifdef、LCOV、RubyCBMC 额外要求 Python ≥ 3.7 和 32 位 gcc 库。git clone https://gitcode.com/GitHub_Trending/fr/FreeRTOS cd FreeRTOS git submodule update --init --recursive选工具、定用例CMock 按模块组织用例queue、tasks、timers 等目录各对应一组VeriFast 的 proof 文件就放在 FreeRTOS/Test/VeriFast/ 的 queue/、list/ 下。执行CMock 在 FreeRTOS/Test/CMock/ 下按模块构建例如make queueCBMC 先执行python3 prepare.py生成各 proof 目录的 Makefile再进目录makeVeriFast 可用verifast -I include -c queue/xQueueGenericSend.c或 vfide 按 F5 验证。 4.解读结果CMock 用make coverage出 lcov 的 HTML 报告CBMC 报告是 HTML/JSONErrors 显示None即证明通过VeriFast 成功时输出0 errors found (N statements verified)。 5.回归把同一套用例接进 CI每个 PR 重跑全部 proof 和单测修完问题再跑一遍确认。深入真实场景用 VeriFast 证明队列安全属性队列是内核最核心的数据结构也是最容易出越界和并发问题的地方。VeriFast 的队列 proof 同时证明三个属性内存安全、线程安全、功能正确而且是无界证明——不依赖队列长度对任意数量的任务或 ISR 都成立。设计阶段proof 文件就是带注解的队列实现源码本身。下面这张调用关系图展示了证明边界绿色是已证明的函数蓝色是用锁不变式建模抽象掉的函数灰色是按假设处理的 stub。看懂这张图你就知道每个 API 的保证来自哪里。验证阶段用命令行或 vfide 跑单个 proof个别文件如 create.c需要关闭溢出检查。结果解读看两件事横幅是否变绿、语句验证数是否覆盖目标函数。之后任何改动都重跑同一组 proof 做回归——注解和实现一旦漂移proof 会立刻变红这比 review 更诚实。避坑与最佳实践ASan 只在改用例时开ENABLE_SANITIZER1会插入额外分支稀释覆盖率数字所以框架默认不开平时跑覆盖率别带着它。覆盖率只认目标函数CMock 用coverage标签声明每个测试文件真正针对的函数lcov 过滤会把顺带覆盖剥掉数字才可信。CBMC 是有界验证先读边界再看结论证明只在 proof 设定的输入范围内成立看到结果时先确认 bound 设置别直接拿通过对外承诺。VeriFast 注解跟着实现走proof 即带注解的源码改实现不同步注解回归会红得莫名其妙维护成本会指数上涨。先把 CMock 的队列测试跑起来再视项目风险逐步加 CBMC 和 VeriFast——测试框架的价值在持续跑不在一次性验证。你所在项目最缺哪一层验证欢迎在评论区聊聊你的测试栈。 【免费下载链接】FreeRTOSClassic FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeRTOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表