Ребята. Такой вопрос. Принимаю байты через com-порт от микроконтроллера. Каждую строку в программе микроконтроллера завершаю
. В приложении использовал два вида редакторов текста: обычный и расширенный (сделал это для примера, чтобы оба их сравнить в действии). У меня три вопроса:
1. Почему в разных редакторах текста строка принимается по разному (в верхнем - расширенном: правильно, в нижнем: строка делится на две части (на числе 104)). Признак завершения строки в программе после числа 106.
2. Во время прокручивания ползунков текст в редакторе все время смещается в одном из редакторов вверх в другом - вниз. Наверное на это влияет таймер, который постоянно долбит com-порт.
3. Возможно ли реализовать прием байтов без применения таймера. По-моему, мягко говоря, это немного не корректное решение. Но, к сожалению, другого не придумал. Помогите, пожалуйста, по возможности.
P.S. Постоянно с интервалом 1 секунду принимаю данные от контроллера
P.P.S. Файлы в файлообменнике: ha_1.png и OW_Temperature_1.rar
Этот топик читают: Гость
Ответов: 28
Рейтинг: 0
|
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
пример работы редакторов текста
code_12656.txt ------------ Дoбавленo в 01.05: hubble писал(а): Возможно ли реализовать прием байтов без применения таймера. при вызове doRead компонент должен останавливать выполнение программы до того момента, пока данные не поступят в порт. Если они туда поступают все время, то иначе заставить работать программу не возможно. Для более менее корректного чтения я бы использовал такое включение
во всяком случае именна такая логика работы встроена в элементы вкладки KernelChip, читающие из COM порта команды от соответствующих контроллеров. |
|||
карма: 27 |
| ||
файлы: 1 | code_12656.txt [471B] [229] | ||
Голосовали: | Konst |
Ответов: 28
Рейтинг: 0
|
|||
Большое спасибо. Это действительно помогло. Я, правда, немного подкорректировал код. Так, вроде, правильнее.
code_12658.txt Но я заметил, что результат выполнения этого кода и того, который был у меня (но только с таймером, установленным на 1 мсек) очень похож. Я так понимаю, что код, предложенный Вами представляет все-таки БОЛЕЕ КОРРЕКТНОЕ решение? Вопрос по KernelChip. С помощью этого элемента можно работать только с USB-портом? |
|||
карма: 1 |
| ||
файлы: 1 | code_12658.txt [690B] [157] |
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
hubble писал(а): предложенный Вами представляет все-таки БОЛЕЕ КОРРЕКТНОЕ решение?да. Уже хотя бы потому, что с помощью системного таймера не возможно читать данные быстрее чем с частотой 70-80Гц hubble писал(а): Вопрос по KernelChip. С помощью этого элемента можно работать только с USB-портом?элементы данной вкладки работают не с USB портом, а с COM и только с устройством KE-USB24A - он хоть и подключается по USB, но в системе виден как COM устройство |
|||
карма: 27 |
|
Ответов: 3851
Рейтинг: 159
|
|||
hubble, можешь ещё посмотреть сторонний компонент работы с портом в асинхронном режиме http://www.hiasm.com/forum.html?q=3&p=54574#p54574
|
|||
карма: 0 |
|
Ответов: 1328
Рейтинг: 69
|
|||
Андрей., а ты его часто юзаешь, у меня с ним были какието проблемы (уже не помню какие) и я вернулся на родной.
|
|||
карма: 2 |
|
Ответов: 3851
Рейтинг: 159
|
|||
Konst, я его пробовал, когда он только появился - штатный в те времена был немного другим (вроде) и плохо работал в терминале (или у меня не получалось), а этот очень неплохо и почти сразу (без выяснения способов использования)..
|
|||
карма: 0 |
|
Ответов: 1328
Рейтинг: 69
|
|||
Андрей., у меня со штатным тоже проблемы возникают - из 15 номеров 1 неопределяется, caller id fsk номер приходит 1 раз со 2м гудком, наверное неуспеваю считать с порта. Нужно попробовать пример от Dilma.
|
|||
карма: 2 |
|
8