|
Некорректная запись скорости передачи данных в настройки Serial порта в Linux.
|
|||
---|---|---|---|
#18+
Отлаживал программу, долго и упорно. Данные передаются через раз. И передаются когда использую снифер ком порта. Во всех других случаях программа валится, потому что не получает ответы от устройства. Решил проверить, а какие же настройки у меня падают в СОМ порт. Завёл для этого ещё одну переменную структуры термиос и: Код: plaintext 1. 2.
Локальные переменные Options @0xbfd5e2c4 termios c_cc @0xbfd5e2d5 cc_t[32] c_cflag 7607 tcflag_t c_iflag 260 tcflag_t c_ispeed 4098 speed_t c_lflag 0 tcflag_t c_line 0 cc_t c_oflag 0 tcflag_t c_ospeed 4098 speed_t Options1 @0xbfd5e300 termios c_cc @0xbfd5e311 cc_t[32] c_cflag 7607 tcflag_t c_iflag 260 tcflag_t c_ispeed 4103 speed_t c_lflag 0 tcflag_t c_line 0 cc_t c_oflag 0 tcflag_t c_ospeed 4103 speed_t PortName "/dev/ttyUSB0" char* вопрос: было ли у кого-нибудь такое и как с этим бороться? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2018, 00:12 |
|
Некорректная запись скорости передачи данных в настройки Serial порта в Linux.
|
|||
---|---|---|---|
#18+
Оказывается таких тем в интернете очень много, и ни одной нету ответа. Нашёл решение - костыльное, но решение. Сначала в структуру termios записываю флаги и применяю её (структуру) к дескриптору, а затем прописываю скорости, чётности и остальное. Решил вопрос с нестабильностью получения из serial порта данных. В итоге инициализация порта у меня выглядит так: Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2018, 00:42 |
|
Некорректная запись скорости передачи данных в настройки Serial порта в Linux.
|
|||
---|---|---|---|
#18+
Диалог с самим собой. В этом коде метод "cfmakeraw(&Options);" перезатирает все предыдущие настройки, поэтому его неверно использовать здесь. Как показала практика, ещё необходимо обнулять все флаги, перед тем как в них устанавливать новые значения. Код: plaintext 1. 2. 3. 4.
Возник другой вопрос. Очень медленно передаются данные в последовательный порт. Именно запись медленная. Программа под Windows отрабатывает примерно за 2 минуты, эта "закачивает" данные уже за 15+ минут. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Если убрать вызов очистки выходного буфера " tcdrain(m_hPort);" тогда вообще всё плохо. Есть предложения в чём затык со скоростью может быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2018, 16:20 |
|
Некорректная запись скорости передачи данных в настройки Serial порта в Linux.
|
|||
---|---|---|---|
#18+
ShevgeniyЕсть предложения в чём затык со скоростью может быть? В передаче по одному байту. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2018, 16:50 |
|
Некорректная запись скорости передачи данных в настройки Serial порта в Linux.
|
|||
---|---|---|---|
#18+
Не моя придумка передавать по одному байту. Эта программа для прошивки оборудования. Точно такая же реализация работает прекрасно под Windows. А вот под Linux'ом не хочет работать быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2018, 18:57 |
|
Некорректная запись скорости передачи данных в настройки Serial порта в Linux.
|
|||
---|---|---|---|
#18+
И всё же, что может тормозить процесс передачи данных в COM? При отладке переход на следующий оператор замирает именно в момент записи в порт и заметно долго находится в таком состоянии. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2018, 10:49 |
|
Некорректная запись скорости передачи данных в настройки Serial порта в Linux.
|
|||
---|---|---|---|
#18+
Продолжаю свой диалог с собой: Вопрос с медленной записью решился. Я передавал данные в порт так: Код: plaintext 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.
Ключевой момент. Код: plaintext 1.
переделал Код: plaintext 1.
Я считал, что после записи в порт, необходимо отчистить исходящий буфер, а надо было чистить входящий буфер. И оказалось из-за этого были некоторые тормоза. (Плюс из-за выбора синхронного режима в настройках COM порта). Сделал вот так: открытие порта Код: plaintext 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.
и передача в порт Код: plaintext 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.
теперь работает быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2018, 16:48 |
|
|
start [/forum/topic.php?fid=57&msg=39713831&tid=2017738]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 257ms |
total: | 376ms |
0 / 0 |