Arduino 计算PROGMEM使用的字节数
只是需要一个现实的检查在这里确定多少PROGMEM我将使用。在下面的代码段中,我存储了一个8x8字节数组。我是否可以假设(大概,可能有一些开销?)这将只占用64字节的PROGMEM (我意识到这有点像是“谁被埋葬在格兰特的坟墓里?”之类的问题,但我没有太多地使用PROGMEM,我不想假设我有16k字节的内存(ATMEGA 168芯片),结果发现当我生成真实的项目数据时,它不适合。)Arduino 计算PROGMEM使用的字节数,arduino,Arduino,只是需要一个现实的检查在这里确定多少PROGMEM我将使用。在下面的代码段中,我存储了一个8x8字节数组。我是否可以假设(大概,可能有一些开销?)这将只占用64字节的PROGMEM (我意识到这有点像是“谁被埋葬在格兰特的坟墓里?”之类的问题,但我没有太多地使用PROGMEM,我不想假设我有16k字节的内存(ATMEGA 168芯片),结果发现当我生成真实的项目数据时,它不适合。) 我想我会把我的评论作为答案。。请随意否决 否,PROGMEM数据没有额外的开销。PROGMEM标记所做的只是指示
我想我会把我的评论作为答案。。请随意否决
- 否,
数据没有额外的开销。PROGMEM
标记所做的只是指示gcc将数据存储在闪存中,事实上,这与初始化SRAM数据的操作相同。与自动从闪存加载到SRAM的SRAM数据不同,要使用PROGMEM
数据,您必须使用PROGMEM
感知的功能,这些功能在内部使用PROGMEM
(=加载程序内存)指令从闪存而不是SRAM加载数据。它需要更长的时间(SRAM需要3个周期,而不是1或2个周期)LPM
- 我相信您已经意识到了这一点,但实际上您的数据并没有16K的闪存:如果您用数据填充闪存,您就没有空间容纳程序本身:)
数据存储
指针实际上在SRAM中,PROGMEM中唯一的东西就是数据本身。哎呀……我忘了我的程序了!;-)感谢您的回复。您可以使用“avr objdump-t”从elf创建地图。和-d表示程序集列表。以便您自己准确了解闪存和RAM的使用情况。您需要从IDE的首选项启用显示详细的编译输出,以显示包含elf文件的临时目录。
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
};