目录

socostests

项目简介

本仓库用于在 RISC‑V 开发板上验证 FreeRTOS 的功能正确性与性能指标,目标是通过可复现的测试用例覆盖内核常用特性并收集运行时性能数据,为移植、优化和比较提供依据。

项目疑问

  1. 5.4.2 解挂任务延迟时间
    • 我觉得他只是想要解挂起的时间,如果如解挂起到任务执行那和任务切换时间又有什么区别
  2. 5.1.23 测试任务以阻塞方式接收消息队列的功能
    • 这个测试用例与 5.1.21 相同,都是测试阻塞接收消息队列的功能
    • 建议删除
  3. 5.1.24 测试任务以非阻塞方式接收消息队列的功能
    • 这个测试用例与 5.1.22 相同,都是测试非阻塞接收消息队列的功能
    • 建议删除
  4. 5.2.1 同一CPU上,优先级调度下的任务切换时间
    • 难以划定这个测试用例需要测试的时间
    • 如果是低优先级任务唤醒高优先级任务的时间,那么这个测试用例和 5.2.5 是一样的
    • 建议删除
  5. 5.2.10 当没有mutex可用时,对mutex请求操作的耗时
    • 这个测试用例没有意义,因为没有mutex可用时,任务会阻塞,阻塞时间无法测量
    • 建议删除

目标与范围

  • 验证 FreeRTOS 在目标硬件上的功能可行性(任务、同步机制、定时器、内存管理、IPC 等)。
  • 测量关键操作与事件的延迟/耗时(任务切换、中断延迟、互斥/信号量/消息队列操作等)。
  • 评估实时性与稳定性(不同负载下的统计分布、抖动分析)。
  • 提供自动化测试脚本、数据采集和结果汇总流程,便于回归和对比。

✅: 已完成 ❌: 已删除 ❓: 存在疑惑 🚧: 未完成

功能测试

完成 序号 测试内容
✅ 5.1.1 任务管理:创建、删除任务功能——能正确实现所测试的系统功能。
✅ 5.1.2 任务管理:挂起或激活执行任务功能——能正确实现所测试的系统功能。
✅ 5.1.3 任务管理:赋予任务优先级功能——能正确实现所测试的系统功能。
✅ 5.1.4 任务管理:依据任务状态(就绪/运行/阻塞/挂起)调度任务并完成任务切换时的现场保护与恢复。
✅ 5.1.5 任务管理:支持基于优先级抢占调度算法,高优先级任务得到优先处理。
✅ 5.1.6 任务管理:同优先级任务支持时间片轮转或先进先出调度策略。
✅ 5.1.7 信号量:创建二值与计数信号量功能——能正确实现所测试的系统功能。
✅ 5.1.8 信号量:删除信号量功能——能正确实现所测试的系统功能。
✅ 5.1.9 信号量:任务以非阻塞方式锁定信号量——未锁定则成功,否则立即返回失败。
✅ 5.1.10 信号量:任务以永久等待方式获取信号量——未锁定则成功,否则一直阻塞直至获得或中断。
✅ 5.1.11 信号量:任务以限时等待方式获取信号量——未锁定则成功,否则在指定时间内等待,超时返回错误。
✅ 5.1.12 互斥量:创建、删除互斥量功能——能正确实现所测试的系统功能。
✅ 5.1.13 互斥量:任务以非阻塞方式获取互斥量——未锁定则成功,否则立即返回失败。
✅ 5.1.14 互斥量:任务以永久等待方式获取互斥量——未锁定则成功,否则一直阻塞直到可用。
✅ 5.1.15 互斥量:任务以限时等待方式获取互斥量——未锁定则成功,否则在指定时间内等待,超时返回。
❌ 5.1.16 读写锁:创建、删除共享读锁与互斥写锁功能——可正确分配/释放读写锁资源。
❌ 5.1.17 读写锁:读写任务竞争时采用读优先或写优先策略。
✅ 5.1.18 消息队列:任务通过消息队列完成同步通信。
✅ 5.1.19 消息队列:任务通过消息队列完成异步通信。
✅ 5.1.20 消息队列:创建、删除消息队列功能——能正确实现所测试的系统功能。
✅ 5.1.21 消息队列:任务以阻塞方式发送消息——队列满时阻塞直到空间可用或被中断。
✅ 5.1.22 消息队列:任务以非阻塞方式发送消息——队列满时立即返回错误。
❓ 5.1.23 消息队列:任务以阻塞方式接收消息——队列空时阻塞直到消息到达或被中断。
❓ 5.1.24 消息队列:任务以非阻塞方式接收消息——队列空时立即返回错误。
❌ 5.1.25 信号:向指定任务发送指定信号功能——能正确实现所测试的系统功能。
❌ 5.1.26 条件变量:初始化、销毁条件变量功能——能正确实现所测试的系统功能。
❌ 5.1.27 条件变量:任务以永久阻塞方式等待条件变量——直到条件变量被激活。
❌ 5.1.28 条件变量:任务以限时阻塞方式等待条件变量——直到条件变量被激活或超时。
✅ 5.1.29 时钟/定时器管理:设置、获取内核节拍计数值功能——能正确实现所测试的系统功能。
❌ 5.1.30 时钟/定时器管理:系统时钟设置与控制功能——能正确实现所测试的系统功能。
✅ 5.1.31 时钟/定时器管理:动态创建、删除看门狗定时器功能——能正确实现所测试的系统功能。
✅ 5.1.32 内存管理:内存动态分配与回收功能——能正确实现所测试的系统功能。
❌ 5.1.33 内存管理:创建、删除内存分区功能——能正确实现所测试的系统功能。

