野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21300|回复: 10

关于用for语句写10s钟粗略计时的疑惑

[复制链接]
发表于 2020-9-3 11:05:38 | 显示全部楼层 |阅读模式
10火花
如题,我想要写一个粗略的10s的计时,8s到12s之间都可以,想要用for语句来写,C语言知识比较薄弱,举例如下:
  1. for(i=1;i<500;i++)
  2. for(m=1;m<500;m++)
  3.    for(j=1;j<500;j++)
  4.    ………………………………………………
  5.      for(n=1;n<500;n++)
复制代码
类似于这样无限套娃下去,是否就可以得到想要的任何计时了(但从理论而言,实际项目可能很少人这么做)
问题:这样的计时时间取决于没执行一步单片机的机器周期,大概是这个意思吧,但是STM32的时钟相对比较复杂,包括内部,外部,高速,低速,还是有倍频,这些时钟的选取对于用for写的计时应该是有影响的吧,如果我想要按照上面的思路写10s的计时,时钟以及上面的参数应该如何选取呢????

回复

使用道具 举报

发表于 2020-9-3 17:09:14 | 显示全部楼层
用定时器啊,比你这么写简单多了
回复

使用道具 举报

 楼主| 发表于 2020-9-3 17:36:38 | 显示全部楼层
H781997429 发表于 2020-9-3 17:09
用定时器啊,比你这么写简单多了

定时器的时间比较精确,但是要配置时钟,自动重装载值,预分频系数、计数模式、配置中断、设置优先级等等,个人觉得并不算简单。
回复

使用道具 举报

发表于 2020-9-3 18:54:26 | 显示全部楼层
cubemx这类工具适合你
回复

使用道具 举报

发表于 2020-9-4 09:05:39 | 显示全部楼层
长延时最好不要用for套娃,因为除非被中断打断,否则在延时结束之前stm32无法执行其他任何动作,而被中断打断之后延时本身就不准了。
回复

使用道具 举报

 楼主| 发表于 2020-9-4 09:15:42 | 显示全部楼层
瞎眼灯 发表于 2020-9-4 09:05
长延时最好不要用for套娃,因为除非被中断打断,否则在延时结束之前stm32无法执行其他任何动作,而被中断打 ...

是的,从实际项目角度来看,从准确性和可靠性来说。for做的计时/延时都没有基于滴答计时器的delay和定时器准确。但我想问的是,假如我要配10s的计时,用for来写,具体应该怎么配置数值,是否和硬件(配置)有关,这种讨论更偏理论而不是实际一些。就好像我们现在都用项目中用c,而不是汇编,但是汇编却是唯一的机器语言,有助于我们理解计算机的底层运作一样。
回复

使用道具 举报

发表于 2020-9-4 09:20:01 | 显示全部楼层
将心明月 发表于 2020-9-3 17:36
定时器的时间比较精确,但是要配置时钟,自动重装载值,预分频系数、计数模式、配置中断、设置优先级等等 ...

建议你看一下定时器相关知识,用cubemx32直接配置
回复

使用道具 举报

发表于 2020-9-4 09:22:30 | 显示全部楼层
没必要纠结这个,这样死等循环本身就是大忌,而且每个晶振都有误差的,指令周期做不到全部一样。如果真想粗略得到多长时间用个IO口延时翻转,示波器测翻转时间,慢慢调。
回复

使用道具 举报

 楼主| 发表于 2020-9-4 09:25:20 | 显示全部楼层
还有梦与你 发表于 2020-9-4 09:22
没必要纠结这个,这样死等循环本身就是大忌,而且每个晶振都有误差的,指令周期做不到全部一样。如果真想粗 ...

恩,确实有点儿太钻牛角尖了,对于定时/延时/计数这样的问题还是应该用成熟的方案。
回复

使用道具 举报

 楼主| 发表于 2020-9-4 09:26:24 | 显示全部楼层
H781997429 发表于 2020-9-4 09:20
建议你看一下定时器相关知识,用cubemx32直接配置

好的,CUBEMX还没用过,看来是时候与时俱进一下了
回复

使用道具 举报

发表于 2020-9-5 14:54:57 | 显示全部楼层
将心明月 发表于 2020-9-4 09:15
是的,从实际项目角度来看,从准确性和可靠性来说。for做的计时/延时都没有基于滴答计时器的delay和定时 ...

for循环的延时,跟硬件是强相关的,无法脱离具体硬件来讨论,而且不同的编译器和优化等级等等软件层面的东西也会影响延时效果,所以无法一概而论,只能具体情况具体分析。我觉得8楼说得很对。
回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 10:08 , Processed in 0.039306 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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