嵌入式开发中的事件驱动编程与网络连接
1. 事件驱动编程
1.1 传统编程方式
嵌入式程序,特别是运行在性能较弱设备上的程序,常围绕一个持续执行的单循环来组织。例如下面的代码:
while (true) {
if (readButton())
lightOn();
else
lightOff();
}
这种编程风格适用于非常简单的嵌入式设备。但对于有许多不同输入和输出的大型系统,它的效果不佳。
1.2 事件驱动编程介绍
事件驱动程序等待事件发生,如按钮按下。当事件发生时,会调用回调函数来响应。JavaScript 适合用于事件驱动程序,因为网页浏览器就是这样工作的。以下是前面无限循环示例的事件驱动版本:
let button = new Button;
button.onRead = function(value) {
if (value)
lightOn();
else
lightOff();
}
通常,传递事件的回调函数仅在微控制器空闲时调用。当 JavaScript 代码执行时,回调会被推迟到代码完成。在前面的单循环示例中,由于循环是无限的,无法调用回调函数。因此,一般不能将单循环作为 JavaScript 应用程序的基础,必须采用事件驱动编程风格。