时间测试

完成 序号 测试内容
❓ 5.2.1 同一CPU上,优先级调度下的任务切换时间
❌ 5.2.2 不同CPU上,优先级调度下的任务切换时间
❌ 5.2.3 不设置亲和性,随系统调度,低优先级任务对信号量V操作到高优先级任务激活的时间
❌ 5.2.4 不设置亲和性,随系统调度,低优先级任务写消息队列到高优先级任务激活的时间
✅ 5.2.5 高优先级任务接收时间阻塞到低优先级任务激活的时间
✅ 5.2.6 创建一个信号量耗时
✅ 5.2.7 在同一CPU上,高优先级任务阻塞在信号量上,低优先级任务释放信号操作消耗的时间
✅ 5.2.8 创建一个互斥量耗时
✅ 5.2.9 在同一个CPU上,高优先级任务阻塞在mutex上,低优先级任务释放mutex操作消耗的时间
❓ 5.2.10 当没有mutex可用时,对mutex请求操作的耗时
✅ 5.2.11 创建一个消息队列需要的时间
✅ 5.2.12 当消息队列没有数据时,非阻塞接收1byte数据需要的时间
✅ 5.2.13 没有任务等待数据时,发送1Byte数据需要的时间
✅ 5.2.14 创建一个Alarm定时器的时间
✅ 5.2.15 在任务没有Alarm时,start一个alarm需要的时间
✅ 5.2.16 接收一个已产生的事件需要的时间
✅ 5.2.17 高优先级等待事件时,发送事件需要的时间
✅ 5.2.18 创建并激活一个任务需要的时间
✅ 5.2.19 对一个处于就绪状态的任务挂起所需要的时间
✅ 5.2.20 对于一个处于ready状态的任务修改优先级操作需要的时间

实时性测试

完成 序号 测试内容
✅ 5.3.1 任务切换时间:包括保存当前任务上下文、选择可被调度的新就绪任务以及恢复新任务上下文3个步骤的时间开销。
✅ 5.3.2 中断延迟时间:从发生中断到系统执行到中断服务程序第一条指令所需的时间开销。
✅ 5.3.3 抢占时间:低优先级任务执行过程中CPU使用权被一个就绪的高优先级任务抢占所需的时间开销。
❌ 5.3.4 系统调用时间:系统调用尽可能保持原子性,即尽量不包含操作系统调度时间(例如尽量不引起任务切换,以避免测得时间混入任务切换部分)。
❌ 5.3.5 实时稳定性:测试不同负载(不同任务数)下各实时性指标的标准差,用于衡量数值波动大小,反映系统稳定性。

相关函数执行时间

完成 序号 测试内容
✅ 5.4.1 挂起任务延迟时间:挂起其他任务所需时间(不发生任务切换)。
❓ 5.4.2 解挂任务延迟时间:唤醒被挂起任务所需时间(不发生任务切换)。
✅ 5.4.3 删除任务延迟时间:删除其他任务所需时间(不发生任务切换)。
✅ 5.4.4 设置任务优先级延迟时间:改变其他任务优先级所需时间(不发生任务切换)。
✅ 5.4.5 申请信号量延迟时间:信号量申请成功所需时间(不发生任务切换)。
✅ 5.4.6 释放信号量延迟时间:无等待任务时释放信号量所需时间(不发生任务切换)。
✅ 5.4.7 发送消息延迟时间:有等待任务时发送消息所需时间(不发生任务切换)。
✅ 5.4.8 接收消息延迟时间:消息接收成功所需时间(不发生任务切换)。
关于
351.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号