Автор |
Съобщение |
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 6:26 pm Мнения: 608
|
Въпрос за Настройка на Сериен порт под стар Линукс
Имам следните настройки на сериен порт под стар Линукс. Сега ми трябва под уиндоус... Мисля че са настройки на стандартен порт. С ехото ще се оправя. Не познавам добре линукса и не съм сигурен дали има нещо специфично. Тук има съкратено описание на- data structure containing terminal information https://www.mkssoftware.com/docs/man5/struct_termios.5.aspИма ли нещо различно от нормалните настройки на ком порта под уиндоус ??? Този код е по разбран ... но не той ми трябва. Възможност за настройки под уиндоудс са ми такива: Разчетох го така ... дано не съм объркал нещата. | | | | Код: options.c_cflag &= ~(HUPCL | CSIZE | PARENB | CRTSCTS); // Hang up connection on last close, ??????? ,No_Parity , Disable hardware flow control, options.c_cflag |= CLOCAL | CREAD | CS8 | CSTOPB; //,Local line - do not change 'owner' of port,Enable receiver,8bit, 2 stop bits (1 otherwise) , options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);// row,Disable echoing of input characters,~Echo erase character as BS-SP-BS,Disable SIGINTR, SIGSUSP, SIGDSUSP, and SIGQUIT signals, options.c_iflag &= ~(IXON | IXOFF | IXANY);//Disable software flow control-out,Disable software flow control-inc,Deny any character to start flow again options.c_oflag &= ~OPOST; //ROW
| | | | |
_________________ Вниманиене съмвишист....ИЙ.
|
Вто Апр 26, 2022 6:38 pm |
|
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 6:26 pm Мнения: 608
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
Имам още един въпрос. Изпращане на команда setbreak се дъни с някой усб конвертори. Ползвал ли е някой изпращане на 0х00 с по нисък бод ???
_________________ Вниманиене съмвишист....ИЙ.
|
Вто Апр 26, 2022 10:47 pm |
|
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 8:59 pm Мнения: 6019 Местоположение: София
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
"Изпращане на команда setbreak се дъни с някой усб конвертори. Ползвал ли е някой изпращане на 0х00 с по нисък бод ???" Нормалните usb2ttl приемат и изпращат на съответните пинове всички EscapeCommFunction: https://docs.microsoft.com/en-us/window ... mmfunctionНо както си забелязал има и такива, които са обикновен микроконтролер с хардуерен ROM който само изпълнява Rx и Tx функциите и то не на всички бодове. Тоест при някой може даже да не можеш да изпратиш и "0х00 с по нисък бод", просто защото ROM-а не подържа напримерно бод 300. Аз даже имам преходник който не подържа USB CDC class: https://en.wikipedia.org/wiki/USB_commu ... vice_class ами информацията я прекарва през Low Speed HID: https://en.wikipedia.org/wiki/USB_human ... vice_class и от там драйвера прави "магията" да изглежда като COM port, но подържа съвсем ниски скорости и чат пат губи някой байт. Та дали ще стане магията с "0х00 с по нисък бод" зависи и от устройството свързано към компютъра за колко милисекунди ниско ниво го отчита като setbreak. "#include <termios.h>" това доколкото виждам не е чист сериен порт, ами е библиотека, която WARP-ва част от функциите на сериния порт и има и собствени терминални функции (емулатор на терминал) "BaudRate:cardinal;" Това доколкото виждам също не е чист сериен порт, ами ми изглежда на компонент за Delphi който WARP-ва WinApi функциите на сериния порт. Ето това е чист Windows COM PORT. Communications Resources: https://docs.microsoft.com/en-us/window ... -resourcesCommPort Example: https://docs.microsoft.com/en-us/window ... s-resource Аз всъщност никъде не видях какво точно питаш т.е. какво имаш като SW и HW, и какво се опитваш да постигнеш.
_________________ Warriors of the Night, ASSEMBLER!!!
|
Сря Апр 27, 2022 12:41 am |
|
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 6:26 pm Мнения: 608
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
Ползвам една стара програма с връзка през сериен порт под линукс . Ще я пренапиша под уиндоус. Мисля че разбрах как са направени настройките на ком порта по линукса. 7,5 милисек. е setbreak-clrbreak-а и ще го направя с изпращане на нула.
_________________ Вниманиене съмвишист....ИЙ.
|
Сря Апр 27, 2022 2:11 pm |
|
|
iss
Ранг: Новодошъл
Регистриран на: Съб Фев 06, 2016 7:29 pm Мнения: 170
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
Като алтернатива препоръчвам: https://www.teuniz.net/RS-232/https://gitlab.com/Teuniz/RS-232Просто за изпозване и работи стабилно.
|
Сря Апр 27, 2022 7:51 pm |
|
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 6:26 pm Мнения: 608
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
Имам проблеми с получаването и изпращането на данните . Трябват ми точно получени байтове с проверка. Всичко върви ОК когато броя байтовете съвпадат. Но когато искам да се застраховам , от неочаквани проблеми нещата се омазват. Ако дойдат по малко на брой байтове ... функцията си ги чака и зависва докато не дойдат. Настройките на Кома TimeoutRead и TimeoutWrite в Борланда не мога да разбера как действат и по точно как да ги използвам. Трябва ми някакво подобно решение ??? Има ли друг начин или по компактен код, без да ползвам таймер.
_________________ Вниманиене съмвишист....ИЙ.
|
Вто Май 03, 2022 2:23 pm |
|
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 8:39 pm Мнения: 1968
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
Това https://docs.microsoft.com/en-us/window ... ronous-i-o ще ти помогне. п.п. Винаги съм пускал комуникациите в отделна(и) нишка(и).
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!
|
Вто Май 03, 2022 3:56 pm |
|
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 6:26 pm Мнения: 608
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
Няма шанс ... така ще се омотам!!! Не им разбирам на Tread.
_________________ Вниманиене съмвишист....ИЙ.
|
Вто Май 03, 2022 4:13 pm |
|
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 8:39 pm Мнения: 1968
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
Не е толкова сложно. Представи една нишка като една цяла програма. Пускаш един цикъл вътре да следи комуникацията и чакаш да ти се съберат необходимите данни. През това време основната програма си работи и не се усеща, че някъде нещо е в blocking state. Ето съвсем елементарен псевдокод: Ако няма достатъчно данни основната ти програма няма да висне.
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!
|
Вто Май 03, 2022 5:03 pm |
|
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 6:26 pm Мнения: 608
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
Имам един проблем компилатора на Borland с който ударих на камък. TForm::Serial_send_cmd( int cmd, const void *data, int len_ght) {
unsigned char buf[len+5]; //Трябва ми точно така за да мога да си подредя след това командата buf[0] = BEL; / 0x07 buf[1] = (len_ght + 1) & 0xFFU; buf[2] = cmd; ........ }
const void *data - *data трябва да сочи към / const unsigned char / навсякъде съм дефинирал data като const void. data не трябва да се променя. вътре при всяко извикване на Serial_send_cmd си правя unsigned char buf[]; Трябва да си подредя синтаксиса на командата и да я пратя.
Но така не иска ... unsigned char buf[len_ght+7]; компилатора търси buf[] да бъде const
... приема само unsigned char buf[10];
Успявам да предефинирам data[]; така unsigned char *pbuf = (unsigned char*)data; И така мога да се обръщам към data[]; само през указателя *pbuf .
Как да накарам да приеме unsigned char buf[len_ght+7]; да не иска да е тип константа а да е unsigned char (така изглежда че няма проблем- но не става???). Не знам каква е връзката между това data да е constanta и условието вътрешно създаден unsigned char buf[]; да трябва да бъде константа ... или в случая да няма променлива дължина на масива ... Ако имам представа за проблема вероятно бих до дефинирал по добре.
_________________ Вниманиене съмвишист....ИЙ.
|
Сря Май 04, 2022 11:13 am |
|
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 8:39 pm Мнения: 1968
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!
|
Сря Май 04, 2022 12:43 pm |
|
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 6:26 pm Мнения: 608
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
Проблема е само от стария ми компилатора ... винаги иска при дефиниране масива да е с константа индекс.
_________________ Вниманиене съмвишист....ИЙ.
|
Сря Май 04, 2022 2:05 pm |
|
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 9:16 am Мнения: 1705
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
Защо не си заделиш динамично нужната памет за масива? А защо пък не и с std::vector или някой дериват на борланд.
|
Сря Май 04, 2022 2:16 pm |
|
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 6:26 pm Мнения: 608
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
По принцип стана така unsigned char *buf=new unsigned char[len+5];
и след това трия новия масив delete []buf; не съм писал от години и сега ми е трудно ... не че съм знаел много ... Забравил съм му магариите ... Даже ми връща sizeof(buf) индекс а не бройя елементи . Много е останало от паскала.
_________________ Вниманиене съмвишист....ИЙ.
|
Сря Май 04, 2022 3:21 pm |
|
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 6:26 pm Мнения: 608
|
Re: Въпрос за Настройка на Сериен порт под стар Линукс
Отделих обработката на данните и серийната комуникация на отделен tread. Работи по добре , но не мога да се справя с едни 1mS забавяния по време на предаването на пакетите данни. Вървят по някакви подобни на кермит правила ... примерно данните се разделят по 1024 байта на групи те съответно по 256 байта пакети с данни. През пакет от 256 байта се случват забавяния по време на предаването с около 1mS. По принцип не е фатално, но как да разбера къде е забавянето ... Другия софтуер под линукс върви гладко , но нямаше нужда да го казвам това.
_________________ Вниманиене съмвишист....ИЙ.
|
Пет Май 20, 2022 5:44 am |
|
|