我一直在学习编程语言,有一个问题一直困扰着我。
例如,假设我编写了一些程序,使我每5秒按下一次按钮。
计算机如何理解等待部分(允许按下按钮-等待5秒钟并再次允许)?
我已经知道,第一种高级编程语言已被编译成机器代码,以便计算机可以运行它。但是如果以汇编器为例,它非常接近机器代码,只是人类可读的,就没有等待指令。
我在等待中给出的示例只是一个示例,还有很多我不理解计算机如何理解的事情;)
答案 0 :(得分:5)
Cpu内部有一个石英计时器晶体,称为cpu时钟。当电流通过时,它将给出该电流的预设频率,然后Cpu可以使用该频率来跟踪时间。
因此计算机可以理解“做某事,等待5秒钟,然后再次继续”
有关石英计时器的更多信息:https://en.m.wikipedia.org/wiki/Crystal_oscillator
答案 1 :(得分:2)
要在具有固定时钟频率的已知简单CPU(如微控制器)上短暂延迟,并且不执行多任务处理,并且每个时钟周期设计只需一条指令,可以在asm中使用“延迟循环”等待。这是用于实现的arduino源(用于AVR微控制器):
https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c#L120
如您所见,其行为取决于CPU的时钟频率。但是,您通常不会循环5秒钟(这是耗费大量时间的时间)。计算机通常具有可以对计时器和时钟芯片进行编程的功能,这些计时器和时钟芯片可以进行编程以在特定时间引发中断,因此,如果没有其他事情要做,您可以使CPU进入睡眠状态,并在下一个中断时将其唤醒。延迟循环(在微控制器上)适用于非常短的延迟,太短而无法入睡甚至无法为定时器编程。
您可能需要一个小的微控制器板(不一定是arduino)来玩。在那里,您可以减少来自操作系统或库的“膨胀”,并且距离硬件更近。