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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 10.05.2016, 11:50   #11
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
зачем тут применена
Цитата:
If the overlapped operation cannot be completed immediately, the function returns FALSE and the GetLastError function returns ERROR_IO_PENDING, indicating that the operation is executing in the background. When this happens, the system sets the hEvent member of the OVERLAPPED structure to the not-signaled state before WaitCommEvent returns, and then it sets it to the signaled state when one of the specified events or an error occurs. The calling process can use one of the wait functions to determine the event object's state and then use the GetOverlappedResult function to determine the results of the WaitCommEvent operation. GetOverlappedResult reports the success or failure of the operation, and the variable pointed to by the lpEvtMask parameter is set to indicate the event that occurred.

If a process attempts to change the device handle's event mask by using the SetCommMask function while an overlapped WaitCommEvent operation is in progress, WaitCommEvent returns immediately. The variable pointed to by the lpEvtMask parameter is set to zero.
msdn

Цитата:
этот код пойдет для связи с микроконтроллером ?
В общем случае пойдет.
p51x вне форума
Старый 10.05.2016, 12:09   #12
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

вот уже клоун))))) зачем мне твое описание .......

добавил в игнор.

подождем что ответят другие.


зачем тут применена


signal = WaitForSingleObject(overlapped.hEve nt, INFINITE);

если есть


WaitCommEvent(COMport, &mask, &overlapped);

Последний раз редактировалось RAFA91; 10.05.2016 в 12:12.
RAFA91 вне форума
Старый 10.05.2016, 12:33   #13
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вы всерьез думаете, что у них другие функции/документация/винда? Или ждете, что вам переведут и по сто раз повторят?
p51x вне форума
Старый 10.05.2016, 12:35   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это не описание, а офф документация.
если не в состоянии ее осилить, то выкинь компилятор в окно.
там описано и все различия, и зачем и как.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 10.05.2016, 14:05   #15
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

ага. только не то что мне нужно.

___________________________________ ______


столкнулся с такой бедой. может кто-то уже с этим сталкивался.

передаю посылку как-то так.


Код:
  OVERLAPPED Overlap; 

Overlap.hEvent = CreateEvent(NULL, true, true, NULL);

WriteFile(handle, buffer_write, strlen(buffer_write), &numbytes_ok, &Overlap);

WaitForSingleObject(Overlap.hEvent, INFINITE);

в буфере buffer_write 186 символов

если после строки

WaitForSingleObject(Overlap.hEvent, INFINITE);

посмотреть к-во байт в приемном буфере , то их там будет 176.

почему WaitForSingleObject(Overlap.hEvent, INFINITE); не сработало после отправки всех

186 символов ?
RAFA91 вне форума
Старый 10.05.2016, 14:21   #16
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
ага. только не то что мне нужно.
Именно то, что нужно. Можешь читать начнешь, а не просто балаболить?

Код:
OVERLAPPED Overlap;
Структуру нулить надо.

Код:
strlen(buffer_write)
Что в буфере? Стрлен считает до нулевого символа.

Цитата:
посмотреть к-во байт в приемном буфере , то их там будет 176
В каком приемном?

Цитата:
не сработало после отправки всех
Вы учли, что между я все отправил и я все принял проходит время?
p51x вне форума
Старый 10.05.2016, 14:27   #17
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

это кто еще тут балобол ))))))

структура глобальная.

в буфере набор символов.

___________________________________ __________

есть одна интересная штука

1 если к-во передаваемых символов не превышает 14 то все ок.

2 если после

WaitForSingleObject(Overlap.hEvent, INFINITE);

поставить Sleep(1000);

а потом посмотреть к-во принятых байт то все ок.

от скорости передачи нечего не зависит.

приемная и передающая линия замкнута.

_________________________________

наверное буду передавать по одному символу.
RAFA91 вне форума
Старый 10.05.2016, 14:33   #18
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
это кто еще тут балобол ))))))
Обоснуешь? Или опять пук в сторону?

Цитата:
в буфере набор символов.
Еще б сказал байтов. Конкретно приводи. Тебя про 0 спрашивали, если ты опять не читал.

Цитата:
есть одна интересная штука
И это все объясняется
Цитата:
Вы учли, что между я все отправил и я все принял проходит время?
Цитата:
наверное буду передавать по одному символу.
Тпру, зачем так спешить. Давай побитно, с црц и кодами Рида-Маллера...
p51x вне форума
Старый 10.05.2016, 14:40   #19
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

если отправлять строку так

Код:
//---------------------------------------------------------------------------
char *p = buffer_write;

int N = strlen(buffer_write);

int K = 0;
		
while (K < N)
{
	if(!WriteFile(handle, p, 1, &numbytes_ok, &Overlap))
			

		signal = WaitForSingleObject(Overlap.hEvent, INFINITE);

		 if((signal == WAIT_OBJECT_0) && (GetOverlappedResult(handle, &Overlap, &temp, true))) 

			

		 p++; K++;
}
то результат малость в лучшую сторону , но все равно недобор на

несколько байтов.

короче как устранить ?

для особо одаренных



Код:
char buffer_write[] = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111                      22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222";
RAFA91 вне форума
Старый 10.05.2016, 14:45   #20
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Раз вы не понимаете основ асинхронности, таймингов и буферов в системе. Юзайте синхронные версии по одному байту и не парьтесь.

Цитата:
короче как устранить ?
Никак. Нечего устранять.

Цитата:
для особо одаренных
Ты идиота уже из себя строил, больше не интересно.
p51x вне форума
Закрытая тема


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с COM портом ferrum88 Общие вопросы Delphi 17 30.09.2011 12:53
Работа с COM-портом Georgios Общие вопросы Delphi 12 28.09.2010 10:31
Работа с com портом Speeker Общие вопросы Delphi 1 06.09.2010 19:37
работа с com-портом larry Visual C++ 6 12.08.2010 16:21
работа с портом Assemblerru Win Api 16 10.06.2010 20:00