[请教]如何测量程序运行时间?

现在的做法是在需要测量的部分前后使用函数 clock_gettime() 得到各自的时间,然后相减得到运行时间。就是照搬了QNX的例子。
具体如下:

    struct timespec start, stop;
    double accum;

    if( clock_gettime( CLOCK_REALTIME, &start) == -1 ) {
      perror( "clock gettime" );
      return EXIT_FAILURE;
    }

    ......

    if( clock_gettime( CLOCK_REALTIME, &stop) == -1 ) {
      perror( "clock gettime" );
      return EXIT_FAILURE;
    }

    accum = ( stop.tv_sec - start.tv_sec )
             + (double)( stop.tv_nsec - start.tv_nsec )
               / (double)1000000000L;
    printf( "%lf\n", accum );
    return EXIT_SUCCESS;

不知道结果是否准确?(其实只要能精确到 us 就可以了,虽然貌似可以精确到 ns 的样子。。。)

我做了简但的测试,使用函数 memcpy() ,从内存中的一个buffer把 100k 的数据复制到另一个buffer,多次运行得到2种结果, 0.000000 和 0.001000。
为什么会有差距这么大的2种结果呢?

可以用ClockCycles()取得开始、结束的Cycle值,然后求其差。再对照_syspage_qtime里的cycles_per_secode来求取时间。

要当心的是,你的程序最好有足够高的优先级,要不然,会被别的高优先级线程抢占。即使这样,还会有中断。

谢谢答复,我尝试一下。

另:在系统中运行用户程序,例如前面说的在2个buffer间复制数据的程序,默认的优先级是 10 吧?(我用 pidin 命令查看的是这个数字。)那么,这个用户程序的时间片大概是多少呢?

对。标准的启动,shell在10,从那里启动的程序都是10。可以用"on -p myprog" 来启动到新的优先级。

第统的时钟默认是1ms,进程的时间片是4 x system tick,也就是说默认4ms。在4ms时重新调度,如果你的进程还是最高优先级,那么接下来还是你的进程得到CPU

也可以用示波器结合GPIO测,那样更准一些。