2009-11-18 19 views
5

Tôi đang cố gắng phát triển cấu trúc lịch sử báo động được lưu trữ trong bộ nhớ flash không bay hơi. Bộ nhớ flash có số lần ghi hạn chế vì vậy tôi cần một cách để thêm bản ghi vào cấu trúc mà không cần viết lại tất cả các trang flash trong cấu trúc mỗi lần hoặc viết các con trỏ được cập nhật lên đầu/đuôi của hàng đợi.Chồng hoặc lịch sử báo thức?

Ngoài ra khi không gian bộ nhớ flash có sẵn đã được sử dụng, tôi muốn bắt đầu ghi đè lên các bản ghi được lưu trữ trước đó trong flash bắt đầu với bản ghi đầu tiên được thêm vào trước tiên. Điều này làm cho tôi nghĩ rằng một bộ đệm tròn sẽ làm việc tốt nhất cho việc thêm các mục. Tuy nhiên khi xem hồ sơ tôi muốn cấu trúc hoạt động như một chồng. Ví dụ. Các bản ghi sẽ được hiển thị theo thứ tự thời gian đảo ngược cuối cùng trong lần đầu tiên.

Không thể lưu trữ kích thước, đầu, đuôi, chỉ mục cấu trúc trừ khi chúng được lưu trữ trong bản ghi vì chúng được ghi mỗi lần đến một vị trí cố định nó sẽ vượt quá chu kỳ ghi tối đa trên trang mà chúng được lưu trữ .

Vì vậy, tôi nên sử dụng ngăn xếp, hàng đợi hoặc một số cấu trúc kết hợp? Làm cách nào để lưu trữ thông tin đầu, đuôi, kích thước trong flash để có thể khởi động lại sau khi bật nguồn?

+0

Bạn đang làm việc trực tiếp trên flash hoặc bạn đang sử dụng hệ thống tệp trên flash? – stefaanv

+0

Không có hệ thống tệp. Viết trực tiếp vào flash. – mjh2007

Trả lời

4

Lookup ring-buffer

Giả sử bạn có thể làm việc ra đó là mục cuối cùng (từ một thời gian vv tem do đó, không cần phải viết một marker) này cũng có hiệu suất mặc san lấp mặt bằng tốt nhất.

2

Chỉnh sửa: Không áp dụng cho bộ điều khiển flash của OP: Bạn không cần phải lo lắng về mã số wear leveling trong mã của mình. Bộ điều khiển bộ nhớ flash sẽ xử lý điều này đằng sau hậu trường.

Tuy nhiên, nếu bạn vẫn muốn tiếp tục thực hiện việc này, chỉ cần sử dụng bộ đệm tròn thông thường và keep pointers to the head and tail của ngăn xếp.

Bạn cũng có thể xem xét sử dụng Least Recently Used cache để quản lý vị trí trên flash để lưu trữ dữ liệu.

+0

Nó không phải là chính xác mặc san lấp mặt bằng. Anh ấy cần phải tập trung vào viết càng ít càng tốt. –

+0

Tôi khá chắc chắn rằng bộ điều khiển bộ nhớ flash không cung cấp mức độ hao mòn. Tôi đang sử dụng AT45DB642D. – mjh2007

+0

@ mjh2007: Bạn nói đúng, bộ điều khiển đó dường như không có bất kỳ quản lý đặc biệt nào trong hướng dẫn đặc điểm kỹ thuật của nó. –

0

Bạn chắc chắn muốn có bộ đệm vòng. Nhưng bạn nói đúng, thông tin meta là một chút ... thú vị.

0

Ánh xạ các mục nhập của bạn trên một số phần. Khi các phần đã đầy, ghi đè bắt đầu bằng phần đầu tiên. Thêm số thứ tự (số thứ tự nbr> 2 * mục), do đó, khi khởi động lại, bạn biết mục nhập đầu tiên là gì.

0

Bạn có thể làm phiên bản của bộ đệm vòng, trong đó phần tử đầu tiên được lưu trữ trong trang là số lần trang đó được viết. Điều này cho phép bạn xác định nơi bạn nên viết tiếp theo bằng cách tìm trang đầu tiên có số thấp hơn trang trước. Nếu tất cả đều giống nhau, bạn bắt đầu từ đầu với số tiếp theo.

Các vấn đề liên quan