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

 
 
> Nios + STDIN Jtag-Uart, как пихнуть данные в консоль?
torik
сообщение Feb 8 2011, 17:06
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Из хела:
Цитата
Program output can appear in the Console view of the Nios II IDE. The Console view maintains a terminal I/O connection with a communication device, such as a JTAG UART, connected to the Nios II processor in the SOPC Builder system. When the Nios II program writes to stdout or stderr, the Console view displays the text. The Console view can also accept character input from the host keyboard, which is sent to the processor and read as stdin.

Т.е. вроде бы можно в консоли набрать данные и получить их в программе ниос через STDIN.

пишем
Код
char sss[5];
fgets (sss, 1, stdin);
if (sss != NULL)
   fprintf (stdout, "sss = %s", sss);


Пишу чё-нибудь в консоли, при этом sss всегда NULL. В bsp STDIN/STDOUT настроены на jtag-uart. fprintf работает без проблем.
ЧТо-то не так делаю?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
torik
сообщение Feb 9 2011, 08:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Странно, изменил строчку:
Код
fgets ([b]&sss[0][/b], 5, stdin);

Заработал ввод данных с консоли.
Чего это оно, имя массива нельзя в качестве указателя использовать?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 9 2011, 10:05
Сообщение #3


Гуру
******

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



Цитата(torik @ Feb 9 2011, 14:57) *
Странно, изменил строчку:
Код
fgets ([b]&sss[0][/b], 5, stdin);

Заработал ввод данных с консоли.
Чего это оно, имя массива нельзя в качестве указателя использовать?

можно, почему нельзя
Код
    char sss[5];
    while(1)
    {
        if(fgets (sss, 5, stdin)!=NULL)
            {
                fprintf (stdout, "sss = %s", sss);
                break;
            }
    }

скорее, тут из-за второго параметра, надо ведь еще место под нуль-символ
Go to the top of the page
 
+Quote Post
torik
сообщение Feb 9 2011, 11:20
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Да, Вы оказались правы. Место под NULL надо...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
torik
сообщение Feb 11 2011, 09:40
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



fscanf еще удобнее.

Но, ё-моё, опять проблемы.

Код
while (1) {
..........
fscanf (....);

}


И пока строку не введешь, цикл не завершится.
А у меня в цикле другие действия должны выполняться, а через консоль хочу менять некоторый параметр.
Как быть?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 11 2011, 10:04
Сообщение #6


Гуру
******

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



Цитата(torik @ Feb 11 2011, 15:40) *
Как быть?

написать нормально, по пунктам: что хотите сделать sm.gif
Go to the top of the page
 
+Quote Post
torik
сообщение Feb 11 2011, 11:28
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



По каким-таким пунктам?

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

Так яснее?

Т.е. надо чтобы fscanf завершалась если данные не приходят, а не ожидала их.

Может можно по прерыванию JTAG-UART читать данные с него посредством fscanf?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 11 2011, 12:42
Сообщение #8


Гуру
******

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



для таких штук есть select

#include <sys/select.h>

в поставке ниоса он есть, но что-то не могу найти "родных" мануалов

вот линуксовая версия, можно попробовать:

http://linux.die.net/man/2/select
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 12 2011, 04:24
Сообщение #9


Гуру
******

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



хотя я погорячился. select - это системный вызов, без наличия оного в ОС указанный выше финт не прокатит. так что в вашем случае проще отключить jtag-uart от стандартного ввода/вывода и сделать свой обработчик прерывания (и обломаться с stdio.h, да). или сделать аналог системного вызова select. может проще ОС готовую воткнуть?

на всякий случай, в линуксе это выглядит примерно так:
CODE

#include <stdio.h>
#include <sys/select.h>
#include <sys/time.h>
#include <unistd.h>

int main()
{
//IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE,0);
fd_set rfds;
struct timeval tv;
int retval;
printf("Hello from Nios II!\n");
FD_ZERO(&rfds);
FD_SET(0, &rfds);
tv.tv_sec = 5;
tv.tv_usec = 0;
char sss[256];
while(1)
{
retval = select(1, &rfds, NULL, NULL, &tv);
if (retval == -1)
perror("select()");
else if (retval){
printf("Data is available now.\n");
tv.tv_sec = 5;
tv.tv_usec = 0;
FD_ZERO(&rfds);
scanf("%s",sss);
FD_SET(0, &rfds);
}
/* FD_ISSET(0, &rfds) will be true. */
else{
printf("No data within 5 seconds.\n");
tv.tv_sec = 5;
tv.tv_usec = 0;
FD_SET(0, &rfds);
}
}
return 0;
}
Go to the top of the page
 
+Quote Post
torik
сообщение Feb 13 2011, 13:51
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Сейчас мне с ОС некогда разбираться, хотя в дальнейшем было бы интересно.
А прерывание от Jtag-uart происходит когда что-то передали из консольки? Интересно, надо почитать...
Тогда основной цикл себе вертится спокойно, а по вводу данных в консоль в прерывании меняем что надо и все дела...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 13 2011, 14:49
Сообщение #11


Гуру
******

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



Цитата(torik @ Feb 13 2011, 19:51) *
А прерывание от Jtag-uart происходит когда что-то передали из консольки?

да, там можно настроить и на байты, и на пакеты. правда, про stdio придется забыть
Go to the top of the page
 
+Quote Post

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

 


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


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