Есть такой код (eclipse, nios 9.1)
Код
alt_u32 * prt;
alt_u32 * prt1;
alt_u32 datain[1000];
prt=&datain[0];
prt1 = 0x03000000;
printf("skskd\n\r ");
*(prt++)=*(prt1);
printf("skskd\n\r ");
ddd=1000;
while (ddd--)
*(prt++)=*(prt1);
Первый принтф проходит, второй виснет. В любом месте программы пока нет обращения к памяти 0х03000000 принтф работает, обратишся раз- первый же принтф виснет. При этом данные из памяти 0х03000000 читаются нормально, т.е. цикл while (если убрать второй принтф) выпоняется нормально, быстро и данные корректные.
Подробности:
память 0х03000000 - компонент, созданный по совету Глубокоуважаемого Vadimuzzz из темплейта Avalon MM slave. Ничего в нем не менял, т.е. по сути сигналы avalon наружу выведены, вот так выглядит соединение (картинка).
К этому авалону прицеплен компонент, адрес ему не нужен, он обновляет значение на шине данных после каждого чтения (по сигналу read_s) - ну чтоб указатель не инкрементить, все равно данные заподряд читаю.
datain - массив в единственной памяти в системе, в ней код, данные, хип и т.д - т.е. все.
Если сигнал readdatavalid постоянно посадить на VCC, sysid не видит почему-то, пришлось сделать так как на рисунке.
Принтф кидает по умолчанию в jtag uart
В BSP стоят галки reduced device driver и small c library
Вот и не пойму никак как обращение к этой памяти блокирует принтф???