tornado的windview时间轴单位计算

本文详细探讨了VxWorks实时操作系统中任务调度和时钟中断的特性,通过实例代码展示了如何利用windview工具进行任务监控。通过分析发现,windview时间轴上的3个时间单位等于一个系统时钟tick,每个tick为16.67ms。在windview中,1秒等于180个时间单位,从而验证了时间单位的计算。
摘要由CSDN通过智能技术生成

VxWorks作为一款优秀的RTOS操作系统,有着优秀的任务切换和中断响应的时间性能 ,有着广泛的使用场景。
VxWorks支持优先级调度和时间片轮转调度。通过tornado提供的windview功能,我们可以通过图示来直观地了解我们应用程序中任务的切换过程。
我们知道VxWorks默认的系统时钟tick为60,即一秒钟被分成了60个tick,我们也可以通过系统函数sysClkRateGet()来获取这个数值,当然我们也可以通过调用系统函数sysClkRateet()来重新设置这个值。
在使用windview的过程中,我发现windview上面的时间轴的单位很奇怪,因此简单写了一段程序来测试其时间轴的单位。
废话不多说,先上代码

#include "vxWorks.h"
#include "stdio.h"
#include "stdlib.h"
#include "semLib.h"
#include "taskLib.h"
#include "sysLib.h"

void taskSend1();
int i = 0;
int tidSend1;
int main(){
	
	tidSend1 = taskSpawn("tSend1",200,0,20000,(FUNCPTR)taskSend1,0,0,0,0,0,0,0,0,0,0);
	return;
}

void taskSend1(){
	while(1){
	printf("\n%d",i++);
	taskDelay(sysClkRateGet());}	
}

这段代码就是让一个任务执行一次之后,挂起1s钟。
在windview钟taskSend被调用的情况如下图:
在这里插入图片描述
这张图片有3个信息值得注意:

  1. 任务interrupt1是系统时钟中断任务,可以看出,每次系统时钟中断需要耗费2个时间单位来执行,系统时钟中断并不是瞬间完成的,而是需要耗费一些时间。
  2. 在没有其他任务执行,只有系统时钟中断任务的时候,系统时钟中断任务每3个时间单位就执行一次(即时钟中断每3个时间单位执行一次),从这边其实就可以推断出windview上的3个时间单位等于一个tick的时间,而前面我们知道一个tick是1/60s = 16.67ms,故时间轴的一个时间单位是16.67ms/3 = 5.56ms。
  3. 我们创建的tSend1任务只需要一个时间单位就可以执行完(从任务调度的角度来说,当某个任务获得执行权的时候,当下的这个时间tick都是属于这个任务的,因此最小时间单位就是一个tick,也许这个任务很简单,还不到一个tick就执行完了)。
    继续看一张图,显示tSend1任务的执行间隔,前面通过代码可知,我们设置的是1s 的时间间隔。
    在这里插入图片描述
    可以看出1s = (406-224)~= 180个时间单位。
    最后我们可以得出结论:在windview时间轴上 1s = 60 ticks = 180 个时间单位。以后要判断时间轴的单位我们就可以通过观察两次系统时钟中断的时间间隔来计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小熊coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值