2

只需要在这里进行实际检查以确定我将使用多少 PROGMEM。在下面的代码片段中,我存储了一个 8x8 字节数组。我可以假设(粗略地说,也许有一些开销?)这将只占用 64 字节的 PROGMEM

(我意识到这有点像“谁埋在格兰特的坟墓里?”之类的问题,但我没有太多使用 PROGMEM,我不想假设我有 16k 字节的内存(ATMEGA 168 芯片)只是为了找到那个当我生成真实的项目数据时,它不适合。)

prog_uint8_t datastore[] PROGMEM  = {
 0 , 0 , 0 , 255 , 0 , 0 , 0 , 0 , 
 0 , 0 , 0 , 0 , 255 , 0 , 0 , 0 , 
 0 , 0 , 0 , 0 , 0 , 255 , 0 , 0 , 
 0 , 0 , 0 , 0 , 0 , 0 , 255 , 0 , 
 0 , 0 , 0 , 0 , 0 , 0 , 0 , 255 , 
 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 
 0 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 
 0 , 0 , 255 , 0 , 0 , 0 , 0 , 0
};
4

1 回答 1

1

想我会把我的评论作为答案..随时投反对票

  • 不,数据没有额外的开销PROGMEM。该PROGMEM标签所做的只是指示 gcc 将数据存储在闪存中,事实上,它与初始化 SRAM 数据相同。与自动从闪存加载到 SRAM 的 SRAM 数据相比,要使用PROGMEM数据,您必须使用可PROGMEM感知的函数,该函数在内部使用使用LPM(=加载程序存储器)指令从闪存而不是 SRAM 加载数据。它需要更长的时间(3 个周期而不是 SRAM 的 1 或 2 个周期)。

  • 我相信你意识到了这一点,但实际上你的数据并没有 16K 的闪存:如果你用数据填满闪存,程序本身就没有空间了 :)

于 2013-03-19T19:53:35.327 回答