6 测试运行速度(harib12f)

我们的程序运行得很快,可是到底有多快呢?我们得想个办法测一下。可能有人会说,别搞这种节外生枝的玩意儿了,赶快继续往下讲吧!嗯,要说也是,这的确是有点不务正业了,不过该玩的时候也要玩一玩嘛!

我们向task_b_main添加了一些代码。

本次的bootpack.c节选

  1. void task_b_main(struct SHEET *sht_back)
  2. {
  3. struct FIFO32 fifo;
  4. struct TIMER *timer_ts, *timer_put, *timer_1s;
  5. int i, fifobuf[128], count = 0, count0 = 0;
  6. char s[12];
  7. (中略)
  8. timer_1s = timer_alloc();
  9. timer_init(timer_1s, &fifo, 100);
  10. timer_settime(timer_1s, 100);
  11. for (;;) {
  12. count++;
  13. io_cli();
  14. if (fifo32_status(&fifo) == 0) {
  15. io_sti();
  16. } else {
  17. i = fifo32_get(&fifo);
  18. io_sti();
  19. if (i == 1) {
  20. (中略)
  21. } else if (i == 2) {
  22. (中略)
  23. } else if (i == 100) {
  24. sprintf(s, "%11d", count - count0);
  25. putfonts8_asc_sht(sht_back, 0, 128, COL8_FFFFFF, COL8_008484, s, 11);
  26. count0 = count;
  27. timer_settime(timer_1s, 100);
  28. }
  29. }
  30. }
  31. }

■■■■■

我们来运行一下,先得看看它是不是能正常工作,“make run”。不错,在模拟器环境下运行成功。

6 测试运行速度(harib12f) - 图1

上面的数字显示的是速度哦

■■■■■

现在我们到真机环境运行一下。哇,好快!果然真机环境就是快,速度已经达到大约46382001了。

1 最后两位数字的值经常变动,因此用00代替。

我们把这个速度和harib10i做个对比。harib10i在7秒内计数到0099969264,即速度为每秒14281323,相比之下性能是现在的3倍。咦,怎么会这样?如果是2倍的话还可以理解,3倍就有点过分了。

看到这个结果心里当然会很不爽,我们来找找原因。嗯,每隔0.01秒刷新显示是不是不太好呢?如果显示计数是导致速度慢的原因,那干脆就别显示了吧。我们把开头的timer_settime (timer_put, 1);一句删掉,这样一来由于计时器没有被设定,就不会引起超时中断,也就不会触发显示了。

6 测试运行速度(harib12f) - 图2

现在仅显示速度值了

那么在真机环境下运行情况如何呢?哇,速度真的快了不少,现在的成绩是6774100,和14281323相比,性能差距为2.1倍,这样已经很令人满意了。大概JMP的地址也会影响计数的速度,另外,如果把速度显示改成每隔5秒刷新一次,任务切换间隔再改成0.03秒的话,估计性能差距可以更加接近理想的2.0倍,不过现在这个阶段我们就不去一一尝试了。