假如MEMORY出现硬件问题的话,会导致系统崩溃,
有必要在preloader阶段,大概检测下MEMORY是否读写正常:
void mem_init (void)
{
int i = 0;
// 目前测试大小为 #define MEM_TEST_SIZE (0x2000)
// 起始位置为 : 0x80000000 ,这个地址一定要注意,不要破坏了PRELOADER自身
if ((i = complex_mem_test (0x80000000, MEM_TEST_SIZE)) == 0)
{
print ("[%s] complex R/W mem test pass\n", MOD);
}
.................
}
// 测试方法:写入什么数据,然后再读出看是否一致
int
complex_mem_test (unsigned int start, unsigned int len)
{
size = len >> 2;
//模式 : 00000000
for (i = 0; i < size; i++)
{
MEM32_BASE[i] = 0;
}
for (i = 0; i < size; i++)
{
if (MEM32_BASE[i] != 0)
{
return -1;
}
else
{
MEM32_BASE[i] = 0xffffffff;
}
}
//模式 : FFFFFFFF (代码省略,基本同上)
//模式 : 0x00~0xff (以byte为单位)
//模式 : 0x00~0xffff (以short为单位)
//模式 : 0x00~0xffffffff (以int为单位)
//模式 : 特殊数字 :0x44332211
//模式 : 特殊数字 :0xa5a5a5a5
//模式 : 特殊数字 :0xa5a5a500 (偏移量为2h)
//模式 : 特殊数字 :0xa500a500 (偏移量为1h)
//模式 : 特殊数字 :0xa5000000 (偏移量为3h)
........
}
本文探讨了在预加载阶段通过复杂内存读写测试确保系统内存的读写正常性,以预防因硬件问题导致的系统崩溃。介绍了内存测试方法及关键步骤,包括内存初始化、测试流程和测试模式的选择。
913

被折叠的 条评论
为什么被折叠?



