Перейти к содержанию
    

Непонятное поведение printf в Ниос2

пишу однопоточное приложение. без всяких ос. в нужных местах в терминал бросаю отладочную инфу

 

printf("Recived %u bytes, command %u, for device with address %u\n\r", count, com,  adr);

иногда после этого кода останавливаюсь в точке остановки, и вижу в терминале вывод

 

Recived 13 bytes, command 1, for dev

 

потом продолжаю выполнение программы, и вижу в терминале довыводит сообщение полностью

 

Recived 13 bytes, command 1, for device with address 15

 

Иногда после printf("Recived.... делаю команду printf("Send..., остановливаюсь после неё, а в терминале часть сообщения предыдущего вызова, т.е. Recived.... Продолжаю, оба сообщения приходят в терминал. Почему так происходит? printf запускается в каком-то другом потоке чтоли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

просто буферизация в JTAG-UART, нормальное явление.

да, но я выкидываю не в JTAG-UART. а добавил в ниос отдельный UART. через отдельный уарт printf наладил. я думал что в апаратном уарте есть апартный буфер размером в 1 байт. может есть программный буфер какой, так опять же прога однопоточная. для програмного буфера тоже поток нужен. как-то не понятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну дык вроде драйвер UART-a использует прерывания для загрузки в аппаратный буфер очередного байта, так что вполне возможно что успело отправиться ровно такое количество байт до достижения точки остановки (а код printf-a длинный, пока выйдет из процедуры...)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а это только в режиме отладки проявляется?

да, также

Ну дык вроде драйвер UART-a использует прерывания для загрузки в аппаратный буфер очередного байта, так что вполне возможно что успело отправиться ровно такое количество байт до достижения точки остановки (а код printf-a длинный, пока выйдет из процедуры...)
Ну я тоже пришел к такому мнению. Почему сразу не сообразил :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а кэш данных в процессоре есть?

Не знаю. в сопсб билдере специально не добавлял. мож где по умолчанию есть? а как посмотреть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю. в сопсб билдере специально не добавлял. мож где по умолчанию есть? а как посмотреть?

в билдере, в настройках CPU. ЕМНИП, по умолчанию он стоит. попробуйте отрубить

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в билдере, в настройках CPU. ЕМНИП, по умолчанию он стоит. попробуйте отрубить
Не нашел я в настройка CPU в билдере ЕМНИП. А про кеш у меня такие настройки, см картинку

post-49045-1295514367_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А про кеш у меня такие настройки, см картинку

ну, вот Data Cache 2KB. выкиньте его

 

//http://lurkmore.ru/%D0%95%D0%9C%D0%9D%D0%98%D0%9F

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...