سؤال

وأريد أن تخزين كمية كبيرة من البيانات على بلدي اردوينو مع ATmega168 / ATmega328 متحكم، ولكن للأسف هناك فقط 256 KB / 512 KB تخزين EEPROM.

وفكرتي هي لجعل استخدام خوارزمية ضغط لخلع الحجم. ولكن أيضا، علمي على خوارزميات ضغط منخفض جدا وفشل بحثي للمكتبات جاهزة للاستخدام.

وهكذا، ليس هناك وسيلة جيدة لتحسين حجم التخزين؟

هل كانت مفيدة؟

المحلول

قد يكون لديك نظرة على LZO الخوارزمية، والتي صممت لتكون خفيفة الوزن. أنا لا أعرف ما إذا كان هناك أي تطبيقات لنظام AVR، ولكن قد يكون شيء يمكن تنفيذ نفسك.

وقد تكون معلومات خاطئة إلى حد ما عن مساحة التخزين المتاحة في EEPROM على رقاقة الخاصة بك على الرغم؛ وفقا لورقة البيانات لدي أحجام EEPROM هي:

وATmega48P: 256
ATmega88P: 512
ATmega168P: 512
ATmega256P: 1024

لاحظ أن هذه القيم هي في بايت ، وليس KB كما ذكرتم في السؤال. هذه ليست، بأي مقياس، و "shitload".

نصائح أخرى

وAVRs يكون سوى بضع كيلو بايت من EEPROM على الأكثر، وعدد قليل جدا من كثير أكثر من 64K فلاش (لا Arduinos القياسية القيام به).

إذا كنت تحتاج لتخزين شيء ونادرا تعديل، على سبيل المثال صورة، هل يمكن أن حاول استخدام الفلاش كما أن هناك مساحة أكبر بكثير هناك للعمل مع. للصور بسيطة، فإن بعض ترميز RLE الخام تقطع شوطا طويلا.

وضغط أي شيء أكثر عشوائية، على سبيل المثال تسجيل البيانات والصوت وغيرها، وسوف تأخذ قدرا هائلا من النفقات العامة للAVR، سيكون لديك أفضل حظا في الحصول على رقاقة EEPROM المسلسل لعقد هذه البيانات. الموقع اردوينو لديه صفحة على <لأ href = "http://74.125.93.132/search؟q=cache:GAMAkiHt_Q4J:www.arduino.cc/en/Tutorial/SPIEEPROM+arduino+eeprom+serial&cd=1&hl=en&ct=clnk&gl = لنا والعميل = فايرفوكس واحد "يختلط =" noreferrer "> التواصل مع 64K رقاقة ، الذي يبدو. إذا كنت تريد أكثر من ذلك، أن ننظر في التواصل مع بطاقة SD مع SPI، على سبيل المثال في هذا درع الصوت

دراسة NASA هنا (حاشية)

A ربوست لعام 1989 المادة على LZW هنا

ويبقيه بسيط و<م> أداء تحليل التكلفة / دفع تعويضات إضافة الضغط. وهذا يشمل الوقت والجهد والتعقيد، واستخدام الموارد، الانضغاطية البيانات، الخ.

وخوارزمية شيء من هذا القبيل LZSS ربما يكون خيارا جيدا لمنبر المضمنة. فهي خوارزميات بسيطة، ولا تحتاج إلى الكثير من الذاكرة.

LZS عبارة واحدة أنا على دراية. ويستخدم القاموس 2 كيلو بايت للضغط وإزالة الضغط (القاموس هو الأخير 2 كيلو بايت من دفق البيانات غير مضغوط). ( LZS كان على براءة اختراع من قبل HiFn ، ولكن بقدر ما استطيع ان اقول، لقد انتهت جميع براءات الاختراع).

ولكن أرى أن ATmega328 ، وتستخدم في Arduinos الأخيرة ، ليس لديها سوى 512 بايت إلى 2 كيلو بايت SRAM، لذلك ربما LZS كبير جدا لذلك. أنا متأكد من أنك يمكن أن تستخدم البديل مع القاموس أصغر، ولكن لست متأكدا ما نسب ضغط كنت تحقيقه.

والطريقة الموضحة في ورقة "ضغط البيانات الخوارزميات لأجهزة الطاقة مقيدة في شبكات متسامح تأخير" قد تعمل على <لأ href = "http://www.atmel.com/devices/atmega328.aspx" يختلط = "noreferrer نوفولو"> ATmega328 .

والمرجعي: C. سادلر و M. Martonosi "ضغط الخوارزميات بيانات عن الطاقة مقيدة الأجهزة في شبكات متسامح تأخير،" وقائع مؤتمر ACM على الشبكية جزءا لا يتجزأ من نظم الاستشعار (SENSYS) 2006، تشرين الثاني 2006. قوات الدفاع الشعبي. المصدر S-LZW لMSPGCC: slzw.tar.gz. تحديث 10 مارس 2007.

وقد ترغب أيضا أن نلقي نظرة على الموقع LZJB ، كونها قصيرة جدا وبسيطة وخفيفة الوزن.

وأيضا، FastLZ قد يكون من المفيد إلقاء نظرة. فإنه يحصل على نسب ضغط أفضل من LZJB ولها متطلبات الحد الأدنى من الذاكرة جدا لإزالة الضغط:

هل لEEPROM خارجي (على سبيل المثال عن طريق I2C) ليس خيارا؟ حتى إذا كنت تستخدم خوارزمية ضغط الجانب السلبي هو أن حجم البيانات التي قد تخزن في EEPROM داخلي قد لا يتم تحديدها بطريقة بسيطة أي أكثر من ذلك .. وكورس، إذا كنت تقصد حقا كيلوبايت، ثم النظر في SDCARD متصلا SPI ... وهناك بعض الضوء ترجيح أنظمة الملفات FAT-متوافق مفتوحة المصدر في المرمى.

scroll top