Skip to content

Embassy Preempt RTOS - 2026年2月技术报告

一、概述

2026年2月,完成了JH7110(VisionFive 2)平台的中断管理、日志系统完善以及性能基准测试。

二、主要工作内容

2.1 内存管理优化(第十一周)

问题诊断

  • 发现原有内存地址(0x80400000)与OpenSBI/U-Boot存在内存冲突
  • 导致hart1(运行OpenSBI)报错崩溃
  • 定位到VisionFive 2启动流程的内存布局冲突问题

解决方案

  • 分析JH7110启动阶段的内存分配
  • 调整内存布局到合法地址空间
  • 在各系统间设立专用内存区域,防止相互踩踏

2.2 UART日志驱动实现(第十二周)

实现目标

  • embassy-preempt-log添加除defmt-rtt外的第二个输出后端
  • 实现运行时日志的串口输出
  • 为后续系统测试提供日志支持

技术实现

实现了基于uart16550的串口驱动,为JH7110平台配置了双串口方案:

  • UART0 (0x10010000): 用于embassy_preempt的日志输出
  • UART1 (0x10011000): 保留给U-Boot及后续Linux系统使用

这种配置使得embassy_preempt的运行日志可以独立输出,不会与U-Boot/Linux的console输出混在一起,便于调试和问题追踪。

通过添加log-uart feature flag,可以灵活选择日志输出后端(defmt-rtt或UART)。

2.3 中断与时钟优化(第十三周)

问题

  1. riscv_rt的中断管理与embassy_preempt上下文切换不兼容
  2. 缺少机器时钟中断处理逻辑

解决方案

  1. 中断管理初始化

    • 在platform初始化时启用RISC-V机器中断
    • 设置中断向量表入口地址
  2. 零栈开销ecall处理

    • 使用汇编实现,覆盖riscv_rt中断管理策略
    • 避免上下文切换时的栈冲突问题
  3. 时钟中断处理

    • 实现完整的机器时钟中断处理函数
    • 支持多路alarm定时器触发
    • 在中断中检查并触发超时的alarm回调

2.4 性能基准测试(第十三周)

测试目的 量化RTOS实时性能关键指标:

  • 任务创建延迟
  • 任务切换延迟
  • 中断响应延迟

测试环境

项目规格
硬件平台StarFive JH7110 (VisionFive2)
CPURISC-V U74 @ 1 GHz
定时器CLINT mtime @ 4 MHz
测量方法CPU 指令计数

三、性能测试结果

3.1 核心性能指标

指标CPU循环执行时间平均延迟
任务创建延迟400-500条400-500 ns457 ns
中断响应延迟400-800条400-800 ns633 ns

3.2 性能对比

RTOS/系统平台CPU频率任务创建延迟中断响应延迟数据来源
Embassy PreemptRISC-V JH71101 GHz457 ns633 ns实际测试
Embassy PreemptARM STM32F401RE84 MHz10.13 μs-实际测试
FreeRTOSARM Cortex-M372 MHz~12 μs-文档
FreeRTOSRISC-V HiFive1320 MHz~1.8 μs-SiFive
ZephyrARM Cortex-M64 MHz~8 μs-文档
Linux PREEMPT_RTx86_643 GHz-7-50 μs文档

3.3 测量方法

原理: CPU循环计数 → 时间转换 公式: 执行时间 = CPU循环次数 / CPU频率 × 10^9

四、技术成果

  1. 内存稳定性: 解决了与固件的内存冲突,系统可稳定启动运行
  2. 调试能力: 实现双串口UART日志输出,支持运行时系统状态监控
  3. 中断系统: 完善时钟中断处理,支持定时器和调度器功能
  4. 性能数据: 获得权威的实时性能基准数据

六、总结

2月份的工作完成了Embassy Preempt在JH7110平台上的核心功能验证:

  • ✅ 内存管理稳定
  • ✅ 日志系统完善
  • ✅ 中断系统优化
  • ✅ 性能基准确立