2021-08-26 09:10发布
大家好,我想知道我们是否可以在ARM单片机的EEPROM中存储程序的子程序。从而,主程序从FLASH中运行,当它调用特定的子程序时,再从EEPROM运行。另外,还有一个外部EEPROM,它可以将子程序复制到ARM单片机内部的EEPROM中。基本上,我想做的是通过烧写电路中的EEPROM来改变程序的一部分子程序,而不需要再次去擦除烧写单片机。
我在NXP的LPC1517中使用EEPROM。根据Datasheet,只能通过使用它们在ROM中提供的IAP例程来读写。但是,用普通的ldr指令完全可以去读取它,而且不会报任何硬件错误,如果试图读取不存在的内存,通常会产生硬件错误。因此,很可能可以从EEPROM中执行代码,但是您将在Datasheet建议之外使用它。
您可以使用IAP例程将EEPROM的块复制到RAM中并从RAM中执行。
请注意,与普通的FLASH相比,读取EEPROM通常是非常慢的。如果您的代码从EEPROM运行,那么您的代码时序和效率就会非常糟糕。
您可以将代码存储在EEPROM中,但如果要将其运行,则可能需要将其从EEPROM复制到单片机内部RAM某个位置,然后从RAM中这个位置执行代码。
有可能EEPROM甚至不能以任何方式连接到用于获取和执行指令的地址总线和数据总线。在大多数架构中,EEPROM位于一个完全隔离的地址空间中。
一定是比较老的技术吧。在新的PIC系列单片机中,程序FLASH和EEPROM是一样的东西,只是地址不同。
可能是老技术。在AVR和16系列PIC设备中,EEPROM是数据存储器的大小(8位),而代码内存的大小是可变的,程序计数器或指令地址寄存器中的位数也是可变的。
在PIC系列单片机上程序可以写入flash,您可以读取EEPROM并写入flash。我估计会遇到一些问题,但这应该是可以实现的。
答案是肯定的--但你需要更多地了解它,而不仅仅是复制和调用代码--你还必须理解堆栈和寄存器的存储。
最多设置5个标签!
我在NXP的LPC1517中使用EEPROM。根据Datasheet,只能通过使用它们在ROM中提供的IAP例程来读写。但是,用普通的ldr指令完全可以去读取它,而且不会报任何硬件错误,如果试图读取不存在的内存,通常会产生硬件错误。因此,很可能可以从EEPROM中执行代码,但是您将在Datasheet建议之外使用它。
您可以使用IAP例程将EEPROM的块复制到RAM中并从RAM中执行。
请注意,与普通的FLASH相比,读取EEPROM通常是非常慢的。如果您的代码从EEPROM运行,那么您的代码时序和效率就会非常糟糕。
您可以将代码存储在EEPROM中,但如果要将其运行,则可能需要将其从EEPROM复制到单片机内部RAM某个位置,然后从RAM中这个位置执行代码。
有可能EEPROM甚至不能以任何方式连接到用于获取和执行指令的地址总线和数据总线。在大多数架构中,EEPROM位于一个完全隔离的地址空间中。
一定是比较老的技术吧。在新的PIC系列单片机中,程序FLASH和EEPROM是一样的东西,只是地址不同。
可能是老技术。在AVR和16系列PIC设备中,EEPROM是数据存储器的大小(8位),而代码内存的大小是可变的,程序计数器或指令地址寄存器中的位数也是可变的。
在PIC系列单片机上程序可以写入flash,您可以读取EEPROM并写入flash。我估计会遇到一些问题,但这应该是可以实现的。
答案是肯定的--但你需要更多地了解它,而不仅仅是复制和调用代码--你还必须理解堆栈和寄存器的存储。
一周热门 更多>