Sketch 程式崩溃的提示

为了加强系统安全性,86Duino 由 Coding 210 开始加入侦测 sketch 程式执行时崩溃的机制。如果使用者在 sketch 程式中做出不合法或错误的操作,引起系统死当或崩溃时,86Duino 底层韧体将会拦截出错的 sketch 程式并防止其继续执行下去。

几种造成系统崩溃的错误程式写法

下面列出几种会造成系统崩溃而被 86Duino 拦截的 sketch 程式写法:

1. 在程式中用 NULL 指标对记忆体进行存取

例如:

void setup() {
  int* ptr = NULL;
  Serial.begin(9600);
  Serial.println(*ptr);  // 错误:ptr 为 NULL 指标
}

void loop() {}

2. 除 0 运算

例如:

void setup() {
  int a = 10, b = 0;
  Serial.begin(9600);
  Serial.println(a/b);  // 错误:分母 b 为 0
}

void loop() {}

3. 存取不在阵列范围内的元素内容

例如:

void setup() {
  long a[10] = {0};
  long b = a[100000];  // 错误:超出 a 阵列的范围
  Serial.begin(9600);
  Serial.println(b);
}

void loop() {}

86Duino 对 sketch 程式崩溃的提示

当 86Duino 底层韧体拦截到出错的 sketch 程式后,会以特定模式闪烁板上的 LED 灯提示使用者上传的 sketch 程式已经出错并引起系统崩溃。

如果您使用 86Duino Zero 或 86Duino One,将可以看到标示为 L 的 LED 灯以快闪 16 下、慢闪 3 下的模式重覆闪烁,如下影片所示:

如果您使用 86Duino One 并连接有 VGA 卡,则还可以在 VGA 萤幕上看到如下图红框的讯息:

error_message

如果您使用的是 86Duino Educake,则可以改从电源指示灯上看到重覆快闪 16 下、慢闪 3 下的模式,如下影片所示:

如果您觉得 Educake 的电源指示灯闪烁较不明显,可以在 EduCake 第 13 脚位上连接一颗 LED 灯(LED 灯正极接第 13 脚位,负极接地),您将可以在此 LED 灯上看到相同的快闪 16 下、慢闪 3 下的模式,如下影片所示:

当出错的 sketch 程式被 86Duino 底层韧体拦截时,86Duino 的烧录程式功能仍处于可正常运作的状态,因此您可使用 86Duino Coding IDE 重新上传修正后的 sketch 程式。

注意事项

虽然 86Duino 底层韧体能拦截大部份出错的 sketch 程式,但仍可能有漏网之鱼。少数无法被拦截的错误程式可能破坏 86Duino 的烧录程式功能,导致 86Duino Coding IDE 无法正常上传 sketch 程式,此时,您应该透过强制进入 bootloader 的方法或以 SysImage 还原韧体系统的方法,尝试重新上传修正后的 sketch 程式。


新手上路主页面

The text of the 86Duino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.