☰
HRTOS 4.0 硬件性能实测:启动时间、任务切换与高速任务调度
2026/10/14 1:23:52 网站建设 项目流程

一、测试目的

为了更直观地了解 HRTOS 4.0 在实际硬件上的运行表现,本次测试采用逻辑分析仪,对系统启动、首个任务启动以及普通任务和高速任务之间的切换过程进行测量。

本次测试重点关注以下四个方面:

  1. 系统上电后,到达hrtos_main()的时间。

  2. 从进入hrtos_main()到首个任务开始执行的时间。

  3. 普通任务之间通过调度触发位和时间片机制进行切换时的时间开销。

  4. 高速任务之间通过调度触发位和时间片机制进行切换时的时间开销。

与仅根据源代码或指令周期进行估算不同,本次测试以实际运行的目标硬件和逻辑分析仪采集结果为依据,观察 HRTOS 在真实执行环境中的时间表现。

测试说明:本文数据为当前测试环境下的实测结果,不代表所有 8051 芯片、时钟频率、编译配置及应用负载下的通用性能指标。

二、测试环境与测量方法

2.1 测试方法

本次使用 GPIO 引脚作为测试信号,通过程序在特定执行位置改变引脚电平,再利用逻辑分析仪观察信号变化的时间位置。

主要测量项目包括:

  • 上电至进入hrtos_main()的时间。

  • 进入hrtos_main()至首个任务执行的时间。

  • 普通任务切换的时间。

  • 高速任务切换的时间。

对于任务切换测试,通过在任务执行过程中改变 GPIO 电平,并结合 HRTOS 的调度触发机制,观察任务切换前后的信号变化。

其中,调度触发位方式通过修改OS_SCHED_REASON请求调度;时间片方式则通过触发 T0 中断进入系统的调度处理流程。

2.2 测量结果汇总

测试项目测试方式实测时间
上电至进入hrtos_main()系统启动347.21 ms
hrtos_main()至首个任务执行os_delay(0)启动路径11.025 ms
普通任务切换调度触发位394.33 μs
普通任务切换时间片触发550.33 μs
高速任务切换调度触发位143.5 μs
高速任务切换时间片触发229.5 μs

以上数据反映了本次测试程序中,从指定测量起点到指定测量终点的时间间隔。任务切换数据应结合相应的 GPIO 翻转位置理解,不能直接等同于纯粹的内核上下文保存与恢复指令耗时。

三、测试一:系统启动时间

3.1 测试代码

#include "hrtos_internal.h" #include "bsp_gpio.h" #include "perf_task.h" sbit P10 = P1^0; void hrtos_main(void) { P10 = 0; os_delay(0); }

该测试在进入hrtos_main()后立即将 P1.0 拉低,并调用os_delay(0)。

通过观察上电过程和 GPIO 信号变化,可以测量系统上电到进入应用入口函数的时间,以及应用入口到后续任务调度路径的时间。

3.2 测试结果

上电至进入hrtos_main():347.21 ms

从上电到进入应用入口函数,实测耗时为 347.21 ms。

这段时间属于系统启动阶段的测量结果,其具体构成可能涉及芯片复位与启动过程、硬件初始化、C 运行环境初始化以及 HRTOS 初始化等环节。各环节的实际耗时需要结合启动代码和对应的测量标记进一步拆分。

图片 1:系统上电至进入hrtos_main()的逻辑分析仪截图

图 1:HRTOS 4.0 上电启动时间实测,测量结果为 347.21 ms。

3.3hrtos_main()到首个任务执行

本次测试中,从进入hrtos_main()到首个任务开始执行,实测时间为 11.025 ms。

需要注意,这个数值对应当前测试代码中的os_delay(0)路径及所采用的测量起止点,并不应直接理解为所有 HRTOS 应用中固定不变的任务启动延迟。

图片 2:hrtos_main()到首个任务执行的逻辑分析仪截图

图 2:从应用入口到首个任务执行的实测时间为 11.025 ms。

四、测试二:普通任务切换

4.1 测试目的

普通任务测试用于观察两个普通任务在 HRTOS 调度机制下的切换表现。

测试创建两个普通任务,分别通过 P1.0 输出不同电平,以便通过逻辑分析仪识别任务执行位置。

本组测试比较两种调度触发方式:

  • 调度触发位方式。

  • 时间片触发方式。

4.2 测试代码

应用入口创建两个普通任务:

#include "hrtos_internal.h" #include "bsp_gpio.h" #include "perf_task.h" void hrtos_main(void) { os_task_create((unsigned int)task_a, 1, 2, 5); os_task_create((unsigned int)task_b, 2, 2, 5); }

任务 A:

