|
Nios + STDIN Jtag-Uart, как пихнуть данные в консоль? |
|
|
|
Feb 8 2011, 17:06
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
 |
Ответов
(1 - 10)
|
Feb 9 2011, 08:57
|

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

|
Странно, изменил строчку: Код fgets ([b]&sss[0][/b], 5, stdin); Заработал ввод данных с консоли. Чего это оно, имя массива нельзя в качестве указателя использовать?
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Feb 9 2011, 10:05
|

Гуру
     
Группа: Свой
Сообщений: 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; } } скорее, тут из-за второго параметра, надо ведь еще место под нуль-символ
|
|
|
|
|
Feb 11 2011, 09:40
|

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

|
fscanf еще удобнее. Но, ё-моё, опять проблемы. Код while (1) { .......... fscanf (....);
} И пока строку не введешь, цикл не завершится. А у меня в цикле другие действия должны выполняться, а через консоль хочу менять некоторый параметр. Как быть?
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Feb 12 2011, 04:24
|

Гуру
     
Группа: Свой
Сообщений: 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; }
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|