Цитата(_Mikhail_ @ Aug 13 2013, 21:13)

Ситуация, похоже, интереснее.
Решил повозиться с "чистым" проектом.
................................................................................
............
Т.е. при переходе через каждые 16Мб 0x0000000 = 0x1000000, 0x1000000 = 0x2000000.
Если в цикле не переходим через 0x1000000, 0x2000000, то такой картины не наблюдается.
Угробил кучу времени. Что у меня не так?
Дело в арифметике указателей - она у Вас неправильная.
У Вас в цикле инкремент i идёт на величину sizeof(Int32U), то бишь на 4, далее i прибавляется к указателю Int32U* SDRAM, и получается, что указатель при этом смещается на 4 элемента Int32U, то есть на одной итерации цикла на 16 байт, а не на 4, как Вы ожидаете.
Поэтому, с учётом того, что на Вашей плате 64 Мб - логично, что всю память Вы проходите "в 4 раза быстрее", то есть "зацикливание" памяти будет при индексе 0x1000000 (16 Мб), так как указатель при этом "прыгает" на 64 Мб вперёд.
Правильно будет в цикле делать обычный инкремент индекса, то есть i++.
Сообщение отредактировал gerber - Aug 13 2013, 20:24
"... часами я мог наблюдать, как люди работают." (М. Горький)