尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

如何测试FreeRTOS?从单元测试到形式化验证的完整实战指南

如何测试FreeRTOS?从单元测试到形式化验证的完整实战指南 如何测试FreeRTOS从单元测试到形式化验证的完整实战指南【免费下载链接】FreeRTOSClassic FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeRTOS你负责一块要出货的嵌入式产品最怕的不是功能缺失而是某个边界条件下悄悄崩溃——队列越界写、并发时指针失效这类bug复现率极低开发期很难抓到。FreeRTOS作为最经典的实时操作系统官方仓库内置了一整套测试框架CMock单元测试、CBMC内存安全有界验证、VeriFast无界功能正确性证明、Target真机集成测试四者配合覆盖从PC到芯片的完整验证链路。 3条命令跑通第一个FreeRTOS单元测试先尝甜头克隆仓库并把CMock单元测试跑起来。它只需要GCC、unifdef、LCOV、Make和Ruby全是常规工具链。git clone https://gitcode.com/GitHub_Trending/fr/FreeRTOS cd FreeRTOS git submodule update --init --recursive --checkout # 内核在子模块里必须拉取然后进入 FreeRTOS/Test/CMock/ 目录make queue # 只构建队列模块单元测试可执行文件输出到 build/bin make run # 构建并依次运行全部单元测试看到各模块断言全部通过环境就算搭好了。想上强度时用make run ENABLE_SANITIZER1打开GCC地址sanitizer内存越界当场现形。CBMC和VeriFast需要额外装工具Python 3.7、PATH上能找到cbmc/goto-cc/goto-instrument、64位系统补装gcc-multilibVeriFast则从nightly构建里取verifast和vfide二进制。装好后按下面的能力地图对号入座。FreeRTOS测试框架的4类能力各解决什么问题目录总览见 FreeRTOS/Test/README.md四个子目录按你担心的问题来分功能对不对CMock单元测试PC上跑FreeRTOS/Test/CMock/ 覆盖内核API的功能正确性queue、list、tasks、timers、event_groups、stream_buffer、message_buffer、smp。它用模拟mock隔离出被测函数在PC上直接执行断言——改完代码跑一遍就知道行为变没变。make coverage会生成HTML覆盖率报告入口build/coverage/index.html测试有没有漏网一目了然。内存安不安全CBMC有界验证FreeRTOS/Test/CBMC/proofs/ 里每个叶子目录针对一个内核入口函数如TaskCreate、xQueueGenericSend做内存安全证明。CBMC用数学方法穷举有界路径证明这段代码不越界读写、不空指针。官方CI对每个pull request都会跑这些证明你也可以在本地复跑核对。任意规模下都正确吗VeriFast无界证明CBMC是有界的——结论只在路径长度受限时成立。FreeRTOS/Test/VeriFast/ 里的证明则是无界的它证明队列/列表实现在任意长度的队列、任意数量的任务和中断下都内存安全、线程安全且行为正确。证明文件就是源码加上/* ... */注释标注目录里附了 docs/signoff.md 说明证明假设。真机上跑得动Target集成测试FreeRTOS/Test/Target/ 存放跑在真实设备上的集成测试如pico开发板、SMP场景验证内核API在硬件上的真实行为——这是前两者都代替不了的最后一道关。一次完整的FreeRTOS验证流程怎么走以你改动了队列相关代码为例一条完整链路设计用例在对应模块的_utest.c里补断言。CMock支持覆盖率过滤——在文件头用coverage 函数名标签声明本文件要覆盖哪些函数避免别的用例顺带跑过造成的假覆盖。搭环境克隆仓库子模块见上文按需安装CBMC/VeriFast工具。执行make run跑单测证明目录里make跑CBMCVERIFAST/path/to/verifast make跑VeriFast全量回归。看报告CMock终端断言输出 build/coverage/index.html覆盖率CBMC生成HTML和JSON报告Errors一栏为None即通过VeriFast输出0 errors found (N statements verified)即该证明通过回归模式还会检查语句覆盖没有缩水。定位修复报告会指向具体函数与断言修代码而不是修测试。回归全量make run CBMC/VeriFast重跑确认没改坏别处提交后CI还会替你跑一遍CBMC兜底。实战给xQueueGenericSend做3层测试xQueueGenericSend是队列发送的核心入口拿它串一遍三层能力。第一层功能——在 FreeRTOS/Test/CMock/queue/ 下执行make queue断言发送/接收的边界行为满队列、超时、ISR调用符合预期。第二层内存安全有界——进入 FreeRTOS/Test/CBMC/proofs/python3 prepare.py # 为各证明目录生成Makefile cd Task/TaskCreate # 换成你要验证的入口函数目录 make打开生成的html/index.htmlErrors为None即证明成立。第三层任意规模无界——用VeriFast检查单个证明verifast -I include -c queue/xQueueGenericSend.c # 或 vfide -I include queue/xQueueGenericSend.c加载后按F5输出0 errors found (335 statements verified)即通过其中 create.c 等4个文件需加-disable_overflow_check关闭溢出检查。全量回归VERIFAST/path/to/verifast make。下面这张图展示了队列证明的覆盖全景一眼看清哪些函数已被证明图注队列API的验证调用关系图——绿色是已通过证明的函数蓝色是由锁不变量建模假设底层提供原子性保证的函数灰色是假设桩直观标出了测试重点和证明边界。三层全绿你才能放心说这个队列实现是对的CMock管行为CBMC管不越界VeriFast管任意规模下依然正确。写在最后FreeRTOS测试框架的价值在于把大概率没问题变成可证明没问题——单元测试抓行为回归形式化验证兜住内存安全和边界条件。工具链比跑个make多装几步但一次搭好后每次改码都是分钟级的回归。去把make run跑起来吧报告里第一个失败的断言就是最好的学习材料。你打算先验证哪个模块评论区聊聊。【免费下载链接】FreeRTOSClassic FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeRTOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表