diff --git a/docs/doc/kernel/imagesrc/arm_test.png b/docs/doc/kernel/imagesrc/arm_test.png new file mode 100644 index 0000000..209a3d7 Binary files /dev/null and b/docs/doc/kernel/imagesrc/arm_test.png differ diff --git a/docs/doc/kernel/imagesrc/arm_test_code.png b/docs/doc/kernel/imagesrc/arm_test_code.png new file mode 100644 index 0000000..527f07c Binary files /dev/null and b/docs/doc/kernel/imagesrc/arm_test_code.png differ diff --git a/docs/doc/kernel/imagesrc/arm_test_result.png b/docs/doc/kernel/imagesrc/arm_test_result.png new file mode 100644 index 0000000..4efa9b0 Binary files /dev/null and b/docs/doc/kernel/imagesrc/arm_test_result.png differ diff --git a/docs/doc/kernel/imagesrc/arm_test_result1.png b/docs/doc/kernel/imagesrc/arm_test_result1.png new file mode 100644 index 0000000..e54dc82 Binary files /dev/null and b/docs/doc/kernel/imagesrc/arm_test_result1.png differ diff --git a/docs/doc/kernel/imagesrc/arm_test_switch.png b/docs/doc/kernel/imagesrc/arm_test_switch.png new file mode 100644 index 0000000..52f8b7b Binary files /dev/null and b/docs/doc/kernel/imagesrc/arm_test_switch.png differ diff --git a/docs/doc/kernel/imagesrc/arm_test_switch1.png b/docs/doc/kernel/imagesrc/arm_test_switch1.png new file mode 100644 index 0000000..e33a7f2 Binary files /dev/null and b/docs/doc/kernel/imagesrc/arm_test_switch1.png differ diff --git a/docs/doc/kernel/imagesrc/riscv-test.png b/docs/doc/kernel/imagesrc/riscv-test.png new file mode 100644 index 0000000..10eeaf1 Binary files /dev/null and b/docs/doc/kernel/imagesrc/riscv-test.png differ diff --git a/docs/doc/kernel/imagesrc/riscv_test_code.png b/docs/doc/kernel/imagesrc/riscv_test_code.png new file mode 100644 index 0000000..f5b293a Binary files /dev/null and b/docs/doc/kernel/imagesrc/riscv_test_code.png differ diff --git a/docs/doc/kernel/imagesrc/riscv_test_result.png b/docs/doc/kernel/imagesrc/riscv_test_result.png new file mode 100644 index 0000000..3be3642 Binary files /dev/null and b/docs/doc/kernel/imagesrc/riscv_test_result.png differ diff --git a/docs/doc/kernel/imagesrc/riscv_test_switch.png b/docs/doc/kernel/imagesrc/riscv_test_switch.png new file mode 100644 index 0000000..246025e Binary files /dev/null and b/docs/doc/kernel/imagesrc/riscv_test_switch.png differ diff --git a/docs/doc/kernel/task.md b/docs/doc/kernel/task.md index 4c899fb..2e1dd04 100644 --- a/docs/doc/kernel/task.md +++ b/docs/doc/kernel/task.md @@ -10,6 +10,10 @@ * [信号量](#sem) * [互斥量](#mutex) * [事件集](#event) +* [任务切换时间测试](#time_test) + * [概述](#time_test_intro) + * [基于 ARM 处理器的任务切换时间测试](#time_test_arm) + * [基于 RISC-V 处理器的任务切换时间测试](#time_test_riscv) * [使用场景](#situation) @@ -533,6 +537,160 @@ xs_int32 xs_UserEventReinit(xs_uint16 id); | 参数 | 描述 | | --- | --- | | id | 来源消息队列ID | + + + +## 任务切换时间测试 + + + +### 概述 +下面分别测试XiUOS系统运行在基于ARM和RISC-V不同处理器的开发板时,任务的切换时间。 + + + + +### 基于 ARM 处理器的任务切换时间测试 + +#### 测试方法 +为了测试系统的任务切换时间,考虑使用GPIO管脚进行测试,将GPIO在任务切换开始和结束时分别置为高电平和低电平。 +* 配置C13管脚为输出模式,接示波器通道1或2 +* 示波器GND和开发板GND共地对接 + +
+ +![RISCV TEST CONNECT](./imagesrc/arm_test.png) + +
+ +XiUOS的任务切换函数为xs_SwitchKthreadContext,在SwitchKthreadContext函数入口位置将C13管脚置为高电平,出口位置置为低电平;则C13管脚保持高电平的时间即切换时间。 + +#### 编程代码清单 + +
+ +![RISCV TEST CONNECT](./imagesrc/arm_test_code.png) + +
+ +因为测试单板为cortex-m4单板,该系列单板的线程切换是基于pendSV CPU异常进行线程切换,因此下面基于该特点区分测试场景: +* 测量pendSV异常切换: 在SwitchKthreadContext函数入口处将C13管脚置为高电平,在pendSV异常处理过程,保存现场之后,切换到目标任务之前将C13管脚置为低电平。得出的管脚电平时间即为带pendSV异常的的任务切换时间。 +* 只测了SwitchKthreadContext:在SwitchKthreadContext函数入口处将C13管脚置为高电平,在出口位置,将C13管脚置为低电平。得出的管脚电平时间即为不计算pendSV异常的的任务切换时间。 + +
+ +![RISCV TEST CONNECT](./imagesrc/arm_test_switch.png) + +
+ +
+ +![RISCV TEST CONNECT](./imagesrc/arm_test_switch1.png) + +
+ +#### 示波器测试选项设置 + +* 通道设置 + * 耦合:直流 + * 带宽限制:关闭 + * 伏/格:粗调 + * 探头:10X 电压 + * 反相:关闭 +* 触发设置 + * 类型:边沿 + * 信源: CH1 + * 斜率:上升 + * 模式:自动 + * 触发电压:略低于最高电平即可 +* 测量设置 + * 测量选通:开启 + * 类型:时间 + * 信源:CH1 + * Scale:500ns + +#### 测试结果 + +
+ +![RISCV TEST CONNECT](./imagesrc/arm_test_result.png) + +
+ +从示波器测试结果上来看,单独测试SwitchKthreadContext的执行时间是1.26us。 + +
+ +![RISCV TEST CONNECT](./imagesrc/arm_test_result1.png) + +
+从示波器测试结果上来看,测试SwitchKthreadContext加上pendSV异常的的执行时间是17us。 + + + +### 基于 RISC-V 处理器的任务切换时间测试 + +#### 测试方法 + +为了测试系统的任务切换时间,考虑使用GPIO管脚进行测试,将GPIO在任务切换开始和结束时分别置为高电平和低电平。 +* 配置GPIO18管脚为输出模式,接示波器通道1或2 +* 示波器GND和开发板GND共地对接 + +
+ +![RISCV TEST CONNECT](./imagesrc/riscv-test.png) + +
+ +XiUOS的任务切换函数为xs_SwitchKthreadContext,在SwitchKthreadContext函数入口位置将GPIO18管脚置为高电平,出口位置置为低电平;则GPIO18管脚保持高电平的时间即切换时间。 + +#### 编程代码清单 + +
+ +![RISCV TEST CONNECT](./imagesrc/riscv_test_code.png) + +
+ +初始化GPIO18为输出模式,并初始化为低电平;在while(1)当中调用delay函数,每隔1个时间片发生一次调度。在下面的switch函数入口和出口位置操作GPIO。 + +
+ +![RISCV TEST CONNECT](./imagesrc/riscv_test_switch.png) + +
+ +### 示波器测试选项设置 + +* 通道设置 + * 耦合:直流 + * 带宽限制:关闭 + * 伏/格:粗调 + * 探头:10X 电压 + * 反相:关闭 +* 触发设置 + * 类型:边沿 + * 信源: CH1 + * 斜率:上升 + * 模式:自动 + * 触发电压:略低于最高电平即可 +* 测量设置 + * 测量选通:开启 + * 类型:时间 + * 信源:CH1 + * Scale:250ns + +### 测试结果 + + +
+ +![RISCV TEST CONNECT](./imagesrc/riscv_test_result.png) + +
+ +从示波器测试结果上来看,测试SwitchKthreadContext的执行时间是160ns. + ## 使用场景