Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
Делай более медленую машину - передающей ! 30.05.01 16:39 Число просмотров: 785
Автор: PS <PS> Статус: Elderman
|
Шутка.
Что такое "асинхронный послндовательный канал связи" ?
Не волнуйся, все сохранится в буферах. Когда буфер переполнится, ты просто записать не сможешь. (так в сокетах)
|
<programming>
|
как решить проблемму с перидачей инф через асинхронный послндовательный канал связи 30.05.01 16:02
Автор: ah Статус: Незарегистрированный пользователь
|
как решить проблемму с перидачей инф через асинхронный послндовательный канал связи
я передаю символ потом сразу другой и так далее
ну а если удаленная машина не успеет считать передаваемый символ т.е. на него сразу запишется другой
т.е. машины с разной скоростью (опсолютно с разной)
как решить эту проблемму
|
|
[DOS] 02.06.01 01:47
Автор: + <Mikhail> Статус: Elderman
|
/* Transmitting Machine */
/* Compile options needed: none
*/
#include <stdio.h>
#include <conio.h>
#include <bios.h>
void main(void)
{
unsigned config;
config = (_COM_CHR8|_COM_STOP1|_COM_NOPARITY|_COM_9600);
_bios_serialcom(_COM_INIT,0,config);
while(1)
_bios_serialcom(_COM_SEND,0,(unsigned)getch());
}
/* Receiving Machine */
#include <stdio.h>
#include <conio.h>
#include <bios.h>
void main(void)
{
unsigned config;
unsigned data;
config = (_COM_CHR8|_COM_STOP1|_COM_NOPARITY|_COM_9600);
_bios_serialcom(_COM_INIT,0,config);
while(1)
{
data = 0x0000;
_bios_serialcom(_COM_RECEIVE,0,data);
if (data != 0x0000)
putch((int)data);
}
}
|
|
решить проблему с перeдачей инф ! 02.06.01 01:33
Автор: free Статус: Незарегистрированный пользователь
|
Та машина откуда передается поток данных - сервер.
Кто принимает поток данных, передаваемых сервером - клиенты.
Для того, чтобы наладить общение между сервером и клиентами нужно создать определенный протокол, по которому будет идти это общение.
Т.е. нужна обратная связь.
Обратная связь можно реализовать как угодно.
Например - клиент имеет буффер, в который считывает данные приходящие от сервера; назовем этот буффер - "стеком" (организовать его можно как угодно - дека, очередь, стек).
В случае, если "стек" не может вместить вновь поступившие данные, то у клиента возникает изменение значений флагов, и пусть клиент посылает серверу соответсвующее сообщение - обратная связь.
Это элементарные прописные истины.
Кстати, потокол должен быть с проверкой целостности переданного сообщения ?
.........
Короче, ответ сильно зависит от задачи, которую ты собираешься решить.
что есть приемник - -микросхема? - плата? - эвм? - цифровая? - аналоговая? - что это?
|
| |
приемник это програмируемый контроллер 02.06.01 13:00
Автор: й Статус: Незарегистрированный пользователь
|
й
|
| | |
протокол нужно сочинить 03.06.01 02:24
Автор: free Статус: Незарегистрированный пользователь
|
Я бы сделал так :
взял бы папу для 9-пинового ком. порта.
Припаял бы к папе 2 проводочка, ну скажем на 3й и 2й пины.
- через 3ий пин передаем, со 2ого читаем.
Припаял бы проводок от 3его пина к одному , от 2ого - к другому порту "контроллера".
далее протокол :
Что делает сервер :
>>>>>>состояние init)
шаг 0) посылаю в порт значение, ну скажем 11h ,
шаг 1) жду ответа - ну скажем ответ должен быть 10h
ответ есть :
- да - прочитал из порта 10h : значит контроллер жив и отвечает - переход к состоянию run
- нет - не прочитал 10h из порта - значит либо порт сдох, либо девайс сдох -
- наступил тайм-аут?
- да - переход к состоянию done
- нет - переход к шагу 1
(кстати, о времени - через сколько наступит тайм-аут?).
>>>>>>состояние run)
шаг 0) посылаю в порт очередной байт, переход к шагу 1
шаг 1) - жду ответа , ну скажем, опять 10h: ответ пришел ?
- да - прочитал из порта 10h , переход к шагу 2 :
- нет -
- время ождидания вышло :
- да - переход к состоянию done
- нет - возврат к шагу 1
шаг 2) пользователь :
- напечатал следующий байт
- да? -переход к шагу 3
- нет - переход к шагу 3
шаг 3) введенный байт есть признак окончания работы (скажем, EEh)
- да это ееh- переход в состояние done
- нет
- наступил тайм-аут ?
- да - переход к состоянию done
- нет :
- возврат на шаг 3
- перешли к шагу 0
>>>>>>>cостояние done)
шаг 0) послали в порт значение eeh , переход к шагу 1
шаг 1) ждем ответа - ну скажем ffh
- ответ пришел ?
- да - закрыли приложение
- нет ?
- наступил тайм - аут?
- да - закрыли приложение
- нет - переход к шагу 1
_____________
Клиента напишите самостоятельно?
- ок.
это все очень легко и примитивно и не рационально и имеет недостатки и узкие места.
НО ВЫ ЖЕ ДАЖЕ ДО ТАКОГО САМОСТОЯТЕЛЬНО ДОДУМАТЬСЯ НЕ МОЖЕТЕ !!!!!!!
>8E~~~~~~~~
:-)))))))))))
никого не хочу обидеть.
|
|
как решить проблемму с перидачей инф через асинхронный послндовательный канал связи 31.05.01 02:11
Автор: kabanchik Статус: Незарегистрированный пользователь
|
> как решить проблемму с перидачей инф через асинхронный > послндовательный канал связи > я передаю символ потом сразу другой и так далее > ну а если удаленная машина не успеет считать передаваемый > символ т.е. на него сразу запишется другой > т.е. машины с разной скоростью (опсолютно с разной) > как решить эту проблемму
по правде сказать не представляю такое устройство, чтобы не успело считать.
вопрос: а почему именно посимвольная передача? нельзя ли целым пакетом, т.е. буфером? тогда имеет смысл ввести идентификатор пакета с контрольной суммой, и при успешной передаче, уведомление отправителю.
короче говоря свой мини TCP Connection. а механизм синхронизации можно решить. введешь таймаут, и следующий пакет отправишь когда в течении таймаута получил уведомление об успешной доставке. Ведь на приемнике можно выделить буффер такого размера, чтобы 1 пакет поместился.
|
| |
Та что вы тут мне про TCP IP расказываите и про socket я про ком порт спрашиваю (куда вы мышку суете)!!!! 02.06.01 01:12
Автор: !!!! Статус: Незарегистрированный пользователь
|
111
|
| | |
по больше воображения, начальник :-))) 02.06.01 02:08
Автор: kabanchik Статус: Незарегистрированный пользователь
|
ну во-первых, никто про socket не говорил
во-вторых о споре насчет COM порта и речи идти не может :-)))) человек четко выразился насчет последовательного порта.
в-третьх, я не говорил TCP/IPв буквальном смысле, а всего лишь о его минимальной технологии.
Есть давно испробованные технологии, вот их идеи и надо использовать. или придумать свой, но намного лучше. для данной задачи не стоит велосипед изобретать. есть понятие КПД работы.
|
| | | |
твоя фраза что не стоит велосипед изобретать генеальна. но его всетаки пытаешся изобрести. так как 02.06.01 13:09
Автор: !!!! Статус: Незарегистрированный пользователь
|
так как при передаче какогото значения на удаленный объект в регистре состояния один из битов четко говорит был ли считан символ машмной или нет. и моя проблемма узнать какой это бит.
|
| | | | |
слова не мои. так что ничего гениального 02.06.01 18:09
Автор: kabanchik Статус: Незарегистрированный пользователь
|
> так как при передаче какогото значения на удаленный объект > в регистре состояния один из битов четко говорит был ли > считан символ машмной или нет. и моя проблемма узнать какой > это бит.
по этому поводу, к сожалению, я не могу ничего сказать.
в свое время писал что-то для Passport Reader. если замечал, то на многих паспортах есть машиночитаемая зона. так вот там бали байты конец и начало информации. но никакой гарантии о полноте данных, т. к. протокол составлял не я. такая гарантия может быть контрольная сумма.
а тут, на сколько я понял, ты сам волен составлять свой протокол передачи и получения. я всего лишь предложил одну из моделей.
|
|
Для подтверждения операции зап/чт вызови WaitForSingleObject или GetOverlappetResult 30.05.01 16:53
Автор: WiB Статус: Незарегистрированный пользователь
|
|
| |
а как ето сделать на ASM в досе???? 31.05.01 01:17
Автор: lukash Статус: Незарегистрированный пользователь
|
???
|
| | |
элементарно. 02.06.01 01:40
Автор: free Статус: Незарегистрированный пользователь
|
в ДОС есть такая штука, как прерывания.
после вызова прерывания, в регистрах и флагах, в зависимости от предыдущего состояния регистров и флагов, появляются новые значения.
каков вопрос - таков ответ.
|
| | | |
я вас прошу хватит форум флудить и просто ответить какой бит в реристре состояния отвечает за прием удаленной машиной посланного значения 02.06.01 13:13
Автор: !!!! Статус: Незарегистрированный пользователь
|
я вас прошу хватит форум флудить и просто ответить какой бит в реристре состояния отвечает за прием удаленной машиной посланного значения
|
| | | | |
это не флуд 03.06.01 01:31
Автор: free Статус: Незарегистрированный пользователь
|
> я вас прошу хватит форум флудить и просто ответить какой > бит в реристре состояния отвечает за прием удаленной > машиной посланного значения
Отвечаю : никакой.
Более конкретный ответ:никакимобразомнельзяузнать что творится с приемником.
Для того, чтобы что-то можно было узнать о приемнике необходима обратная связь.
Т.е. приемник должен отвечать на посланный запрос. - что само собой разумеется.
Зачем люди пишут драйвера, вы когда-нибудь задумывались? - а что такое драйвер вообще задумывались?
:(
Попробуй сделать следующее : установи чистый ДОС 6.хх , после чего воткни в ком. порт мышку, затем обрежь кабель (в том месте, где он подходит к мыше).
Сними с хвоста мыши кембрик и оголи контакты, после чего воткни эти контакты в землю. А затем попробуй переслать что-нибудь в этот порт и прочитать что-нибудь из порта- при определенных условиях никакой ошибки не возникнет.
Вот таким макаром можно подключить к компу новый девайс под названием "земля", а также утюг и холодильник.
да?
|
|
Делай более медленую машину - передающей ! 30.05.01 16:39
Автор: PS <PS> Статус: Elderman
|
Шутка.
Что такое "асинхронный послндовательный канал связи" ?
Не волнуйся, все сохранится в буферах. Когда буфер переполнится, ты просто записать не сможешь. (так в сокетах)
|
| |
(ком порт) это совершенно не решает проблеммы, напротив возникает обратная 31.05.01 01:21
Автор: lukash Статус: Незарегистрированный пользователь
|
1
|
| | |
Не понял ! 31.05.01 18:17
Автор: PS <PS> Статус: Elderman
|
Ты хочешь сказать что человек пишет напрямую в порт (как в ДОС), не используя стандартные механизмы, типа сокетов ????
Но при таком подходе ему придеться разработать собственный низкоуровневый протокол передачи даных :( С посылкой пакетов, ответов, контроля и пр.
|
| | | |
Да, и это не так уж и сложно 31.05.01 18:54
Автор: WiB Статус: Незарегистрированный пользователь
|
|
|
|