Cá nhân, tôi thích định dạng "bảng được gắn thẻ".
Ở định dạng này, dữ liệu của bạn được chia thành một loạt "bảng". Mỗi bảng có một tiêu đề theo định dạng có thể dự đoán được và một cơ thể có thể thay đổi khi bạn cần nó.
Dưới đây là một ví dụ về những gì một trong các bảng sẽ trông như thế:
Byte 0: Table Length (in 16-bit words)
Byte 1: Table ID (used by firmware to determine what this data is)
Byte 2: Format Version (incremented every time the format of this table changes)
Byte 3: Checksum (simple sum-to-zero checksum)
Byte 4: Start of body
...
Byte N: End of body
Tôi đã không lưu trữ rất nhiều dữ liệu, vì vậy tôi sử dụng một byte duy nhất cho từng lĩnh vực trong tiêu đề. Bạn có thể sử dụng bất kỳ kích thước nào bạn cần, miễn là bạn không bao giờ thay đổi nó. Các bảng dữ liệu được viết một cái khác vào EEPROM.
Khi chương trình cơ sở của bạn cần đọc dữ liệu từ EEPROM, chương trình bắt đầu đọc ở bảng đầu tiên. Nếu phần mềm nhận ra ID bảng và hỗ trợ phiên bản bảng được liệt kê, nó sẽ tải dữ liệu ra khỏi phần thân của bảng (sau khi xác thực kiểm tra, tất nhiên). Nếu ID, phiên bản hoặc tổng kiểm tra không kiểm tra, bảng sẽ bị bỏ qua. Trường độ dài được sử dụng để định vị bảng tiếp theo trong chuỗi. Khi chương trình cơ sở nhìn thấy một bảng có độ dài bằng 0, nó biết rằng nó đã đến cuối dữ liệu và không có nhiều bảng để xử lý.
Tôi thấy định dạng này linh hoạt (tôi có thể thêm bất kỳ loại dữ liệu nào vào phần thân của bảng) và mạnh mẽ (giữ nguyên định dạng tiêu đề và bảng dữ liệu sẽ tương thích về phía trước và ngược).
Có một vài cảnh báo, mặc dù chúng không quá nặng nề. Trước tiên, bạn cần đảm bảo rằng chương trình cơ sở của bạn có thể xử lý trường hợp dữ liệu quan trọng không có trong bảng hoặc đang sử dụng phiên bản định dạng không được hỗ trợ. Bạn cũng sẽ cần phải khởi tạo byte đầu tiên của vùng lưu trữ EEPROM bằng không (vì vậy mà trên lần khởi động đầu tiên, bạn không bắt đầu tải trong thùng rác nghĩ rằng đó là dữ liệu của nó). Vì mỗi bảng biết chiều dài của nó, có thể mở rộng hoặc thu nhỏ một bảng; Tuy nhiên, bạn phải di chuyển phần còn lại của vùng lưu trữ bảng xung quanh để đảm bảo rằng không có "lỗ hổng" (nếu toàn bộ chuỗi bảng không thể vừa với bộ nhớ của thiết bị thì quá trình này có thể gây khó chịu). Cá nhân, tôi không tìm thấy bất kỳ vấn đề nào trong số này là vấn đề lớn, và nó cũng đáng để tôi lưu lại bằng cách sử dụng một số phương pháp lưu trữ dữ liệu khác.
Điều này nghe có vẻ giống như một giải pháp tuyệt vời để đối phó với những thay đổi về kích thước bảng giữa các phiên bản phần mềm. Bạn có lời khuyên nào để làm cho nó khoan dung với việc mất năng lượng giữa ghi bên cạnh việc sao chép dữ liệu? –
Viết toàn bộ bảng bằng tổng kiểm tra không hợp lệ, sau đó (trong một giao dịch riêng) quay lại và viết tổng kiểm tra chính xác. Nếu có vấn đề giữa ghi, kiểm tra của bạn sẽ sai khi bạn đọc dữ liệu. – bta
Đó là một giải pháp thanh lịch không đáng kể để thực hiện: cảm ơn bạn đã theo dõi. –