Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2012, 12:59   #1
dfyz.s
Новичок
Джуниор
 
Регистрация: 25.10.2012
Сообщений: 2
По умолчанию

Добрый день. Есть небольшой вопрос по функции read. Нужно прочитать флешку. Инициализирую UART и пытаюсь прочитать ее. Все ок, только командой read(); читается только около 260 байт. Дальше записывает нули. Размер же входного буфера намного больше, или может я ошибаюсь?
Инициализировал так:
Код:
/* USB Init */
	fd_serialport = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
	if(fd_serialport == -1){
		perror("Unable to open /dev/ttyUSB0");
	}
	 
	tcgetattr(fd_serialport, &options);
	cfsetispeed(&options, B230400);
	cfsetospeed(&options, B230400);
	options.c_lflag = 0;
	options.c_iflag = 0;
	options.c_oflag = 0;
	options.c_lflag = 0;
	options.c_cflag = B230400 | CREAD | CS8 | CLOCAL | HUPCL;
	
	 // options.c_cc[VTIME] = 4; /* междусимвольный таймер выключен */
	 // options.c_cc[VMIN]  = 255; /* блокируем read после получения 255 символов */
	
	tcflush(fd_serialport, TCIFLUSH);
	tcsetattr(fd_serialport, TCSANOW, &options);
	fcntl(fd_serialport, F_SETFL, 0);
Читаю так:
Код:
...
	size = (eeprom_read[1]<<8) + eeprom_read[2];
...
	test = (unsigned char *) malloc(1000* sizeof(unsigned char));
...
	read(fd_serialport, test, size+9);
потом вывожу, то что прочитал

Код:
	while ((test[i] != 0xC0) && (i<(size+9)) )// New string from the end of package
	{
		printf("0x%02x ", test[i]);
		if ((i-6) % 17 == 0) printf(" %d  %d\n", (i-6)/17, i);
		i++ ;
	}
	printf("0x%02x\n", test[i]);
Кстати без строчки options.c_cc[VMIN] = 255;
вообще только символов 10 записывается.

Или это может быть связано с какой то рассинхронизацией? Так как каждый раз разное количество байт читает.
Байты, которые не прочитались readом потом приходят.

Код:
/*waitung for incoming bytes from buttons*/
	while( read(fd_serialport, &temp, 1) != -1 )
	{
		printf("0x%02x ", (unsigned char)temp);
		fflush(stdout);
		if (temp == 0xC0) // New string from the end of package
			printf("\n");
	}
	temp =0;
}

Последний раз редактировалось Stilet; 29.10.2012 в 16:18.
dfyz.s вне форума Ответить с цитированием
Старый 29.10.2012, 16:12   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а почему вы не смотрите сколько байт прочитано?(возврат от read)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.11.2012, 10:14   #3
dfyz.s
Новичок
Джуниор
 
Регистрация: 25.10.2012
Сообщений: 2
По умолчанию

В принципе смотрел, как раз через возврат. Получается около 15-10 байт каждый раз.
На стороне контроллера байты передаются массивом через DMA. Там посмотрел через отладчик - никаких проблем нет. То есть реально какая то проблема с read() в моей написанной программе или в настройке UART. Никто никогда массив не читал?

Последний раз редактировалось dfyz.s; 15.11.2012 в 10:16.
dfyz.s вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение с COM-порта через HyperTerminal rashid1988 Общие вопросы Delphi 9 20.04.2012 09:56
C++ Builder чтение из файла через пробел reeskblg Помощь студентам 2 14.12.2011 18:20
Чтение символа из строки через её адрес Farrel Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 13.05.2011 18:25
Чтение из файла через поток tim91 Общие вопросы Delphi 3 02.03.2011 09:35
Чтение и запись данных в InterBase через Delphi Harikolo БД в Delphi 7 29.09.2010 22:46