为什么我的arduino有时钟?


9

当然,我知道控制延迟时间很有用,但还有其他用途吗?

使用16Mhz时钟,我的程序的每一行将花费1/16000000秒,对吗?

即使是非常大的线路也只需要1/16000000秒?

使用8MHz时钟时,每条线将花费两倍的时间,对吗?因此,整个“主循环”也将花费两倍的时间,对吗?


3
您在C指令和机器(汇编)指令之间感到困惑。但是,即使您直接用汇编语言编写,也可以很好地利用它,因为该程序不是线性的。我的意思是,顾名思义,中断通过转到另一条指令然后继续执行来中断正常的代码流。因此,可能在一行和下一行之间被迫执行ISR,这可能会很长
frarugi87 '16

2
如果将芯片的时钟频率设为8兆赫,那么即使最简单的代码行也将永远占用。我建议您使用赫兹范围(MHz)中的时钟。
埃德加·博内

执行每条机器指令所需的周期数在指令集手册说明
Edgar Bonet

该死的我应该去睡觉;),编辑谢谢
n0tis

Answers:


13

为什么我的arduino有时钟?

因为这就是计算机和微控制器等的工作方式。

使用16MHz时钟,我的程序的每一行将花费1/16000000秒,对吗?

没有。

即使是非常大的线路也只需要1/16000000秒?

没有。

时钟定义了从内存中取出并执行机器代码指令的速度。大多数指令需要1个时钟周期,但有些指令则需要更多。

可以将一行C代码编译为任意数量的汇编指令,然后将其转换为机器代码(原始数字)。根据生产线的不同,从1条汇编指令到成千上万条汇编指令的任何地方都可以。

使用8MHz时钟,每条线将花费两倍的时间,对吗?因此,整个“主循环”也将花费两倍的时间,对吗?

芯片中的每个操作都由时钟控制。如果时钟速度是芯片速度的一半,那么芯片运行的速度将是芯片速度的一半,因此,每次操作的时间将是芯片的两倍。


还有,中断。
njzk2 '02

1
次要nitpick:即使没有优化程序,也应为“ ... 0汇编指令中的任何位置...”,但优化后更是如此。
彼得

2
不要混淆这个可怜的男孩。他现在已经很辛苦了。
马延科

@Majenko:混乱是必须的。很难。
intelfx

@intelfx“ IT”?这是编程,而不是IT ....
BalinKingOfMoria恢复的CM

10

@Majenko的帖子中未回答:是的,使用8MHz时钟,每条线将花费两倍的时间。除非线路等待的不是时钟驱动的东西,例如外部输入。

除了@Majenko的答案之外,CPU还有一个时钟,可以确保在下一步开始之前完成指令。一个CPU是由许多晶体管组成的(我发现一个参考文献表明AtMega的价格在数百万美元以下,上下限为一个数量级)。

在一个周期中,电流流过芯片,导通/关断晶体管,其结果将导通/关断更多的晶体管,依此类推。发生这种情况时,芯片的某些部分具有“错误的”值-您可以认为这是计算的一半(您已经添加了一个列和一个10s列,并且即将在100s列)。您不希望这影响外部世界,因此(例如)您的输出引脚被锁存-保持为任意值-直到指令完成。完成一条指令需要多长时间,但制造商会在最坏的情况下制定最慢的指令。

对于AtMega(这是Arduino上的芯片),Atmel(设计了芯片的芯片)宣称这是1 / 20,000,000秒-这是20MHz。

请注意,并非所有微处理器每个周期都以1条指令运行所有指令-有些指令可能需要1或2或10个周期。流水线化使事情变得更加复杂-处理器可能会在一个周期内完成某些工作(例如,提取下一条指令),然后在下一个周期执行-但在执行指令1的同时,它也可以提取下一条指令。为此,可能需要猜测下一条指令是什么(在机器代码中等同于“ goto”的情况-用于循环),如果它猜错了,则必须应对那; 丢弃它检索的指令并检索下一条指令,从而丢失一个周期。

Wikipedia页面上的指令流水线显示了RISC芯片流水线的一个示例,分为5个阶段-指令获取,指令解码,执行,内存访问和回写。因此,在执行的某个阶段,您可以有5条指令,它们重叠。在“写回”阶段之前,指令没有实际作用。您可以将其视为一条组装线-将小部件放在一起需要7分钟,但可以分为5个阶段,最长的阶段需要2分钟。每两分钟一次,每个部分完成的小部件都将由装配线移动到下一个工位。您每两分钟就会得到一个小部件-“时钟”只能以最慢的步速滴答。如果您将小部件更快地推出,则“瓶颈”将使越来越多的小部件排队。


AVR的流水线很浅:仅获取并执行。然后,条件跳转需要一个周期(不跳转)或两个周期(不跳转)。
埃德加·博内

额外的复杂性:缓存未命中。
马丁·布拉斯·佩雷斯·皮尼利亚

我没有提到很多事情:缓存(任何类型),多线程,多核...我可能已经在我的帖子中深入了。
AMADANON Inc.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.