افزایش طول عمر خانه های حافظه eeprom

باسلام خدمت شما
در آموزش های الکترونیک، مشکل eeprom در محدودیت تعداد write در حافظه مطرح شد و روشی که برای افزایش طول عمر آن ذکر شد، این بود که هر بار که میخواستیم بنویسیم روی eeprom ، یک خونه به جلو بریم.
میخواستم بدونم چطور میشه در عمل این روش رو اجرا کرد؟ و در برنامه نویسی چه ملاحظاتی باید در نظر گرفت.
باتشکر

سلام دوست عزیز، برای اینکار بهترین روش استفاده از کتابخانه های موجود هست.
به این روش میگن eeprom wear leveling که اگر همین عبارت رو سرچ کنید، میتونید بسته به میکرویی که استفاده میکنید، روش های موجود رو بخونید و استفاده کنید.
به طور کلی معمولا میان یک مفهومی به اسم page رو تعریف میکنن و حافظه رو به page های مختلف تقسیم میکنن. شبیه یک صفحه از یک دفتر. بعد هر متغیری که میخواید داخل اون صفحه تعریف میکنید و زیر هم مینویسید.
مثلا میشه:
a = 1
b = 2
c = 3
(دقت کنید که زیر هم نوشتن متغیرها و استفاده از علامت = و … برای درک راحت مفهوم هست و درواقع شما دارید بایت به بایت در حافظه به جلو حرکت میکنید)
حالا فرض کنید که متغیر a مقدارش عوض میشه و میشه 5. پس صفحه ما اینشکلی میشه:
a = 1
b = 2
c = 3
a = 5
همونطور که میبینید، مقدار a رو در بالای صفحه تغییر نمیدیم، بلکه زیر بقیه، دوباره اضافه میکنیمش. اینطوری اون خونه حافظه مجدد استفاده نمیشه.
وقتی که به پایین صفحه رسیدیم، یک کد میاد کل صفحه رو میخونه و خلاصه اون رو به صفحه بعد منتقل میکنه. در مثالی که ما زدیم، خط اول دیگه اهمیتی نداره چون عوض شده. پس نتیجه میشه این:
a = 5
b = 2
c = 3
و همین روند ادامه پیدا میکنه تا به صفحه آخر برسیم. وقتی به ته صفحه آخر رسیدیم، دوباره میایم صفحه اول. اینطوری از همه خونه های حافظه استفاده شده و عمر حافظه خیلی بیشتر میشه.
هر متغیری رو هم که خواستید ببینید الان مقدارش چنده، از آخر صفحه ای که الان توش هستید شروع میکنید و میاید بالا. چون جدیدترین مقدارش، پایین تر هست.

1 پسندیده

با سلام. بنده می خوام با at24c که به اردوینو متصل است یه سری اطلاعات را ذخیره کنم وبعد از خاموش شدن اردوینو و مثلا چند روز بعد از انها استفاده کنم.
یه مشکلی که دارم اینه که وقتی اردوینو خاموش شد و من دوباره اونو روشن کردم شماره ی آدرس آخرین مقداری که save شده را چه طور می تونم پیدا کنم چون باید شماره ی ادرس رو داشته باشم تا بتونم مقادیر جدید رو با توجه به اون ادرس بخونم.