江哥 发表于 2025-4-3 16:45:11

单层 for 循环 vs 三层 for 循环 哪个快?

从TFT程序里面摘出来这一段,用途为TFT刷白屏,即写 128x128 像素, 屏是较特殊的 ILI9361 3-wire 9bit SPI 。这里用到RGB444模式,即每两个像素 3byte 27个bit, 总计 221184 bit ( 128x64x27 )因为刷白屏,为进一步提高速度,数据位置1后不管,只需要 221184 个时钟就可以了。(不解释,实测通过的)


第一段用了 三个 for,用时 35ms; 第二段用了 单个 for,用时 450ms

---------------------------------------------------------------------------
for (i = 0; i < 128; i++) {
for (j = 0; j < 64; j++) {
    for (k = 0; k < 27; k++) {
      TFT_SCK = 1;
      TFT_SCK = 0;
    }      
}
}
---------------------------------------------------------------------------
for (i = 0; i < 221184; i++) {   
TFT_SCK = 1;
TFT_SCK = 0;
}

视频:https://www.bilibili.com/video/BV1jcZUYSEBq

【上面其实隐藏了关键因素, 循环变量的数据类型: 前者可以用 unsigned char , 后者用 long, 在 8位环境自然是有很大差异了。实测 PC 上几乎没什么区别。有意思的是,在 Arduino 里做类似测试,并没有明显差别】

晓飛飛 发表于 2025-4-4 01:13:51

如果想刨根问底,最简单的方法就是查看编译的汇编代码,会非常简单明了。

宁阳刘德华 发表于 2025-4-4 10:18:06

看下汇编文件

cnos 发表于 2025-4-4 13:42:18

从硬件上说,开PWM来驱动sck就能很快了。
从软件上,每次循环,多放几行代码,不要每次循环只操作一次,也能提高速度。

zhaoye818 发表于 2025-4-4 16:27:53

{:qiang:}

fjstcmcu 发表于 2025-4-4 17:24:29

应该是单层循环因为变量的位数比较多!单次循环的代码多,又循环内的程序只有两行,所以效率低
页: [1]
查看完整版本: 单层 for 循环 vs 三层 for 循环 哪个快?