Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 计算PROGMEM使用的字节数_Arduino - Fatal编程技术网

Arduino 计算PROGMEM使用的字节数

Arduino 计算PROGMEM使用的字节数,arduino,Arduino,只是需要一个现实的检查在这里确定多少PROGMEM我将使用。在下面的代码段中,我存储了一个8x8字节数组。我是否可以假设(大概,可能有一些开销?)这将只占用64字节的PROGMEM (我意识到这有点像是“谁被埋葬在格兰特的坟墓里?”之类的问题,但我没有太多地使用PROGMEM,我不想假设我有16k字节的内存(ATMEGA 168芯片),结果发现当我生成真实的项目数据时,它不适合。) 我想我会把我的评论作为答案。。请随意否决 否,PROGMEM数据没有额外的开销。PROGMEM标记所做的只是指示

只是需要一个现实的检查在这里确定多少PROGMEM我将使用。在下面的代码段中,我存储了一个8x8字节数组。我是否可以假设(大概,可能有一些开销?)这将只占用64字节的PROGMEM

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


我想我会把我的评论作为答案。。请随意否决


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

  • 我相信您已经意识到了这一点,但实际上您的数据并没有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
};