![]() |
|
Модераторы: xvr |
![]()
|
|
| theworldcreator |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Вот программка, взятая сдесь же, с форума. Запустил для проверки, и не работает! Проверил вольтметром - некоторый ножки имею напряжение порядка 11 волт(причем как это ни странно вольтметор дает отрицательной напряжение как если бы я "-" с "+" перепутал, но "-" - это 5 ножка, вот распиновка http://www.radiomaster.ru/spravka/papa_mama/com.php)
|
|||
|
||||
| Lohmatii |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
1. А под Рутом прогу запускаешь?
2. Порпробуй вместо "rw" O_RDWR 3. Лучше не надо fprintf для СОМа, во всех примерах что я видел был write. С open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY) write у меня нормально пишет. |
|||
|
||||
| theworldcreator |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Так? Я что то не где не смог найти описание функции write. В таком виде компилятор ругается на необъявленные константы.
|
||||
|
|||||
| Dude03 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.4.2006 Репутация: 1 Всего: 6 |
||||
|
||||
| theworldcreator |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Насколько я понимаю, функция write() языка C и команда набранная в терминале - это разные вещи. На запрос "man write" говорит что это команда для посылки сообщений другим пользователям.
Это сообщение отредактировал(а) theworldcreator - 6.11.2007, 19:32 |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
theworldcreator,
man 2 write -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| theworldcreator |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Извиняюсь, был не прав.
Но ошибки с не объявленными константами остались P.S. Вот полный код:
Добавлено через 3 минуты и 41 секунду Вот вывод ошибок:
Это сообщение отредактировал(а) theworldcreator - 6.11.2007, 21:01 |
||||
|
|||||
| theworldcreator |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Почитав руководства, и книжку по C, переписал немного:
Теперь warning's не выдает, только ошибке о константах:
Добавлено @ 23:39 Если взять константы в кавычки
компилирует без ошибок, но не работает Это сообщение отредактировал(а) theworldcreator - 8.11.2007, 23:43 |
||||||
|
|||||||
| Lohmatii |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
#include <fcntl.h>
#include <termios.h> #include <sys/ioctl.h> в каком-то из этих хедеров все будет |
|||
|
||||
| theworldcreator |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Теперь компилируется без ошибок, но все равно не работает!
|
|||
|
||||
| theworldcreator |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Ура, заработало!
Ключевой была идея(друг посоветовал) засунуть запись единичек в бесконечный цикл, а то вольтметр не успевал снять показания. Хотя результаты оказались несколько странные - уровень изменяется только на ножке номер 3(TxD: входной) При записи 0x00 на ножке появляется примерно 9 вольт, а 0x11 давало примерно 5 вольт. Вот код;
Сейчас начну экспериментировать с чтением. Я так понимаю, чтобы записать на ножку 0(в физическом плане), надо замкнуть ее на ножку ground? |
|||
|
||||
| niccom |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.2.2007 Репутация: нет Всего: нет |
Не нужно ничего замыкать на землю. Организуй лучше петлю связи. RX замкни с TX - затем пиши данные в порт и читай их сразу же. |
|||
|
||||
| theworldcreator |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Замкнул по вашему совету 2 и 3 ножку.
Теперь read возвращает все время(независимо от записываемого значения) �� ����� ���)����E�t1��֍� (кодировка UTF-8) Код программы:
Ошибки возвращаемые компилятором:
Если передать функции printf() параметр &val, компилятор возвращает:
А сама программа: i� |
||||||
|
|||||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
||||
|
||||
| theworldcreator |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Теперь все время возвращает "134514025", не зависимо от записанного в порт значения
Пробовал использовать другие типы переменной val, и записывать/считывать большее количество байт. Тип double и чтение 8 байт выдает все время "1"; тип unsigned long int и чтение 4 байт дает то же "134514025" Имел ввиду:
|
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
А топором ее не пробовал 1. Переменную val рекомендуется инициализировать (например нулем) 2. Убери O_NDELAY из open - у тебя порт открывается в асинхронном режиме, т.е. write возвращается когда реальные данные еще не передались, и соотвественно read'у еще нечего читать. При этом read так же возвращается немедленно (но с ошибкой), ничего не прочтя и не присваивая никаких данных в переданную ему память, т.е. в переменной val у тебя мусор. 3. Почитай какой нибудь букварь по работе с COM портом, там все не так просто :( |
||||
|
|||||
| theworldcreator |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Букварь сейчас поищу.
Теперь(после выполнения ваших, xvr, советов) программка стопорится на чтение(я перед каждым действием поставил вывод на экран, например "Writing...", а после "OK\n") на неопределенный срок(уже минут пять висит). |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
И будет висеть и дальше |
|||
|
||||
| theworldcreator |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Блин, что то ни букваря, ни включения буферизации не могу найти:( Лучшее что обнаружил, это вот это руководство: http://www.opennet.ru/docs/RUS/serial_guide/
И вот этот кусок кода:
Но все равно не смог прочесть значение(( |
|||
|
||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Добавь
так же можно попробовать вернуть O_NDELAY в открытие порта и добавить код
|
||||||||
|
|||||||||
| theworldcreator |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
На строчку
ругается следующим образом
Если ее закоментить, то компилятор молчит, но значение не читает. |
||||
|
|||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
А порт вообще работает (с соединенными ногами 2 и 3)? Попробуй подключиться к нему каким-нибудь терминалом и попечатай - должно быть эхо (в терминале надо выключить аппаратный handshake и эхо). Если работает, то дай текущую версию твоего кода - будем смотреть дальше. |
||||||
|
|||||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Еще попробуй CRTSCTS вместо CNEW_RTSCTS |
||||||
|
|||||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |