Có vấn đề hay xảy ra với tất cả các bạn lập trình arduino, đó là board bị reset, có nhiều lý do dẫn đến board của bạn reset, do watchdog, do nhấn nút reset hay do bị xuống nguồn điện chẳng hạn.
Bài viết này của mình hy vọng sẽ giúp bạn được phần nào.
Bạn có thể tham khảo bài viết sau: http://www.nongnu.org/avr-libc/user-manual/mem_sections.html#sec_dot_noinit
Mã nguồn chương trình mẫu:
int savedFlag __attribute__ ((section(".noinit")));
void setup() {
Serial.begin(9600);
Serial.print("Old: ");
Serial.println(savedFlag);
savedFlag = 1234;
Serial.print("New: ");
Serial.println(savedFlag);
}
void loop() {
}
ở đây ta có biến: savedFlag, và giá trị biến này được lưu trong Ram memory. Bình thường sau khi reset thì giá trị của savedFlag sẽ về mặc định. Nhưng với section noinit thì giá trị đó sẽ không thay đổi mà giữ nguyên sau khi reset. Tuy nhiên có nhiều lý do có thể xảy ra làm cho giá trị này không còn nguyên vẹn, nên ta có thể check sum để kiểm tra sự toàn vẹn.