Цитата(gerber @ Aug 14 2013, 00:23)

Дело в арифметике указателей - она у Вас неправильная.
У Вас в цикле инкремент i идёт на величину sizeof(Int32U), то бишь на 4, далее i прибавляется к указателю Int32U* SDRAM, и получается, что указатель при этом смещается на 4 элемента Int32U, то есть на одной итерации цикла на 16 байт, а не на 4, как Вы ожидаете.
Поэтому, с учётом того, что на Вашей плате 64 Мб - логично, что всю память Вы проходите "в 4 раза быстрее", то есть "зацикливание" памяти будет при индексе 0x1000000 (16 Мб), так как указатель при этом "прыгает" на 64 Мб вперёд.
Правильно будет в цикле делать обычный инкремент индекса, то есть i++.
Да, Вы правы. Стыдно, взял готовый пример, принял на веру, но не разобрался. Все четыре "странички" заполнялись по кругу.
Протестил:
for ( SDRAM = (Int32U*)0xA0000000; SDRAM < (Int32U*)0xA4000000; SDRAM++)
{
*SDRAM = (DWORD)SDRAM;
}
for ( SDRAM = (Int32U*)0xA0000000; SDRAM < (Int32U*)0xA4000000; SDRAM++)
{
if ( *SDRAM != (DWORD)SDRAM)
{
result = FALSE;
break;
}
}
Все нормально.
Остается только вопрос, почему проект со РТОСом ЗАРАБОТАЛ в режиме 32 бит SDRAM при установленной опции External bus memory type - Low-power SDRAM в регистре EMCDynamicConfig0 EMC?
При High-performance работать отказывается.