Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Символ Chr(0)

Сообщений 1 страница 9 из 9

1

Добрый день всем. Вопрос похожего плана задавал год назад где то, но ответа не получил. Вот сейчас столкнулся опять... Может за год что то поменялось
Принимаю в порт символы (упрощенная модель)
Getchar:
Symbol = Inkey()                                            'здесь ждем символ
Stroka = Stroka + Symbol
Return

Проблема, если приходит такая последовательность: Chr(&H22) ; Chr(&H20) ; Chr(&H00) ; Chr(&H00) ; Chr(&H03)

то Stroka = Chr(&H22) + Chr(&H20) +  Chr(&H03), т.е. Chr(&H00) ; Chr(&H00) туда не попадают.
Как с этим бороться? Как сделать чтобы нули тоже попадали в переменную?. Спасибо.

0

2

kostr написал(а):

Добрый день всем. Вопрос похожего плана задавал год назад где то, но ответа не получил. Вот сейчас столкнулся опять... Может за год что то поменялосьПринимаю в порт символы (упрощенная модель)Getchar:Symbol = Inkey()                                            'здесь ждем символStroka = Stroka + SymbolReturn
            Проблема, если приходит такая последовательность: Chr(&H22) ; Chr(&H20) ; Chr(&H00) ; Chr(&H00) ; Chr(&H03)
            то Stroka = Chr(&H22) + Chr(&H20) +  Chr(&H03), т.е. Chr(&H00) ; Chr(&H00) туда не попадают.Как с этим бороться? Как сделать чтобы нули тоже попадали в переменную?. Спасибо.

При приеме сразу преобразовывать в число и записывать в массив.

Dim Sym(5) As Byte
Dim a As Byte

......
Getchar:
a = 1
Symbol = Inkey()                                            'здесь ждем символ
numSymbol = Val(Symbol)
Sym(a) = numSymbol
Incr a
If a = 6 Then a = 1
'Stroka = Stroka + Symbol                               ' - Это уже не нужно
Return

Отредактировано Nord (2018-03-30 13:49:17)

0

3

Хорошее решение, спасибо. Но мне потом нужно будет работать с переменной Stroka как со строкой, например выплюнуть в другой порт Print #2 , Stroka.
Я понимаю когда строка из 6-ти символов можно сделать так: Print #2 , Chr(sym(1)) ; Chr(sym(2)) ; Chr(sym(3)) ...
но когда там 512 символов, как быть здесь?

0

4

Bascom - это не VB, в строковых переменных не понимает нули, я на эту тему уже на офф форуме с Марком терки тер, он отказался принимать VB замашки, сказав, что делал как в нормальных языках "нуль - это конец строки".
В общем принимать надо массив байт, а дальше самому обрабатывать в строки (заменяя нули пробелами (как вариант).

0

5

kostr написал(а):

Я понимаю когда строка из 6-ти символов можно сделать так: Print #2 , Chr(sym(1)) ; Chr(sym(2)) ; Chr(sym(3)) ...но когда там 512 символов, как быть здесь?

Использовать другой интерфейс.
Например, I2C, если надо далеко - 1-Wire...

0

6

kostr написал(а):

Проблема, если приходит такая последовательность: Chr(&H22) ; Chr(&H20) ; Chr(&H00) ; Chr(&H00) ; Chr(&H03)

В вашем протоколе есть какой-то изъян, так часто бывает, когда пытаешься воплотить то, что изначально обречено на провал.
Либо надо менять протокол входных данных, либо должно быть понятие о конце строки...

+1

7

RDW написал(а):

kostr написал(а):Проблема, если приходит такая последовательность: Chr(&H22) ; Chr(&H20) ; Chr(&H00) ; Chr(&H00) ; Chr(&H03)

В вашем протоколе есть какой-то изъян

Есть подозрение, что данные отправляются в числовом виде, а принимаются в символьном.

+1

8

Я много уже встречал протоколов, где операции с символами Chr(&H00) имеют место быть, самый яркий пример MQTT.
Но суть я понял, и к этому вопросу возвращаться смысла нет. Всем спасибо.

0

9

В баскоме нуль-терминированные строки. https://ru.wikipedia.org/wiki/Нуль-терм … ная_строка
Нужно работать с байтами, а не строками.

0