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.