2

这是我的问题,

我正在开发嵌入在我们为太空项目制造的电路板中的应用程序。该板使用 LEON2 处理器,它是 SPARC v8 的衍生产品,我们还使用 RTEMS 作为操作系统。

在这个应用程序中,我们必须在 EEPROM 中保存各种 FS 表的默认值,以便用户可以根据需要修改它们,而不必每次都这样做。

为此,我简单地创建了一个新部分 (.eeprom_data),并将其放置在 EEPROM 中的地址 0x6007cc40 处。这是通过使用规范文件和自定义链接描述文件完成的,该脚本将节定位在正确的地址,并告诉编译器将某些变量放在同一节中。

在这方面它似乎工作得很好。这是该部分和一个特定 var 的 objdump 的摘录:

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 的写操作绝对没有任何作用。然而,读操作完美地工作并正确返回存储在内存中的数据。

我真的不知道如何解决这个问题,所以我希望有人能帮帮我。

谢谢,莱奥。

4

3 回答 3

1

感谢您的回答。

由于某种原因,当硬件工程师设计我们的板时,他们不允许单个 16 位地址的寻址,只有 32 位地址。

于 2009-12-08T14:51:28.573 回答
0

您是否使用优化标志进行编译?我猜编译器会优化写入,除非 managed_faulty_sectors_default_crc 被声明为 volatile 。

此外,managed_faulty_sectors_default_crc 是如何映射到 .eeprom_data 部分的 - objdump 是否提供了关于它们是否正确映射的任何线索?

于 2009-12-04T15:19:43.550 回答
0

您确定在禁用 EEPROM 之前已刷新数据缓存(如果有)吗?而且,EEPROM 变量是否正确声明为易失性?

于 2009-12-04T14:34:48.130 回答