Arduino:轻量级压缩算法,用于将数据存储在EEPROM中

Rng*_*Tng 17 compression embedded algorithm atmega arduino

我想用ATmega168/ATmega328微控制器将大量数据存储到我的Arduino上,但不幸的是,只有256 KB/512 KB的EEPROM存储空间.

我的想法是利用压缩算法去除大小.但是,我对压缩算法的了解非常少,而且我对即用型库的搜索失败了.

那么,是否有一种优化存储大小的好方法?

Gre*_*ill 16

您可以查看LZO算法,该算法设计为轻量级.我不知道AVR系统是否有任何实现,但它可能是你自己可以实现的.

您可能对芯片上的EEPROM中可用的存储量有些误解; 根据数据表我有EEPROM尺寸是:

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

请注意,这些值以字节单位,而不是您在问题中提到的KB.无论如何,这不是"shitload".

  • +1'对于'这不是,无论如何,"shitload"' (5认同)
  • LZO在压缩过程中显然需要8或64 KB的内存,这可能是这些处理器的问题 (2认同)

Nic*_*k T 7

AVR最多只有几千字节的EEPROM,很少有超过64K的闪存(没有标准的Arduinos).

如果您需要存储并且很少修改,例如图像,您可以尝试使用Flash,因为有更多空间可供使用.对于简单的图像,一些粗略的RLE编码会有很长的路要走.

压缩任何更随机的东西,例如记录的数据,音频等,将为AVR带来巨大的开销,你将有更好的运气获得一个串行EEPROM芯片来保存这些数据.Arduino的网站上有一个与64K芯片接口的页面,听起来如此.如果您需要更多,请查看与带有SPI的SD卡接口,例如在此音频屏蔽中