add time test into kernel/task.md
After Width: | Height: | Size: 291 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 686 KiB |
After Width: | Height: | Size: 728 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 295 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 599 KiB |
After Width: | Height: | Size: 60 KiB |
|
@ -10,6 +10,10 @@
|
||||||
* [信号量](#sem)
|
* [信号量](#sem)
|
||||||
* [互斥量](#mutex)
|
* [互斥量](#mutex)
|
||||||
* [事件集](#event)
|
* [事件集](#event)
|
||||||
|
* [任务切换时间测试](#time_test)
|
||||||
|
* [概述](#time_test_intro)
|
||||||
|
* [基于 ARM 处理器的任务切换时间测试](#time_test_arm)
|
||||||
|
* [基于 RISC-V 处理器的任务切换时间测试](#time_test_riscv)
|
||||||
* [使用场景](#situation)
|
* [使用场景](#situation)
|
||||||
|
|
||||||
<span id="management"></span>
|
<span id="management"></span>
|
||||||
|
@ -533,6 +537,160 @@ xs_int32 xs_UserEventReinit(xs_uint16 id);
|
||||||
| 参数 | 描述 |
|
| 参数 | 描述 |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| id | 来源消息队列ID |
|
| id | 来源消息队列ID |
|
||||||
|
|
||||||
|
<span id="time_test"></span>
|
||||||
|
|
||||||
|
## 任务切换时间测试
|
||||||
|
|
||||||
|
<span id="time_test_intro"></span>
|
||||||
|
|
||||||
|
### 概述
|
||||||
|
下面分别测试XiUOS系统运行在基于ARM和RISC-V不同处理器的开发板时,任务的切换时间。
|
||||||
|
|
||||||
|
|
||||||
|
<span id="time_test_arm"></span>
|
||||||
|
|
||||||
|
### 基于 ARM 处理器的任务切换时间测试
|
||||||
|
|
||||||
|
#### 测试方法
|
||||||
|
为了测试系统的任务切换时间,考虑使用GPIO管脚进行测试,将GPIO在任务切换开始和结束时分别置为高电平和低电平。
|
||||||
|
* 配置C13管脚为输出模式,接示波器通道1或2
|
||||||
|
* 示波器GND和开发板GND共地对接
|
||||||
|
|
||||||
|
<center>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
</center>
|
||||||
|
|
||||||
|
XiUOS的任务切换函数为xs_SwitchKthreadContext,在SwitchKthreadContext函数入口位置将C13管脚置为高电平,出口位置置为低电平;则C13管脚保持高电平的时间即切换时间。
|
||||||
|
|
||||||
|
#### 编程代码清单
|
||||||
|
|
||||||
|
<center>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
</center>
|
||||||
|
|
||||||
|
因为测试单板为cortex-m4单板,该系列单板的线程切换是基于pendSV CPU异常进行线程切换,因此下面基于该特点区分测试场景:
|
||||||
|
* 测量pendSV异常切换: 在SwitchKthreadContext函数入口处将C13管脚置为高电平,在pendSV异常处理过程,保存现场之后,切换到目标任务之前将C13管脚置为低电平。得出的管脚电平时间即为带pendSV异常的的任务切换时间。
|
||||||
|
* 只测了SwitchKthreadContext:在SwitchKthreadContext函数入口处将C13管脚置为高电平,在出口位置,将C13管脚置为低电平。得出的管脚电平时间即为不计算pendSV异常的的任务切换时间。
|
||||||
|
|
||||||
|
<center>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
</center>
|
||||||
|
|
||||||
|
<center>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
</center>
|
||||||
|
|
||||||
|
#### 示波器测试选项设置
|
||||||
|
|
||||||
|
* 通道设置
|
||||||
|
* 耦合:直流
|
||||||
|
* 带宽限制:关闭
|
||||||
|
* 伏/格:粗调
|
||||||
|
* 探头:10X 电压
|
||||||
|
* 反相:关闭
|
||||||
|
* 触发设置
|
||||||
|
* 类型:边沿
|
||||||
|
* 信源: CH1
|
||||||
|
* 斜率:上升
|
||||||
|
* 模式:自动
|
||||||
|
* 触发电压:略低于最高电平即可
|
||||||
|
* 测量设置
|
||||||
|
* 测量选通:开启
|
||||||
|
* 类型:时间
|
||||||
|
* 信源:CH1
|
||||||
|
* Scale:500ns
|
||||||
|
|
||||||
|
#### 测试结果
|
||||||
|
|
||||||
|
<center>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
</center>
|
||||||
|
|
||||||
|
从示波器测试结果上来看,单独测试SwitchKthreadContext的执行时间是1.26us。
|
||||||
|
|
||||||
|
<center>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
</center>
|
||||||
|
从示波器测试结果上来看,测试SwitchKthreadContext加上pendSV异常的的执行时间是17us。
|
||||||
|
|
||||||
|
<span id="time_test_riscv"></span>
|
||||||
|
|
||||||
|
### 基于 RISC-V 处理器的任务切换时间测试
|
||||||
|
|
||||||
|
#### 测试方法
|
||||||
|
|
||||||
|
为了测试系统的任务切换时间,考虑使用GPIO管脚进行测试,将GPIO在任务切换开始和结束时分别置为高电平和低电平。
|
||||||
|
* 配置GPIO18管脚为输出模式,接示波器通道1或2
|
||||||
|
* 示波器GND和开发板GND共地对接
|
||||||
|
|
||||||
|
<center>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
</center>
|
||||||
|
|
||||||
|
XiUOS的任务切换函数为xs_SwitchKthreadContext,在SwitchKthreadContext函数入口位置将GPIO18管脚置为高电平,出口位置置为低电平;则GPIO18管脚保持高电平的时间即切换时间。
|
||||||
|
|
||||||
|
#### 编程代码清单
|
||||||
|
|
||||||
|
<center>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
</center>
|
||||||
|
|
||||||
|
初始化GPIO18为输出模式,并初始化为低电平;在while(1)当中调用delay函数,每隔1个时间片发生一次调度。在下面的switch函数入口和出口位置操作GPIO。
|
||||||
|
|
||||||
|
<center>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
</center>
|
||||||
|
|
||||||
|
### 示波器测试选项设置
|
||||||
|
|
||||||
|
* 通道设置
|
||||||
|
* 耦合:直流
|
||||||
|
* 带宽限制:关闭
|
||||||
|
* 伏/格:粗调
|
||||||
|
* 探头:10X 电压
|
||||||
|
* 反相:关闭
|
||||||
|
* 触发设置
|
||||||
|
* 类型:边沿
|
||||||
|
* 信源: CH1
|
||||||
|
* 斜率:上升
|
||||||
|
* 模式:自动
|
||||||
|
* 触发电压:略低于最高电平即可
|
||||||
|
* 测量设置
|
||||||
|
* 测量选通:开启
|
||||||
|
* 类型:时间
|
||||||
|
* 信源:CH1
|
||||||
|
* Scale:250ns
|
||||||
|
|
||||||
|
### 测试结果
|
||||||
|
|
||||||
|
|
||||||
|
<center>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
</center>
|
||||||
|
|
||||||
|
从示波器测试结果上来看,测试SwitchKthreadContext的执行时间是160ns.
|
||||||
|
|
||||||
<span id="situation"></span>
|
<span id="situation"></span>
|
||||||
|
|
||||||
## 使用场景
|
## 使用场景
|
||||||
|
|