Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: printf опять виснет
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
alexPec
Прошу прощения, Уважаемые, что новый топик, но проблема вроде никак в предыдущий не вписывается. Суть проблемы:

Есть такой код (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
Вот и не пойму никак как обращение к этой памяти блокирует принтф???
vadimuzzz
надо посмотреть, что делает система в момент первого выполнения
Код
*(prt++)=*(prt1);
. добавьте в систему сигналтап http://www.altera.com/literature/an/an446.pdf и сигналы к компоненту. такое впечатление, что компонент пишет не туда, куда надо.
alexPec
Цитата(vadimuzzz @ Sep 12 2010, 06:20) *
надо посмотреть, что делает система в момент первого выполнения
Код
*(prt++)=*(prt1);
. добавьте в систему сигналтап http://www.altera.com/literature/an/an446.pdf и сигналы к компоненту. такое впечатление, что компонент пишет не туда, куда надо.

Спасибо Vadimuzzz! Проблема решилась. Че-то я затупил, авалон шину вывел наружу ту, которая к периферии цепляется, в том числе к уарт, а сигнал wait как из рисунка видно постоянно на землю посажен был. Видимо в этом и конфликт. Поставил на свой компонент отдельный pipeline bridge и все нормально заработало.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.