这是我的问题,
我在一个我们为太空项目制造的电路板中嵌入了一个应用程序。 该板使用LEON2处理器,它是SPARC v8的衍生物,我们也使用RTEMS作为操作系统。
在这个应用程序中,我们必须为EEPROM中的FS保存各种表的默认值,这样用户就可以根据需要修改它们而不必每次都这样做。
为实现这一点,我只创建了一个新的部分(.eeprom_data),并将其放在EEPROM中的地址0x6007cc40。它是通过使用specs文件和自定义链接器脚本完成的,该脚本将该部分放在正确的地址,并告诉编译器将某些变量放在同一部分中。
在这方面似乎工作得很好。 以下是该部分的objdump摘录和一个特定的var:
6 .eeprom_data 000033c0 6007cc40 6007cc40 00038a80 2**3
CONTENTS, ALLOC, LOAD, DATA
6007fbda g O .eeprom_data 00000002 Downlink_Priority_Vc1_default_value
唯一的问题是它似乎没有完全发挥作用。我的应用程序正常运行没有问题,但像这样的简单测试只能部分工作:
Eeprom_ChipEnable(TRUE);
managed_faulty_sectors_default_crc = 0x789A;
tmp = managed_faulty_sectors_default_crc;
Eeprom_ChipEnable(FALSE);
应该在EEPROM中写入0x789A的写操作绝对没有 然而,读取操作完美无缺,并且可以正确地返回存储在存储器中的数据。
我真的不知道如何解决这个问题所以我希望有人可以帮我。
谢谢,Léo。
答案 0 :(得分:1)
感谢您的回答。
出于某种原因,当硬件工程师设计我们的电路板时,他们不允许寻址单个16位地址只有32位地址。
答案 1 :(得分:0)
您是否确定在禁用EEPROM之前刷新了数据缓存(如果有)? 并且,EEPROM变量是否正确声明为volatile?
答案 2 :(得分:0)
您是否使用优化标志进行编译? 我猜想编译器会优化写入,除非managed_faulty_sectors_default_crc被声明为volatile。
另外,managed_faulty_sectors_default_crc如何映射到.eeprom_data部分 - objdump是否提供了关于它们是否正确映射的任何线索?