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