Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с приёмом информации с приложения 
:(
    Опции темы
IvanHCI
Дата 22.6.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.5.2006

Репутация: нет
Всего: нет



Люди, вопрос - я считал с драйвера USB информацию так:

Код




 char* Read(HANDLE file)
{
   bool bResult;
   DWORD dwBytes;
   char* buf = new char[10];
   for (int i=0;i<9;i++) buf[i]=0;
   bResult = ReadFile(file,buf,1,&dwBytes,NULL);
   // check for eof
   if (dwBytes != 0) {// we're at the end of the file }
   {
     return (buf);
   }
}
}

 
 


Получил 
buf = "0123456789Dr|" - причём последние 3 символа я не передавал, откуда они взялись - не пойму...
После чего это всё чудо пихаю в файл. Потом считываю с файла, и он мне заявляет, что то, что я принял с устройства не есть то, что я считал с файла!!!! КАК ТАК???!!! И ещё вопрос - если я в драйвере сделал так:

Код



 UCHAR RxBuffer[] = "0123456789"; 

    ULONG Information; 
    NTSTATUS ntStatus; 
if (pIrp->MdlAddress) 
{ 
    RtlCopyMemory(MmGetSystemAddressForMdlSafe(pIrp->MdlAddress,HighPagePriority), &RxBuffer, 10); 
    ntStatus = STATUS_SUCCESS; 
    Information = 10; 
    #if DBG 
        DbgPrint("Read success"); 
    #endif 
}

 
 



Это означает, что размер моего буфера 10??? Если да - то вопрос, откуда тогда последние 3 символа???!!!  
 
PM MAIL   Вверх
ManiaK
Дата 22.6.2006, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 2
Всего: 29



Цитата(IvanHCI @  22.6.2006,  18:20 Найти цитируемый пост)
Получил buf = "0123456789Dr|" - причём последние 3 символа я не передавал, откуда они взялись - не пойму...

Каким образом смотрел полученную строку? Не забыл ли, случаем, в конец её нулевой символ '\0' добавить? Если забыл, то при выводе строки на экран будут выводиться последоватьно байты до тех пор, пока не встретится '\0'. Видимо у тебя это и происходит.

Цитата(IvanHCI @  22.6.2006,  18:20 Найти цитируемый пост)
Это означает, что размер моего буфера 10???

Да. 10 байт. 
PM MAIL WWW   Вверх
IvanHCI
Дата 22.6.2006, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.5.2006

Репутация: нет
Всего: нет



Это типа с помощью StrCat делать? 
PM MAIL   Вверх
ManiaK
Дата 22.6.2006, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 2
Всего: 29



Цитата(IvanHCI @  22.6.2006,  18:52 Найти цитируемый пост)
Это типа с помощью StrCat делать? 

Зачем же так.. создай массив размером на 1 больше, чем тебе надо и заранее запиши ноль в последний байт, не изменяй его. 
PM MAIL WWW   Вверх
Metal_Heart
Дата 23.6.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

Репутация: 1
Всего: 12



строка char должна заканчиваться на '\0'
А у тебя в буфере остался мусор. Можешь очищать(проинициализировать) свой RxBuffer перед использованием.

Добавлено @ 14:57 
Цитата(IvanHCI @  22.6.2006,  18:18 Найти цитируемый пост)
После чего это всё чудо пихаю в файл. 

В файл тоже можно по разному писать, например как текст, а можно как двоичную инфу ... 

Это сообщение отредактировал(а) Metal_Heart - 23.6.2006, 14:56


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.