| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Въпрос за Настройка на Сериен порт под стар Линукс http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=18339 |
Страница 1 от 2 |
| Автор: | RM [ Вто Апр 26, 2022 7:38 pm ] | ||||||||||||||||||||||||||||||||||||
| Заглавие: | Въпрос за Настройка на Сериен порт под стар Линукс | ||||||||||||||||||||||||||||||||||||
Имам следните настройки на сериен порт под стар Линукс. Сега ми трябва под уиндоус... Мисля че са настройки на стандартен порт. С ехото ще се оправя. Не познавам добре линукса и не съм сигурен дали има нещо специфично.
Тук има съкратено описание на- data structure containing terminal information https://www.mkssoftware.com/docs/man5/struct_termios.5.asp Има ли нещо различно от нормалните настройки на ком порта под уиндоус ??? Този код е по разбран ... но не той ми трябва.
Възможност за настройки под уиндоудс са ми такива:
Разчетох го така ... дано не съм объркал нещата.
|
|||||||||||||||||||||||||||||||||||||
| Автор: | RM [ Вто Апр 26, 2022 11:47 pm ] |
| Заглавие: | Re: Въпрос за Настройка на Сериен порт под стар Линукс |
Имам още един въпрос. Изпращане на команда setbreak се дъни с някой усб конвертори. Ползвал ли е някой изпращане на 0х00 с по нисък бод ??? |
|
| Автор: | ike [ Сря Апр 27, 2022 1:41 am ] |
| Заглавие: | 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 ... -resources CommPort Example: https://docs.microsoft.com/en-us/window ... s-resource Аз всъщност никъде не видях какво точно питаш т.е. какво имаш като SW и HW, и какво се опитваш да постигнеш. |
|
| Автор: | RM [ Сря Апр 27, 2022 3:11 pm ] |
| Заглавие: | Re: Въпрос за Настройка на Сериен порт под стар Линукс |
Ползвам една стара програма с връзка през сериен порт под линукс . Ще я пренапиша под уиндоус. Мисля че разбрах как са направени настройките на ком порта по линукса. 7,5 милисек. е setbreak-clrbreak-а и ще го направя с изпращане на нула. |
|
| Автор: | iss [ Сря Апр 27, 2022 8:51 pm ] |
| Заглавие: | Re: Въпрос за Настройка на Сериен порт под стар Линукс |
Като алтернатива препоръчвам: https://www.teuniz.net/RS-232/ https://gitlab.com/Teuniz/RS-232 Просто за изпозване и работи стабилно. |
|
| Автор: | RM [ Вто Май 03, 2022 3:23 pm ] | |||||||||
| Заглавие: | Re: Въпрос за Настройка на Сериен порт под стар Линукс | |||||||||
Имам проблеми с получаването и изпращането на данните . Трябват ми точно получени байтове с проверка. Всичко върви ОК когато броя байтовете съвпадат. Но когато искам да се застраховам , от неочаквани проблеми нещата се омазват. Ако дойдат по малко на брой байтове ... функцията си ги чака и зависва докато не дойдат. Настройките на Кома TimeoutRead и TimeoutWrite в Борланда не мога да разбера как действат и по точно как да ги използвам. Трябва ми някакво подобно решение ??? Има ли друг начин или по компактен код, без да ползвам таймер.
|
||||||||||
| Автор: | syscop [ Вто Май 03, 2022 4:56 pm ] |
| Заглавие: | Re: Въпрос за Настройка на Сериен порт под стар Линукс |
Това https://docs.microsoft.com/en-us/window ... ronous-i-o ще ти помогне. п.п. Винаги съм пускал комуникациите в отделна(и) нишка(и). |
|
| Автор: | RM [ Вто Май 03, 2022 5:13 pm ] | |||||||||
| Заглавие: | Re: Въпрос за Настройка на Сериен порт под стар Линукс | |||||||||
Няма шанс ... така ще се омотам!!! Не им разбирам на Tread. |
||||||||||
| Автор: | syscop [ Вто Май 03, 2022 6:03 pm ] | |||||||||
| Заглавие: | Re: Въпрос за Настройка на Сериен порт под стар Линукс | |||||||||
Не е толкова сложно. Представи една нишка като една цяла програма. Пускаш един цикъл вътре да следи комуникацията и чакаш да ти се съберат необходимите данни. През това време основната програма си работи и не се усеща, че някъде нещо е в blocking state. Ето съвсем елементарен псевдокод:
Ако няма достатъчно данни основната ти програма няма да висне. |
||||||||||
| Автор: | RM [ Сря Май 04, 2022 12:13 pm ] |
| Заглавие: | 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[]; да трябва да бъде константа ... или в случая да няма променлива дължина на масива ... Ако имам представа за проблема вероятно бих до дефинирал по добре. |
|
| Автор: | syscop [ Сря Май 04, 2022 1:43 pm ] |
| Заглавие: | Re: Въпрос за Настройка на Сериен порт под стар Линукс |
https://stackoverflow.com/questions/983 ... const-char |
|
| Автор: | RM [ Сря Май 04, 2022 3:05 pm ] |
| Заглавие: | Re: Въпрос за Настройка на Сериен порт под стар Линукс |
Проблема е само от стария ми компилатора ... винаги иска при дефиниране масива да е с константа индекс. |
|
| Автор: | michev [ Сря Май 04, 2022 3:16 pm ] |
| Заглавие: | Re: Въпрос за Настройка на Сериен порт под стар Линукс |
Защо не си заделиш динамично нужната памет за масива? А защо пък не и с std::vector или някой дериват на борланд. |
|
| Автор: | RM [ Сря Май 04, 2022 4:21 pm ] |
| Заглавие: | Re: Въпрос за Настройка на Сериен порт под стар Линукс |
По принцип стана така unsigned char *buf=new unsigned char[len+5]; и след това трия новия масив delete []buf; не съм писал от години и сега ми е трудно ... не че съм знаел много Много е останало от паскала. |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|