计算PROGMEM使用的字节数

时间:2013-03-19 19:33:51

标签: arduino

这里只需要一个现实检查来确定我将使用多少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
};

1 个答案:

答案 0 :(得分:1)

想想我会把我的评论作为答案..随意向下投票

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

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