WINCE系统里面,从驱动发消息给AP到AP接收到这个消息的时间间隔是多少?有没什么好的方法测量这个时间间隔?

gouri   2009-4-3 16:34 楼主
WINCE系统里面,从驱动发消息给AP到AP接收到这个消息的时间间隔是多少?有没什么好的方法测量这个时间间隔?

回复评论 (14)

在驱动程序里面GetSystemTick,在应用程序里面也GetSysTick 计算一下就知道了。
点赞  2009-4-3 16:57
不知道这个时间间隔一般是那个级别的。毫秒?us秒?
点赞  2009-4-3 17:01
还有个方法是根据你WinCE时钟节拍来的,通常是ms
点赞  2009-4-3 17:06
引用: 引用 1 楼 xajhuang 的回复:
在驱动程序里面GetSystemTick,在应用程序里面也GetSysTick 计算一下就知道了。


我的VS2005环境里面没这个函数啊!在那个头文件里面?
点赞  2009-4-3 17:06
一段C#的代码,你改成VC就行了。主要是调用的那个函数。

  1. long count = 0;
  2.         long count1 = 0;
  3.         long freq = 0;
  4.         double result = 0;
  5.         
  6.         QueryPerformanceFrequency(ref freq);
  7.         QueryPerformanceCounter(ref count);

  8.         //开始的时候没有这层循环,所得数据浮动很大,添加这层循环来使得结果更加平均
  9.         for (int i=0; i<500; i++)
  10.         {
  11.                 //需要测试的模块
  12.         }
  13.         
  14.         QueryPerformanceCounter(ref count1);

  15.         count = count1-count;
  16.         result = (double)(count)/(double)freq;

  17.         Console.WriteLine("耗时: {0} 秒", result);
  18.         Console.ReadLine();

点赞  2009-4-3 17:08
再来一个C++的

  1. // 计时频率   
  2. LARGE_INTEGER freq;   
  3. if (QueryPerformanceFrequency(&freq))   
  4. {   
  5.     /* 返回TRUE表明支持 */  
  6.       
  7.     // 之前的滴答数   
  8.     LARGE_INTEGER countBefore;   
  9.     // 之后的滴答数   
  10.     LARGE_INTEGER countAfter;   
  11.       
  12.     // 查询之前的滴答数   
  13.     QueryPerformanceCounter(&countBefore);   
  14.   
  15.     // 需要统计时间的代码或者函数,这里用空循环代替。加volatile防止编译器优化   
  16.     for (volatile int i = 0; i < 100; i++);   
  17.   
  18.     // 之后的滴答数   
  19.     QueryPerformanceCounter(&countAfter);   
  20.   
  21.     // (执行后的滴答数 - 执行前的滴答数) ÷ 滴答频率,这里乘以1000000000(1.0e9)目的是以纳秒为单位   
  22.     double nanoSecTime = ((countAfter.QuadPart - countBefore.QuadPart) * 1000000000) / (double)freq.QuadPart   
  23.       
  24.     cout << nanoSecTime << endl;   
  25. }   
  26. else  
  27. {   
  28.     /* 返回FALSE表明不支持 */  
  29.       
  30.     cout << "Not Supported" << endl;   
  31. }   
  32. // 计时频率
  33. LARGE_INTEGER freq;
  34. if (QueryPerformanceFrequency(&freq))
  35. {
  36.         /* 返回TRUE表明支持 */
  37.        
  38.         // 之前的滴答数
  39.         LARGE_INTEGER countBefore;
  40.         // 之后的滴答数
  41.         LARGE_INTEGER countAfter;
  42.        
  43.         // 查询之前的滴答数
  44.         QueryPerformanceCounter(&countBefore);

  45.         // 需要统计时间的代码或者函数,这里用空循环代替。加volatile防止编译器优化
  46.         for (volatile int i = 0; i < 100; i++);

  47.         // 之后的滴答数
  48.         QueryPerformanceCounter(&countAfter);

  49.         // (执行后的滴答数 - 执行前的滴答数) ÷ 滴答频率,这里乘以1000000000(1.0e9)目的是以纳秒为单位
  50.         double nanoSecTime = ((countAfter.QuadPart - countBefore.QuadPart) * 1000000000) / (double)freq.QuadPart
  51.        
  52.         cout << nanoSecTime << endl;
  53. }
  54. else
  55. {
  56.         /* 返回FALSE表明不支持 */
  57.        
  58.         cout << "Not Supported" << endl;
  59. }


点赞  2009-4-3 17:09
1. Remote Tools 中的 Kernel Tracker 應可以, 但建議 Enable Profiling.
2. Windows CE 基本上是 ms 等級的作業系統, 這跟你 BSP 中的 Scheduler Timer 有關, 絕大多數都是用 1ms 做單位.
3. 你要量測的目標, 影響變數太多了, 像 thread priority 及 系統 loading 等, 你希望做到多少?

Paul, Chao @ Techware
点赞  2009-4-3 17:12
好东西,值得一试!
点赞  2009-4-3 17:19
標記
点赞  2009-4-3 17:21
引用: 引用 3 楼 xajhuang 的回复:
还有个方法是根据你WinCE时钟节拍来的,通常是ms


通常是多少MS?1000MS(1S)?100MS?10MS?1MS?
点赞  2009-4-3 17:22
驱动发个时间戳给ap,ap获取后取时间比较就知道了
点赞  2009-4-3 18:49
PB自带一个叫OSBench的工具,就是用来测试BSP的这些性能的,精度是us级的。有源代码的,原理也是用QueryPerformanceFrequency和QueryPerformanceCounter。
点赞  2009-4-7 20:45
这个时间间隔是不定的,受中断、线程优先级等等因素的影响。非要给个数值,平均情况下可能在100ms左右吧,因为线程的时间片是100ms。
点赞  2009-4-7 20:56
引用: 引用楼主 xqhrs232 的帖子:
WINCE系统里面,从驱动发消息给AP到AP接收到这个消息的时间间隔是多少?有没什么好的方法测量这个时间间隔?

我只知道驱动封装了一些API函数给应用调用,不清楚驱动还能主动发消息给应用,楼主给介绍一下?
点赞  2009-4-8 17:20
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复