假如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)
........
}