Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 13:02

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 57 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 10, 2009 09:09 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Попробовал поиграться с СОМ-портом.
В библиотеке ~mak/COMM4.F нашёл COMM_OPEN, COMM-SET, UEMIT,
но не нашёл COMM_CLOSE :(
В результате порт не закрывается, и при следующем подключении байты в него не выдаются
А при первом - выдаются.
Где можно взять красивую библиотеку для СОМ-порта?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 10, 2009 10:04 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
MrYuran писал(а):
Где можно взять красивую библиотеку для СОМ-порта?
...


Красивую не знаю.

Поиск по каталогу \devel на слова com-close и commclose
показывает \devel\~ilya\lib\tm_com.f
\devel\~diver\comm.f

P.S. Возможно ещё есть варианты.
Можно глянуть и в Win32Forth.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 10, 2009 11:07 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
\devel\~pi\lib\comport.f

По умолчанию com порты имеют настройки:
- скорость: 9600
- бит данных: 8
- четность: нет
- стоповые биты: 1

com1 ( -> handle ) - хендл com1 после инициализации
com2 ( -> handle ) - хендл com2 после инициализации
com3 ( -> handle ) - хендл com3 после инициализации
com4 ( -> handle ) - хендл com4 после инициализации

COM1 ( -> flag ) - открывает порт com1
COM2 ( -> flag ) - открывает порт com2
COM3 ( -> flag ) - открывает порт com3
COM4 ( -> flag ) - открывает порт com4
COMClose ( handle -> ior ) - закрыть com порт
COMRead ( addr u handle -> c-addr u ) - читать строку из com в буфер
COMWrite ( c-addr u handle -> ) - записать строку в com порт
COMIn ( handle -- char ) - прием символа из порта
COMOut ( char handle -- ) - передача символа в открытый порт
COMSet ( handle BaudRate ByteSize StopBits Parity -> ior ) - настройка
порта
COMClear ( handle -> ) - очищает очередь приема/передачи в драйвере com порта

Код:
\ Закрыть com порт
: COMClose ( handle -> ior )
   CloseHandle ;

_________________
Меня нет, не будет и не было.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 10, 2009 12:04 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
MrYuran писал(а):
но не нашёл COMM_CLOSE


В Винде компорт представлен как файла.
Хедр компорта COMM_OPEN заносит в переменную COMMid.
Стало-быть закрытие - COMMid CLOSE-FILE

Со стороны контроллера с моей прошивкой информация приходит?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 10, 2009 13:11 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
MrYuran писал(а):
Нужно писать примочку для обмена по очередному самопальному протоколу, и от перспективы рисования окошечек и кнопочек в билдере уже подташнивает...


Можно использовать оконные либы ~yz
Примеры программ работы по "нестандартному" протоколу на SPF4


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июл 22, 2009 13:18 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Посмотрел примеры из девела, всё хорошо, только нужно ещё вручную ногами DTR и RTS махать.
В ВинАПИ это осуществляется функцией EscapeCommFunction().
Насколько я понял, нужно прописать её типа так:
WINAPI: GetCommState KERNEL32.DLL
WINAPI: SetCommState KERNEL32.DLL
WINAPI: SetCommTimeouts KERNEL32.DLL
WINAPI: PurgeComm KERNEL32.DLL
WINAPI: TransmitCommChar KERNEL32.DLL
WINAPI: WaitCommEvent KERNEL32.DLL
WINAPI: GetCommMask KERNEL32.DLL
WINAPI: EscapeCommFunction KERNEL32.DLL
Читаем далее:
Цитата:
Выполняемое действие определяется вторым параметром, который может принимать одно из следующих значений:
CLRDTR Сбрасывает сигнал DTR
CLRRTS Сбрасывает сигнал RTS
SETDTR Устанавливет сигнал DTR
SETRTS Устанавливает сигнал RTS

Насколько я опять же подозреваю, нужно знать значения этих констант, чтобы потом можно было написать что-то вроде
SETDTR EscapeCommFunction
И где их взять?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июл 22, 2009 13:27 
Не в сети
Аватара пользователя

Зарегистрирован: Вс мар 04, 2007 08:02
Сообщения: 229
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
MrYuran писал(а):
И где их взять?



lib/win/const.f


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июл 22, 2009 13:41 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
chu писал(а):
lib/win/const.f

Ага, спасибо!
Щас уже начну что-нибудь сварганивать.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июл 22, 2009 14:00 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
1 CONSTANT SETXOFF
2 CONSTANT SETXON
3 CONSTANT SETRTS
4 CONSTANT CLRRTS
5 CONSTANT SETDTR
6 CONSTANT CLRDTR
8 CONSTANT SETBREAK
9 CONSTANT CLRBREAK

: +DTR ( -- ) SETDTR COMPORT_ID EscapeCommFunction DROP ;
: -DTR ( -- ) CLRDTR COMPORT_ID EscapeCommFunction DROP ;

: +RTS ( -- ) SETRTS COMPORT_ID EscapeCommFunction DROP ;
: -RTS ( -- ) CLRRTS COMPORT_ID EscapeCommFunction DROP ;

: +BREAK ( -- ) SETBREAK COMPORT_ID EscapeCommFunction DROP ;
: -BREAK ( -- ) CLRBREAK COMPORT_ID EscapeCommFunction DROP ;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июл 22, 2009 15:57 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Mihail писал(а):
: +DTR ( -- ) SETDTR COMPORT_ID EscapeCommFunction DROP ;
: -DTR ( -- ) CLRDTR COMPORT_ID EscapeCommFunction DROP ;

Ага, точно, спасибо


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июл 22, 2009 23:21 
Не в сети

Зарегистрирован: Чт ноя 23, 2006 00:44
Сообщения: 494
Откуда: СПб
Благодарил (а): 19 раз.
Поблагодарили: 8 раз.
Kopa писал(а):
MrYuran писал(а):
Нужно писать примочку для обмена по очередному самопальному протоколу, и от перспективы рисования окошечек и кнопочек в билдере уже подташнивает...


Можно использовать оконные либы ~yz

Либа удобная (хорошая дока, проста в понимании), но для более тонких вещей есть прекрасные либы от ~nn
Минусы: почти полное отсутствие доки, чуть сложнее в понимании (ООП)
Плюсы: гибче, легко применяется неФОРТерами GUI в nnCron-е


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 23, 2009 09:29 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
извиняюсь конечно за глупые вопросы :shuffle;
Как кинуть в СОМ-порт значение с вершины стека и N символов тоже со стека?
Применительно к SPF.

Скорее даже не так.
Как обозначается вершина стека данных (адрес)

Сорри, уже нашёл
: COMOut ( char handle -- )
TransmitCommChar DROP ;

Ещё вот придумал:
: COMOutN ( char[] handle N -- )
0 DO DUP COMOut LOOP
DROP ;

Но так символы будут выводиться в обратном порядке.
А как вывести со стека, но в том порядке, в котором их положили?

Кстати... На стеке же 16р числа лежат, а мы выводим чары...
что-то я совсем запутался


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 23, 2009 10:07 
Не в сети
Аватара пользователя

Зарегистрирован: Вс мар 04, 2007 08:02
Сообщения: 229
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
MrYuran писал(а):
Кстати... На стеке же 16р числа лежат, а мы выводим чары...
что-то я совсем запутался


Тривиально:

\ переслать слово (2байта)
: >t ( n -- ) DUP 0xFF AND COMPORT_ID COMOut 8 RSHIFT COMPORT_ID COMOut ;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 23, 2009 12:17 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
MrYuran писал(а):
Ещё вот придумал:
: COMOutN ( char[] handle N -- )
0 DO DUP COMOut LOOP
DROP ;

Хрень какую-то придумал...
Надо так:
: COMOutN ( char[] handle N -- )
0 DO DUP >R COMOut R> LOOP
DROP ;

Хотя на самом деле и так не надо, а надо (с т.з. сишника) завести структуру и кидать её в файл и из


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 23, 2009 12:34 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Mihail,
у вас случайно по BSL никаких наработок нет?
У меня просто прошивка идёт через BSL, туда же привинчен свободный UART (если такой имеется)
Было бы очень удобно из фортовой консоли прошивать и тут же тестировать.

На худой конец, как из-под форта запустить внешние приложения (сделать типа bat-ника на форте)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 57 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB