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

 
 
 
Reply to this topicStart new topic
> Непонятное поведение printf в Ниос2
juvf
сообщение Jan 19 2011, 11:30
Сообщение #1


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



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

Код
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 запускается в каком-то другом потоке чтоли?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 19 2011, 12:41
Сообщение #2


Гуру
******

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



просто буферизация в JTAG-UART, нормальное явление.
Go to the top of the page
 
+Quote Post
juvf
сообщение Jan 19 2011, 13:07
Сообщение #3


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(vadimuzzz @ Jan 19 2011, 17:41) *
просто буферизация в JTAG-UART, нормальное явление.

да, но я выкидываю не в JTAG-UART. а добавил в ниос отдельный UART. через отдельный уарт printf наладил. я думал что в апаратном уарте есть апартный буфер размером в 1 байт. может есть программный буфер какой, так опять же прога однопоточная. для програмного буфера тоже поток нужен. как-то не понятно.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 19 2011, 14:21
Сообщение #4


Гуру
******

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



а это только в режиме отладки проявляется?
Go to the top of the page
 
+Quote Post
Reanimator++
сообщение Jan 19 2011, 15:53
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 399
Регистрация: 1-01-06
Из: Волгоград
Пользователь №: 12 763



Ну дык вроде драйвер UART-a использует прерывания для загрузки в аппаратный буфер очередного байта, так что вполне возможно что успело отправиться ровно такое количество байт до достижения точки остановки (а код printf-a длинный, пока выйдет из процедуры...)
Go to the top of the page
 
+Quote Post
juvf
сообщение Jan 20 2011, 05:40
Сообщение #6


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(vadimuzzz @ Jan 19 2011, 19:21) *
а это только в режиме отладки проявляется?

да, также
Цитата
Ну дык вроде драйвер UART-a использует прерывания для загрузки в аппаратный буфер очередного байта, так что вполне возможно что успело отправиться ровно такое количество байт до достижения точки остановки (а код printf-a длинный, пока выйдет из процедуры...)
Ну я тоже пришел к такому мнению. Почему сразу не сообразил laughing.gif
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 20 2011, 07:27
Сообщение #7


Гуру
******

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



а кэш данных в процессоре есть?
Go to the top of the page
 
+Quote Post
juvf
сообщение Jan 20 2011, 08:06
Сообщение #8


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(vadimuzzz @ Jan 20 2011, 12:27) *
а кэш данных в процессоре есть?

Не знаю. в сопсб билдере специально не добавлял. мож где по умолчанию есть? а как посмотреть?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 20 2011, 08:25
Сообщение #9


Гуру
******

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



Цитата(juvf @ Jan 20 2011, 14:06) *
Не знаю. в сопсб билдере специально не добавлял. мож где по умолчанию есть? а как посмотреть?

в билдере, в настройках CPU. ЕМНИП, по умолчанию он стоит. попробуйте отрубить
Go to the top of the page
 
+Quote Post
juvf
сообщение Jan 20 2011, 09:06
Сообщение #10


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(vadimuzzz @ Jan 20 2011, 13:25) *
в билдере, в настройках CPU. ЕМНИП, по умолчанию он стоит. попробуйте отрубить
Не нашел я в настройка CPU в билдере ЕМНИП. А про кеш у меня такие настройки, см картинку

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 20 2011, 10:54
Сообщение #11


Гуру
******

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



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

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

//http://lurkmore.ru/%D0%95%D0%9C%D0%9D%D0%98%D0%9F
Go to the top of the page
 
+Quote Post

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

 


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


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