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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2008, 20:38   #1
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию запись в порт по-максимуму :)

Доброго времени суток!!
Подскажите, кто может... есть кусок кода...

function Send(s: string) : boolean;
var
BytesWritten : DWord;
d : array[1..1024] of char;
i : integer;
begin
for i := 1 to length(s) do d[i] := s[i];
Send := WriteFile(ComFile, d[1], Length(s), BytesWritten, nil);
end;

эта функция должна записывать то, что пришло ей в качестве параметра, в com-порт... экспериментально было установлено, что при длине строки 1024 символа(байта), переменная BytesWritten принимает значение 512!!
Неужели в порт можно передать только 512 байт??
Спартак вне форума Ответить с цитированием
Старый 12.02.2008, 20:47   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

А по ту сторону порта данные кто-нибудь принимает? Или Вы буфер драйвера на прочность испытываете?
B_N вне форума Ответить с цитированием
Старый 13.02.2008, 05:40   #3
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
А по ту сторону порта данные кто-нибудь принимает? Или Вы буфер драйвера на прочность испытываете?
принимает, но больше, чем 512 байт... при этом то, что отправили фактически(1024 байта) не равно тому, что пришло... читается из порта меньше, чем 1024 байта
Спартак вне форума Ответить с цитированием
Старый 15.02.2008, 22:26   #4
Vald
 
Регистрация: 15.02.2008
Сообщений: 3
По умолчанию

Перед вызовом функции записи в порт необходимо указать размер очереди буфера. Сделать это можно так:
SetupComm(имя идентификатора порта,1024,1024);
затем очистить очередь:
PurgeComm(имя идентификатора порта, PURGE_TXCLEAR|PURGE_RXCLEAR);
это сишные функции , посмотрите как они должны у вас записываться.
Vald вне форума Ответить с цитированием
Старый 16.02.2008, 22:22   #5
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию

Цитата:
Сообщение от Vald Посмотреть сообщение
Перед вызовом функции записи в порт необходимо указать размер очереди буфера. Сделать это можно так:
SetupComm(имя идентификатора порта,1024,1024);
затем очистить очередь:
PurgeComm(имя идентификатора порта, PURGE_TXCLEAR|PURGE_RXCLEAR);
это сишные функции , посмотрите как они должны у вас записываться.
большое спасибо!! помогло
Спартак вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
COM-порт daunito Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 15.01.2009 18:50
запись в порт 70h Makcydrl Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 05.06.2008 16:24
порт ps/2 _Dmitry Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 01.10.2007 21:28
СОМ порт SERG1980 Общие вопросы Delphi 3 17.05.2007 08:06