02.04.2017, 03:45
|
|
Вид на жительство
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
|
Re: Глюк приёма данных по USART
Сообщение от supercelt
|
Из чего следует вывод, что IDLE срабатывает почему-то раньше.
|
Не факт, но легко проверить поставив бряк на i=0; отладчик же есть.
Цитата:
|
Увеличил буфер до 254
|
Почему до 254, а не до 253 или 255? Или в самом деле непонятно почему я написал именно 256? Если так нужно 254 или 50, то нужно перед каждой записью в буфер проверять индекс на допустимое значение. Иначе будут сюрпризы если придёт длинная строка и затрёт что-нибудь в памяти.
Цитата:
|
Возникает вопрос, зачем тогда это idle надо, если оно так криво работает.
|
Всё верно - оно надо совсем не для этого. И в другой теме Вам это уже пытались втолковать.
Маркеры есть, и начала и конца. Ну читайте же уже TC35i AT Command Set:
Код:
|
The "AT" or "at" prefix must be set at the beginning of each
command line. To terminate a command line enter ‹CR›.
Commands are usually followed by a response that includes
"‹CR›‹LF›response›‹CR›‹LF›". Throughout this document, only
the responses are presented, ‹CR›‹LF› are omitted intentionally. |
Ну и на странице 26 всё той же TC35i AT Command Set нужно бы почитать это: Unsolicited Result Code Presentation.
Цитата:
|
Но мне кто-то посоветовал сначала набить массив, а потом кромсать его строковыми функциями
|
Вангую, что это был PC'шный программист, но там то памяти много...
Я на АВРке делал кольцевой буфер - по одному индексу пишем [только] в прерывании, по другому (их уже может быть несколько, если нужно) читаем и обрабатываем уже не сильно спеша где-то в основной программе, например в главном цикле.
http://microsin.net/programming/avr/ring-buffer.html
Если собрались (хоть сколько-нибудь) всерьез заниматься программированием, изучайте, пригодится.
UPD: Косяк в программе на 99.99(9). Надеюсь Вы научитесь учиться хотя бы на своих ошибках.
Последний раз редактировалось H4LF; 02.04.2017 в 03:50.
|
|
|
|
02.04.2017, 08:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.02.2013
Сообщений: 1,038
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
|
Re: Глюк приёма данных по USART
Ваши последовательности символов нельзя называть строками как типом данных, т. к. в них отсутствует символ окончания строки '\0' - если бы он был, то определение конца строки было бы тривиальным.
Хотя можно "ловить" 4 запятые подряд - это будет окончание содержательной части потока символов.
Последний раз редактировалось dgrishin; 02.04.2017 в 08:36.
|
|
|
|
02.04.2017, 13:19
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Глюк приёма данных по USART
Цитата:
|
Не факт, но легко проверить поставив бряк на i=0; отладчик же есть.
|
Ставил бряк. i обнуляется, когда буфер заполнился до 31 символа.
Цитата:
|
Маркеры есть, и начала и конца. Ну читайте же уже TC35i AT Command Set:
|
Да есть, но они встречаются по 3 раза в ответе. Кроме принятия этой строки, что я описал, мне надо принимать этой же функцией и другие ответы.
В ответе ОК например ‹CR›‹LF› встречаются в начале и в конце.
А в ответе на запрос AT+CSCA? в ответе эти символы будут вначале, в середине и в конце. Причём даже если врубить сокращённый вид ответов, это не поможет ‹CR› всё-равно останется. Я бы хотел исходить из условий, что строка может быть абсолютно любая, любой длины.
Цитата:
|
Unsolicited Result Code Presentation
|
На странице 26 вообще такого нет. Там описание команды ATDI, которая ничего не меняет.
|
|
|
|
02.04.2017, 13:20
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Глюк приёма данных по USART
Сообщение от dgrishin
|
Хотя можно "ловить" 4 запятые подряд - это будет окончание содержательной части потока символов.
|
Это только в данном ответе. Мне надо принимать ещё несколько видов ответов, которые отличаются. Писал выше.
|
|
|
|
02.04.2017, 13:27
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Глюк приёма данных по USART
Сообщение от H4LF
|
Я на АВРке делал кольцевой буфер - по одному индексу пишем [только] в прерывании, по другому (их уже может быть несколько, если нужно) читаем и обрабатываем уже не сильно спеша где-то в основной программе, например в главном цикле.
|
Если я правильно понял, в кольцевом буфере, при его набивке сдвигаются индексы начала и конца, поэтому мы знаем откуда начинать читать и до какого момента. Но а... момент когда уже можно читать-то как определяется? Что посылка зашла в буфер.
|
|
|
|
02.04.2017, 13:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.02.2013
Сообщений: 1,038
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
|
Re: Глюк приёма данных по USART
Мне кажется что микроконтроллер здесь не при чём - IDLE байт вполне может вставлять сам GSM модем (это значит что скорость данных, которая к нему поступает извне ниже скорости на линии USART и цифра 30 наводит на мысль что у GSM модема внутренний буфер 30 байт).
Чтобы это проверить можно снизить скорость на USART и посмотреть что изменится или если есть осциллограф с функцией декодирования протоколов - глянуть через него.
|
|
|
|
02.04.2017, 13:58
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Глюк приёма данных по USART
Сообщение от dgrishin
|
Мне кажется что микроконтроллер здесь не при чём - IDLE байт вполне может вставлять сам GSM модем (это значит что скорость данных, которая к нему поступает извне ниже скорости на линии USART и цифра 30 наводит на мысль что у GSM модема внутренний буфер 30 байт).
Чтобы это проверить можно снизить скорость на USART и посмотреть что изменится или если есть осциллограф с функцией декодирования протоколов - глянуть через него.
|
Да ну не)))). Ответы-то портятся рандомно. Правильные всё-таки приходят. Осцилла конечно же нет(. А снижать скорость по принципу 9600 -› 4800 -› 2400? Или снижать путём пробы уменьшения числа на 1 в регистре USARTx-›BRR ?
|
|
|
|
02.04.2017, 14:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.02.2013
Сообщений: 1,038
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
|
Re: Глюк приёма данных по USART
Сообщение от supercelt
|
Правильные всё-таки приходят. Ослилла конечно же нет(. А снижать скорость по принципу 9600 -› 4800 -› 2400? Или снижать путём пробы уменьшения числа на 1 в регистре USARTx-›BRR ?
|
Надо менять скорость и на модеме - а там наверное только стандартные скорости. Кажется ещё 7200 есть.
|
|
|
|
02.04.2017, 14:02
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Глюк приёма данных по USART
Сообщение от dgrishin
|
Надо менять скорость и на модеме - а там наверное только стандартные скорости. Кажется ещё 7200 есть.
|
ща попробую
|
|
|
|
02.04.2017, 15:19
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Глюк приёма данных по USART
поменял скорость на 4800, проверял с IDLE. 10 звонков подряд - норм. Потом поменял на 115200. С первого же звонка - накладка (IDLE сработало на 30 символе). Потом поменял как было на 9600. Тут опять рандом. То со 2, то с 1, то с 5 звонка. Потом меняю опять на 4800 - хлоп, на 8 звонке - накладка.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:05.
|
|