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

 
 
 
Reply to this topicStart new topic
> Проблема с приемом файла по Xmodem от Гипертерминала
alux
сообщение Apr 1 2009, 12:19
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Пытаюсь отправить тестовый текстовый файл через гипертерминал на прибор.
За основу взял исходник Xmodem.cpp
http://www.koders.com/cpp/fidF02ED33BDED10...s=xmodem.cpp#L1

Немного переделал: убрал обработку исключений, заменил функцию расчета CRC16 и исправил ошибки. В итоге SendFile() отправляет файл, а вот наоборот, никак не получается: получаю SOH, затем номер блока=1, затем его дополнение до единицы=254, и все... Дальше Гипертерминал получает запрос на повторную передачу и после 9 попыток связь обрывается. Делаю все по протоколу, вроде. Свои исходник прилагаю. Посмотрите, пожалуйста, что я не так делаю?
Прикрепленные файлы
Прикрепленный файл  xmodem.rar ( 3.6 килобайт ) Кол-во скачиваний: 23
 
Go to the top of the page
 
+Quote Post
cf7k
сообщение Apr 3 2009, 15:20
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 14-03-06
Из: Санкт-Петербург
Пользователь №: 15 227



Если я Вас правильно понял - Вы в приборе не можете принять то, что отсылает гипертерминал.
В плюсах я не силен, но могу предложить рабочий сырец, который у меня работает. Может поможет разобраться.

Метод XModem() вызывается в прерываниях по приходу символа и по окончании приема блока. Вызов SPSetRxMode - как раз выставляет, кто сгенерирует прерывания. (Они генерируются поочередно - на первый символ блока и на окончание приема блока).

Прикрепленный файл  x_modem.rar ( 3.11 килобайт ) Кол-во скачиваний: 176


PS.Offtopic: а никто не подскажет альтернативу гипертерминалу, чтоб с расцветочкой работала (как Putty) и имела бы X-Modem? А то без веселой расцветочки (которые ESC-коды) как-то невесело получается... smile.gif
Go to the top of the page
 
+Quote Post
alux
сообщение Apr 5 2009, 13:54
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Проблема решилась после того, как применил таймер для отсчета таймаута. Код немного усовершенствовал- добавил пару меток и goto. Хоть и говорят, что этого оператора нужно избегать, в данном случае он пришелся в самый раз.
Прикрепленные файлы
Прикрепленный файл  xmodem2.rar ( 4.25 килобайт ) Кол-во скачиваний: 23
 
Go to the top of the page
 
+Quote Post
alux
сообщение Apr 8 2009, 03:31
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Здесь исправленный вариант X-modem. В предыдущем перепутаны байты при вычислении CRC16. Теперь все работает: и прием, и передача файлов через Гипертерминал.
Прикрепленные файлы
Прикрепленный файл  X_modem.rar ( 4.66 килобайт ) Кол-во скачиваний: 28
 
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 26 2009, 20:31
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Обнаружилась одна проблема с передачей файла от девайса на PC по Xmodem. Почему-то всегда не отправляется второй пакет 128 байт. Объясню на примере: допустим, нужно передать файл, состоящий из 128 символов '1' , 128 символов '2' и 128 символов '3'. В результате в переданном файле 128 символов '1' и 128 символов '3'. Если файл состоит , например, из 390 байт, то Гипертерминал, как и положено, сообщает об успешной передаче 4 пакетов, но в результате в файле сохранено 3 пакета по 128 байт. Второй пакет отсутствует.
Версии все исчерпал. Посмотрите, пожалуйста, исходник, может что-нибудь упустил из виду... Хотя в протоколе все просто как дважды два.


PS. Вопрос снимается. В начале функции SendFile() нужно вставить следующее:
Код
    if(((ans = GetByteWithTimeout(DLY_60_SEC)) > 0) && ans == CRC)
    {
        bCRC = true;  
    }
    else
    {
        message(timeout_err);
        return false;      
    }
Теперь все работает.
Прикрепленные файлы
Прикрепленный файл  xmodem.rar ( 4.76 килобайт ) Кол-во скачиваний: 36
 
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:05
Рейтинг@Mail.ru


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