Arduino:轻量级压缩算法,用于将数据存储在EEPROM中
-
05-07-2019 - |
解决方案
您可以查看 LZO 算法,该算法设计为轻量级。我不知道AVR系统是否有任何实现,但它可能是你自己可以实现的。
您可能会对芯片上的EEPROM可用存储量有些误解;根据数据表,我有EEPROM尺寸:
ATmega48P:256
ATmega88P:512
ATmega168P:512
ATmega256P:1024
请注意,这些值是 bytes ,而不是您在问题中提到的KB。无论如何,这不是“shitload”。
其他提示
像 LZSS 这样的算法可能是一个不错的选择对于嵌入式平台。它们是简单的算法,不需要太多内存。
LZS 是我熟悉的。它使用2 kB字典进行压缩和解压缩(字典是最近的2 kB未压缩数据流)。 ( LZS获得HiFn专利,但据我所知,所有专利都已过期。)
但是我看到最近在Arduinos上使用的 ATmega328 ,只有512字节到2 kB SRAM,所以甚至可能LZS太大了。我相信你可以使用一个较小字典的变体,但我不确定你会达到什么压缩比。
外部EEPROM(例如通过I2C)不是一个选项吗?即使您使用压缩算法,不利的一面是您可能无法以简单的方式确定可能存储在内部EEPROM中的数据大小。 而且,如果你真的是指KBYTES,那么考虑将一个SDCard连接到SPI ......网中有一些轻量级的开源FAT兼容文件系统。
不隶属于 StackOverflow