2009-07-29 3 views
5

Как считывать данные из последовательного порта с помощью C? а затем снова передать данные модему? Я использую кабель RS 232 для последовательной связи ...Чтение данных с последовательного порта

+2

Какая операционная система? –

+2

Какое оборудование/платформа? – DaveR

+1

Вам обязательно нужно добавить дополнительную информацию по этому вопросу. – Johan

ответ

2

Прежде всего, это очень зависит от используемой вами ОС.

Для типа * nix вы обычно открываете устройство последовательного порта, например, обычный файл (/ dev/ttyS0), и начинаете читать или записывать его. Что касается окон, я могу посоветовать вам искать надежную библиотеку, потому что окна серийной связи могут стать настоящим кошмаром. Более того, могут существовать некоторые различия между старыми версиями окон и никогда.

Лично, потому что я wxWidgets пользователь, я использую wxCTB. Вы должны искать библиотеку, которая подходит для IDE, которую вы используете.

некоторые бесплатные ссылки;) www.robbayer.com/files/serial-win.pdf www.lookrs232.com/com_port_programming/

+0

Не применимо для встроенных (помечено «встроено»). –

+0

Неправда. Встроенный * обычно * означает Linux или WinCE. –

6

много полезной информации о работе с последовательными портами как на ПК и на конце устройства провода можно найти на сайте Яна Аксельсона для книги Serial Port Complete.

Фактическое взаимодействие с портом будет очень специфичным для платформы. На * nix большинства вкусов вы открываете устройство с именем примерно /dev/ttya и используете read(), write() и ioctl() для чтения, записи и настройки порта.

В Windows, вы открываете файл с именем COM1 (или \\.\COM1 на некоторых ароматизаторах) с функцией CreateFile(), а затем получить его настроен и счастлив с функциями, как SetCommState() и DCB структуры. Детали схожи в общих чертах с тем, что вам нужно делать на * nix, но организованы совершенно по-другому. Вы можете найти полное обсуждение конфигурации и использования COM-портов по адресу MSDN.

На встроенном устройстве вы будете либо напрямую обращаться к аппаратным регистрам UART, либо взаимодействовать с RTOS. В любом случае, по существу, нет способа сделать код на устройстве более широко переносимым.

0

На территории Windows вы можете найти библиотеку, которая делает все волшебство.

Лично я использую Borland C++ для компоновки небольшой утилиты, чтобы говорить с моим оборудованием (загрузчики, конфигурация и тестирование), и я очень доволен TurboPower Async Professional Library, который работает как в Delphi, так и в BCC и является открытым исходным кодом (Mozilla Public License 1.1).

2

Во встроенном мире ваш компилятор будет иметь некоторый механизм (как правило, специфичный для компилятора), который позволяет ему обращаться к аппаратным регистрам, которые используются для реализации функции последовательного порта либо внутри устройства, либо во внешней памяти или IO-сопоставленном устройстве. Эти определения регистров часто предоставляются производителем инструмента или процессора, и тогда это всего лишь случай записи значений управления конфигурацией в регистры последовательного порта, чтобы установить его рабочий режим, а затем считывать данные из регистра регистра приема tje.

Звучит просто, но в списке рассылки MSP-430 Задачами программирования USART являются наиболее распространенные темы.

1

Чтобы расширить ответ на вопрос Яна, типичный встроенный компилятор c будет иметь директиву компилятора или инструкцию, параметры которой управляют параметрами, такими как скорость передачи данных, и которая связывает UART (или другое оборудование ввода-вывода) с потоком. Вы можете указать имя потока (если у вас более одного последовательного порта) или использовать значения по умолчанию. Затем вы можете получить доступ к последовательному порту с обычными процедурами c-символа, и при получении каждого символа будет прерывание. Таким образом, ваша процедура прерывания считывает каждый символ и помещает его в буфер.

Смежные вопросы