реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> printf опять виснет, теперь из-за чего?
alexPec
сообщение Sep 11 2010, 20:07
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Прошу прощения, Уважаемые, что новый топик, но проблема вроде никак в предыдущий не вписывается. Суть проблемы:

Есть такой код (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
Вот и не пойму никак как обращение к этой памяти блокирует принтф???

Сообщение отредактировал alexPec - Sep 11 2010, 20:10
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Sep 12 2010, 02:20
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



надо посмотреть, что делает система в момент первого выполнения
Код
*(prt++)=*(prt1);
. добавьте в систему сигналтап http://www.altera.com/literature/an/an446.pdf и сигналы к компоненту. такое впечатление, что компонент пишет не туда, куда надо.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Sep 12 2010, 09:54
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(vadimuzzz @ Sep 12 2010, 06:20) *
надо посмотреть, что делает система в момент первого выполнения
Код
*(prt++)=*(prt1);
. добавьте в систему сигналтап http://www.altera.com/literature/an/an446.pdf и сигналы к компоненту. такое впечатление, что компонент пишет не туда, куда надо.

Спасибо Vadimuzzz! Проблема решилась. Че-то я затупил, авалон шину вывел наружу ту, которая к периферии цепляется, в том числе к уарт, а сигнал wait как из рисунка видно постоянно на землю посажен был. Видимо в этом и конфликт. Поставил на свой компонент отдельный pipeline bridge и все нормально заработало.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 02:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01378 секунд с 7
ELECTRONIX ©2004-2016