3
PROGMEM:是否必须将数据从闪存复制到RAM才能读取?
我在理解内存管理时遇到了一些困难。 Arduino文档说,可以在程序存储器中将常量(如字符串)或任何我不想更改的常量保留在程序存储器中。我认为它嵌入在代码段中的某个位置,这在von-Neumann体系结构内必须是完全可能的。我想以此来使我的UI菜单显示在LCD上。 但是,我对于那些仅从程序存储器中读取和打印数据的指令感到困惑: strcpy_P(buffer, (char*)pgm_read_word(&(string_table[i]))); // Necessary casts and dereferencing, just copy. Serial.println( buffer ); 为什么在访问前我必须将该死的内容复制到RAM?如果这是真的,那么所有代码会怎样?它在执行之前也已加载到RAM吗?那么仅使用2kiB RAM时如何处理代码(32kiB)?那些拿着软盘的小妖精在哪里? 更有趣的是:像这样的表达式中的文字常量会发生什么: a = 5*(10+7) 在将5、10和7加载到寄存器之前,它们真的被复制到RAM了吗?我简直不敢相信。