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)
|
||||
* [互斥量](#mutex)
|
||||
* [事件集](#event)
|
||||
* [任务切换时间测试](#time_test)
|
||||
* [概述](#time_test_intro)
|
||||
* [基于 ARM 处理器的任务切换时间测试](#time_test_arm)
|
||||
* [基于 RISC-V 处理器的任务切换时间测试](#time_test_riscv)
|
||||
* [使用场景](#situation)
|
||||
|
||||
<span id="management"></span>
|
||||
|
@ -533,6 +537,160 @@ xs_int32 xs_UserEventReinit(xs_uint16 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>
|
||||
|
||||
## 使用场景
|
||||
|
|