找回密码
 立即注册
查看: 112|回复: 5

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

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-02 00:21:46

13

主题

43

回帖

136

积分

注册会员

积分
136
发表于 2025-4-3 16:45:11 | 显示全部楼层 |阅读模式
从TFT程序里面摘出来这一段,用途为TFT刷白屏,即写 128x128 像素, 屏是较特殊的 ILI9361 3-wire 9bit SPI 。这里用到RGB444模式,即每两个像素 3byte 27个bit, 总计 221184 bit ( 128x64x27 )因为刷白屏,为进一步提高速度,数据位置1后不管,只需要 221184 个时钟就可以了。(不解释,实测通过的)


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

  1. ---------------------------------------------------------------------------
  2. for (i = 0; i < 128; i++) {
  3.   for (j = 0; j < 64; j++) {
  4.     for (k = 0; k < 27; k++) {
  5.       TFT_SCK = 1;  
  6.       TFT_SCK = 0;
  7.     }        
  8.   }
  9. }
  10. ---------------------------------------------------------------------------
  11. for (i = 0; i < 221184; i++) {   
  12.   TFT_SCK = 1;  
  13.   TFT_SCK = 0;
  14. }
复制代码


视频:

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

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2025-4-4 01:13:51 | 显示全部楼层
如果想刨根问底,最简单的方法就是查看编译的汇编代码,会非常简单明了。
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:414
  • 最近打卡:2025-05-02 09:17:58

5

主题

296

回帖

2034

积分

金牌会员

积分
2034
发表于 2025-4-4 10:18:06 | 显示全部楼层
看下汇编文件
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:387
  • 最近打卡:2025-05-02 10:19:07
已绑定手机

8

主题

137

回帖

1049

积分

金牌会员

积分
1049
发表于 2025-4-4 13:42:18 | 显示全部楼层
从硬件上说,开PWM来驱动sck就能很快了。
从软件上,每次循环,多放几行代码,不要每次循环只操作一次,也能提高速度。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:382
  • 最近打卡:2025-05-02 08:26:22
已绑定手机

10

主题

147

回帖

464

积分

中级会员

积分
464
发表于 2025-4-4 16:27:53 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:454
  • 最近打卡:2025-05-01 08:52:14

3

主题

109

回帖

857

积分

高级会员

积分
857
发表于 2025-4-4 17:24:29 | 显示全部楼层
应该是单层循环因为变量的位数比较多!单次循环的代码多,又循环内的程序只有两行,所以效率低
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 13:04 , Processed in 0.322118 second(s), 88 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表