早上好,我需要帮助,因为我被卡住了,我看着手册找不到任何解决方案。
我想在Leon3上使用EDAC。我使用BCC编译器用C语言编程。特别是,我有一个GR-UT699板。我正在使用GRMON在RAM中刷新我的elf文件。我的程序是一个简短的测试,我想在其中使用EDAC。要启用EDAC,我用这种方式简单地bitbang寄存器(我可以说我检查了寄存器,它们被正确地写入):
#define MCFG2_RMW_bit_set 0x00000040 //enable read-modify-write cycles on sub-word writes to 16 and 32bit areas with common write strobe
#define MCFG2_DE_bit_set 0x00004000 //SDRAM controller (1 en, 0 dis)
#define MCFG3_R_bit_set 0x00000200 //enable EDAC checking of the SDRAM or SRAM (1 en, 0 dis)
#define MCFG1_IE_bit_set 0x00080000 //enable access to mapped I/O memory.
...
edac->MCFG1 = edac->MCFG1 | MCFG1_IE_bit_set;
edac->MCFG2 = edac->MCFG2 | MCFG2_RMW_bit_set | MCFG2_DE_bit_set;
edac->MCFG3 = edac->MCFG3 | MCFG3_R_bit_set;
...
return 0;
}这些指令在init函数中执行,该函数返回0。我只是设置了您可以在前面的定义中看到的位。
当函数返回时,我只想调用一个printf()来显示一条消息。后面的( printf)输出永远不会显示。因此,程序在设置寄存器之后和printf之前崩溃。我想它在init函数返回的时候崩溃了。
以下是grmon控制台的输出:
grmon2> run
IU exception (tt = 0x2B, data store error)
0x40009acc: 81c3e008 retl <memmove+484>
grmon2> inst
TIME ADDRESS INSTRUCTION RESULT SYMBOL
2608062 40009978 andcc %g1, %g3, %g0 [00000000] memmove+0x90
2608065 4000997C be 0x40009AB0 [00000000] memmove+0x94
2608066 40009980 or %g2, %o1, %g1 [40013FA0] memmove+0x98
2608067 40009AB0 mov 0, %g1 [00000000] memmove+0x1c8
2608068 40009AB4 ldub [%o1 + %g1], %g3 [0000002E] memmove+0x1cc
2608070 40009AB8 stb %g3, [%g2 + %g1] [40012EA0 2E2E2E2E] memmove+0x1d0
2608072 40009ABC add %g1, 1, %g1 [00000001] memmove+0x1d4
2608073 40009AC0 cmp %g1, %o2 [00000000] memmove+0x1d8
2608076 40009AC4 bne,a 0x40009AB8 [00000000] memmove+0x1dc
2608078 40009ACC retl [ TRAP ] memmove+0x1e4我发现我需要在MCFG1注册表中设置IE位,所以我就这么做了。但程序仍然会崩溃。这里出了什么问题?
提前感谢您的耐心等待。
-Lorenzo
发布于 2018-01-24 23:48:58
我找到了至少一个不会导致程序崩溃的解决方案。如果你想使用EDAC,你必须初始化内存控制器寄存器(在GRMON中使用"mcfgx 0xvalue etc“或在启动GRMON时使用-edac选项)。然后对RAM进行清洗(使用来自GRMON的清洗命令)。在启用EDAC后,启动清洗命令(或通常从固件中清洗存储器)非常重要。实际上,如果您在ENAC使能后清洗存储器,则会生成校验位。否则,您将执行简单的内存清理。
然后,您最终可以将程序加载到RAM中(从grmon使用" load ")。
重要的是要注意,IU/FPU寄存器也应在复位时清除,这可以从MKPROM (如有必要)中完成。
此解决方案适用于通过GRMON加载到RAM中的程序。如果需要将程序闪存到闪存ROM中,则应通过MKPROM执行类似的操作。我还没有做到这一点,但我希望是真正类似的东西。
洛伦佐。
https://stackoverflow.com/questions/48319640
复制相似问题