Проблемка при работе с СОМ - портом...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено serge_mok 27 ноября 2006 г. 06:28

написал на РС приложеньеце для работы с RS232, заработало. Решил переиначить на RS485. чтобы переключать приём/передачу пользую сигнал RTS. В результате алгоритм такой: сбрасываю сигнал RTS(настроил аппарат часть на вывод), передаю в слэйв данные,жду окончание передачи, устанавливаю сигнал RTS (настроил аппарат часть на ввод), и соответственно жду данные от слэйва, и т.д.
текст программы :

void CProgressAppDlg::CmComPort()
{
......
EscapeCommFunction(port,CLRRTS);//настроил апп часть на вывод

memset(&ovr,0,sizeof(ovr));
ovr.hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);

WriteFile(port,buf_out,strlen(buf_out),&bc,&ovr);

if(WaitForSingleObject(ovr.hEvent,100)==WAIT_OBJECT_0) {
GetOverlappedResult(port,&ovr,&bc,FALSE);
}
else {
// Обработка ошибки

}

EscapeCommFunction(port,SETRTS);//настроил апп часть на ввод
ReadFile(port,buf_in,strlen(buf_in),&bc,&ovr);

.........
}
либо

void CProgressAppDlg::CmComPort()
{
...............
EscapeCommFunction(port,CLRRTS);//настроил апп часть на вывод

WriteFile(port,buf_out,strlen(buf_out),&bc,0);

EscapeCommFunction(port,SETRTS);//настроил апп часть на ввод
ReadFile(port,buf_in,strlen(buf_in),&bc,0);

.............
}

Инициализацию порта, открытие, и т.д. я опустил..
То бишь, пробовал я в синхронном режиме , пробовал в асинхронном режиме ждать событие конца передачи, а результат всегда один:
если длинна отправляемой посылки меньше 16 байт,то время выполнения ф-ции WriteFile(..) мизерное по отношению ко времени передачи всей посылки, соответственно время сброса сигнала RTS такое же мизерное и передача в аппаратной части завершается так и не успев начаться.Если посылка длиннее 16 байт, то передача идёт, но последние несколько байт всё таки "обрубаются", так как время сброса RTS почти такое как посылка, но немного короче . Пишу на VC++6.0
Вобщем встаёт резонный вопрос , кто виноват и что делать?
Люди добрые поможите кто чем может...можно конечно фиксированную задержку ввести на передачу, но это как то не спортивно...

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
URL изображения: 
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 76:


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание