|
发表于 2012-2-14 14:24:52
|
显示全部楼层
“我上传的图片能很清楚看到8bit test pass 和16bit test pass,这不能够说明RAM数据的正确性吗? ”
如果这能说明,那16位就不用测了
8位测试保证字节片选正常工作。(存储器宽度大于8时通过BL来选择写高8位或低8位)
16位保证多片RAM都正常。 (大部分系统都用多片存储器组合成32位)
32位位测试同上。
32位环回测试保证每个地址都是有效的。 (8位到FF就环回了,1M的RAM你输入size为2M测试也是通过的)
“我在两个地方加入一样的测试RAM的代码;”
但结果却不一样(要考虑此时环境也不一样,第一次测试是在finsh启动前)。
因为,SDRAM被初始化成heap被人用掉了(finsh就是动态线程),你再对其进行写操作,就会乱掉。
这个问题在1楼就说明了。
要全片测试,就先不要让别人使用SDRAM。(#if LM3S_EXT_SRAM == 1 )
startup.c (把下面代码手动修改为先不使用片外RAM)
#ifdef RT_USING_HEAP
#if LM3S_EXT_SRAM == 1
/* init sdram */
rt_system_heap_init((void*)LM3S_EXT_SRAM_BEGIN, (void*)LM3S_EXT_SRAM_END);
#else
#ifdef __CC_ARM
rt_system_heap_init((void*)&Image$$RW_IRAM1$$ZI$$Limit, (void*)LM3S_SRAM_END);
#elif __ICCARM__
rt_system_heap_init(__segment_end("HEAP"), (void*)LM3S_SRAM_END);
#else
/* init memory system */
rt_system_heap_init((void*)&__bss_end, (void*)LM3S_SRAM_END);
#endif
#endif
#endif |
|