|
|
|
Проблемы с записью данных в порт, открытый с Hardware flow control
|
|||
|---|---|---|---|
|
#18+
Нужно ли выполнять Соединил на своем компе (Linux) ttyS0 и ttyS1 нуль модемным кабелем, открыл оба порта с Hardware flow control в режиме передачи бинарных данных. Написал две маленькие функци: одна отправляет 3 блока данных в порт ttyS0, вторая получает данные из ttyS1 и выводит на экран. В программе вызвал две эти функции последовательно. По идее, ода функция должна отправить 3 блока данных в порт, вторая получить весь этот блок (из 3 маленьких блоков) и вывести на экран. Но почему-то на экран выводится только первый блок данных (из трех), остальные два функция так и не получает. В чем может быть проблема? Функция открытия порта //--------------------------------------------------------------------------- Код: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. функция записи в порт Код: 1. 2. 3. 4. 5. 6. 7. 8. функция чтения из порта Код: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2006, 16:52 |
|
||
|
Проблемы с записью данных в порт, открытый с Hardware flow control
|
|||
|---|---|---|---|
|
#18+
возможно буфера порта не хватает. еще стоит попробовать при чтении (while (block_len_from!=0)) если block_len_from==0, то сделать задержку и попробовать прочитать снова, что бы убедиться, что данные точно не дошли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2006, 18:24 |
|
||
|
Проблемы с записью данных в порт, открытый с Hardware flow control
|
|||
|---|---|---|---|
|
#18+
Кое-что раскопал, но до сих пор не понимаю, почему так происходит. С одного порта в другой отправляю 3 блока данных: 6 байт, 256 байт, 2 байта. Если выполнить подряд 3 отправки, а потом, чтение, то read прочтет только первый блок из 6 байт. Оставшиеся блоки (2) так и не придут, даже если потом много раз выполнять read. НО если между отправками сделать паузу, вроде: write блок 1 com1; sleep(1); //задержка 1 секунда write блок 2 com1; write блок 3 com1; read com2; ТО read читает абсолютно все данные, как и положено, без проблем. Почему такое происходит понять не могу. Есть у кого-нибудь соображения на этот счет прошу высказаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2006, 23:24 |
|
||
|
Проблемы с записью данных в порт, открытый с Hardware flow control
|
|||
|---|---|---|---|
|
#18+
Мое такое :) : Специфика работы ОСи, относиться к этому со снисхождением, и всегда выполнять, хоть какую-то малейшую задержку между отправками. Все равно, для того чтобы ушел первый блок должно пройти некоторое время (хотябы 1/115200*8 сек). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2006, 10:21 |
|
||
|
Проблемы с записью данных в порт, открытый с Hardware flow control
|
|||
|---|---|---|---|
|
#18+
А вы результат write проверяете ? Может они не отправились вовсе ? А еще у вас Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2006, 10:53 |
|
||
|
Проблемы с записью данных в порт, открытый с Hardware flow control
|
|||
|---|---|---|---|
|
#18+
Огроменное спасибо. Проблемы действительно были из-за функции ioctl(handle,TCFLSH,2); Т.к. функции write выполнялись очень быстро, блоки не успевали уйти из порта, а их уже убивали с помощью TCFLUSH следующего write. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2006, 12:56 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34066285&tid=2030247]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 430ms |

| 0 / 0 |