void task_a(void) { while (1) { OS_PROCESS_OK[1] &= 0xfe; OS_PROCESS_OK[2] |= 0x01; OS_SCHED_REASON = 1; // 调度触发位 P10 = 0; TF0 = 1; // T0 中断 } }

任务 B:

void task_b(void) { P10 = 1; while (1) { OS_PROCESS_OK[2] &= 0xfe; OS_PROCESS_OK[1] |= 0x01; P10 = 1; TF0 = 1; // T0 中断 } }

上述代码通过修改任务状态相关标志、设置调度触发位以及触发 T0 中断,构造任务切换测试场景。

这里直接操作了 HRTOS 内部状态变量,属于面向内核机制的测试代码,不是推荐给普通应用程序使用的任务切换方式。相关操作依赖当前版本的内部实现和具体测试配置。

4.3 调度触发位方式

采用调度触发位方式时,普通任务切换的实测时间为:

394.33 μs

图片 3:普通任务通过调度触发位进行切换的逻辑分析仪截图

图 3:普通任务通过调度触发位触发调度,实测时间为 394.33 μs。

4.4 时间片触发方式

采用时间片触发方式时,普通任务切换的实测时间为:

550.33 μs

图片 4:普通任务通过时间片触发进行切换的逻辑分析仪截图

图 4:普通任务通过时间片相关路径触发调度,实测时间为 550.33 μs。

4.5 普通任务测试结果分析

在本次测试条件下,调度触发位方式的测量值比时间片触发方式低 156 μs。

这表明,在当前测试代码、调度路径和测量口径下,两种触发方式表现出不同的时间开销。

需要强调的是,调度触发位方式与时间片触发方式的触发条件不同,实际执行路径也可能不同。因此,这一差值反映的是本次测试场景下两种完整执行路径的时间差异,而不能直接视为调度触发位操作本身节省的纯内核指令时间。

五、测试三:高速任务切换

5.1 测试目的

高速任务测试进一步观察 HRTOS 高速任务之间的切换表现。

与普通任务测试不同,本组测试创建任务 ID 为 16 和 17 的高速任务,优先级参数设为 8,并使用 GPIO 信号标记任务执行位置。

测试分别观察调度触发位方式和 T0 中断触发方式下的任务切换时间。

5.2 测试代码

应用入口:

#include "hrtos_internal.h" #include "bsp_gpio.h" #include "perf_task.h" void hrtos_main(void) { os_task_create((unsigned int)task_a, 16, 8, 5); os_task_create((unsigned int)task_b, 17, 8, 5); }

高速任务 A:

void task_a(void) { while (1) { P10 = 0; TF0 = 1; // T0 中断 } }

高速任务 B:

void task_b(void) { P10 = 1; while (1) { TF0 = 1; OS_SCHED_REASON = 1; // 调度触发位 P10 = 1; } }

本组测试使用高速任务专用任务 ID,并通过任务执行中的 GPIO 操作和调度触发行为形成可观测信号。

5.3 调度触发位方式

高速任务采用调度触发位方式时,实测切换时间为:

143.5 μs

图片 5:高速任务通过调度触发位进行切换的逻辑分析仪截图

图 5:高速任务通过调度触发位触发调度,实测时间为 143.5 μs。

5.4 时间片触发方式

高速任务采用时间片触发方式时,实测切换时间为:

229.5 μs

图片 6:高速任务通过时间片触发进行切换的逻辑分析仪截图

图 6:高速任务通过时间片相关路径触发调度,实测时间为 229.5 μs。

5.5 高速任务测试结果分析

在本次测试条件下,高速任务采用调度触发位方式的测量值比时间片触发方式低 86 μs。

与普通任务测试相同,这一差异是当前测量起止点、触发机制及任务执行路径共同作用的结果,不能简单归结为某一条调度指令的耗时差异。

高速任务的测试数据表明,在当前硬件和测试程序中,两种调度触发路径具有不同的实测时间表现。

六、普通任务与高速任务的对比

将两组任务切换数据放在一起,可以更直观地观察当前测试条件下的差异。

任务类型调度触发位时间片触发两种方式的测量差值
普通任务394.33 μs550.33 μs156 μs
高速任务143.5 μs229.5 μs86 μs

从本次测量结果可以看到:

  1. 普通任务在调度触发位测试中的测量值为 394.33 μs。

  2. 高速任务在调度触发位测试中的测量值为 143.5 μs。

  3. 两组测试中,调度触发位方式的测量值均低于时间片触发方式。

  4. 高速任务与普通任务在当前测试程序中的测量结果存在明显差异。

这些结果说明,任务类型、调度触发机制和具体执行路径都是分析 RTOS 时间性能时需要关注的因素。

但应当注意,以上结果是特定测试场景下的观测值。若要严格比较不同任务类型的纯上下文切换开销,还需要统一测量起点和终点、GPIO 操作位置、触发条件、编译优化设置及其他运行条件,并尽量隔离测试代码自身的影响。

七、关于实测数据的说明

本次测试采用逻辑分析仪观察真实硬件上的 GPIO 信号变化,其价值在于能够直接验证程序在目标芯片上的实际执行表现。

不过,一次测量得到的时间值不等于经过充分验证的最坏执行时间,也不自动代表严格的硬实时保证。

如果后续需要进一步分析 HRTOS 的最坏情况执行时间,还需要考虑中断干扰、临界区、不同任务状态、不同调度路径以及具体编译结果等因素,并通过更系统的测试和分析建立证据。

因此,本文重点呈现当前硬件测试条件下的实测结果,而不是将这些数值直接推广为所有应用场景下的性能承诺。

八、总结

本次对 HRTOS 4.0 进行了启动时间、首个任务启动时间、普通任务切换和高速任务切换测试,主要结果如下:

  • 上电至进入hrtos_main():347.21 ms。

  • hrtos_main()至首个任务执行:11.025 ms。

  • 普通任务切换:调度触发位方式 394.33 μs,时间片触发方式 550.33 μs。

  • 高速任务切换:调度触发位方式 143.5 μs,时间片触发方式 229.5 μs。

通过逻辑分析仪,可以将 HRTOS 的部分运行行为转化为可观察、可记录的硬件时间数据,为后续性能优化和内核行为验证提供依据。

对于嵌入式实时操作系统而言,性能不仅需要通过代码和设计进行分析,也需要在实际目标硬件上进行测量和验证。后续工作将继续围绕实际运行表现、内核行为和工程可靠性展开。

HRTOS 4.0:以真实硬件测试为依据,持续打磨 8051 实时操作系统的工程能力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询