大家好,
我想知道我们是否可以在ARM单片机的EEPROM中存储程序的子程序。
从而,主程序从FLASH中运行,当它调用特定的子程序时,再从EEPROM运行。
另外,还有一个外部EEPROM,它可以将子程序复制到ARM单片机内部的EEPROM中。
基本上,我想做的是通过烧写电路中的EEPROM来改变程序的一部分子程序,而不需要再次去擦除烧写单片机。
能在ARM的EEPROM中存储和加载子程序吗?
最佳回复
1楼
我在NXP的LPC1517中使用EEPROM。根据Datasheet,只能通过使用它们在ROM中提供的IAP例程来读写。但是,用普通的ldr指令完全可以去读取它,而且不会报任何硬件错误,如果试图读取不存在的内存,通常会产生硬件错误。因此,很可能可以从EEPROM中执行代码,但是您将在Datasheet建议之外使用它。
您可以使用IAP例程将EEPROM的块复制到RAM中并从RAM中执行。
2楼
有可能EEPROM甚至不能以任何方式连接到用于获取和执行指令的地址总线和数据总线。在大多数架构中,EEPROM位于一个完全隔离的地址空间中。
3楼
请注意,与普通的FLASH相比,读取EEPROM通常是非常慢的。如果您的代码从EEPROM运行,那么您的代码时序和效率就会非常糟糕。
您可以将代码存储在EEPROM中,但如果要将其运行,则可能需要将其从EEPROM复制到单片机内部RAM某个位置,然后从RAM中这个位置执行代码。
4楼
可能是老技术。在AVR和16系列PIC设备中,EEPROM是数据存储器的大小(8位),而代码内存的大小是可变的,程序计数器或指令地址寄存器中的位数也是可变的。