Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 02.04.2017, 03:45  
H4LF
Вид на жительство
 
Аватар для H4LF
 
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
H4LF на пути к лучшему
По умолчанию 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.
H4LF вне форума  
Непрочитано 02.04.2017, 08:31  
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,038
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Глюк приёма данных по USART

Ваши последовательности символов нельзя называть строками как типом данных, т. к. в них отсутствует символ окончания строки '\0' - если бы он был, то определение конца строки было бы тривиальным.
Хотя можно "ловить" 4 запятые подряд - это будет окончание содержательной части потока символов.

Последний раз редактировалось dgrishin; 02.04.2017 в 08:36.
dgrishin вне форума  
Непрочитано 02.04.2017, 13:19  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Глюк приёма данных по USART

Цитата:
Не факт, но легко проверить поставив бряк на i=0; отладчик же есть.
Ставил бряк. i обнуляется, когда буфер заполнился до 31 символа.

Цитата:
Маркеры есть, и начала и конца. Ну читайте же уже TC35i AT Command Set:
Да есть, но они встречаются по 3 раза в ответе. Кроме принятия этой строки, что я описал, мне надо принимать этой же функцией и другие ответы.
В ответе ОК например ‹CR›‹LF› встречаются в начале и в конце.
А в ответе на запрос AT+CSCA? в ответе эти символы будут вначале, в середине и в конце. Причём даже если врубить сокращённый вид ответов, это не поможет ‹CR› всё-равно останется. Я бы хотел исходить из условий, что строка может быть абсолютно любая, любой длины.

Цитата:
Unsolicited Result Code Presentation
На странице 26 вообще такого нет. Там описание команды ATDI, которая ничего не меняет.
supercelt вне форума  
Непрочитано 02.04.2017, 13:20  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Глюк приёма данных по USART

Сообщение от dgrishin Посмотреть сообщение
Хотя можно "ловить" 4 запятые подряд - это будет окончание содержательной части потока символов.
Это только в данном ответе. Мне надо принимать ещё несколько видов ответов, которые отличаются. Писал выше.
supercelt вне форума  
Непрочитано 02.04.2017, 13:27  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Глюк приёма данных по USART

Сообщение от H4LF Посмотреть сообщение
Я на АВРке делал кольцевой буфер - по одному индексу пишем [только] в прерывании, по другому (их уже может быть несколько, если нужно) читаем и обрабатываем уже не сильно спеша где-то в основной программе, например в главном цикле.
Если я правильно понял, в кольцевом буфере, при его набивке сдвигаются индексы начала и конца, поэтому мы знаем откуда начинать читать и до какого момента. Но а... момент когда уже можно читать-то как определяется? Что посылка зашла в буфер.
supercelt вне форума  
Непрочитано 02.04.2017, 13:52  
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,038
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Глюк приёма данных по USART

Мне кажется что микроконтроллер здесь не при чём - IDLE байт вполне может вставлять сам GSM модем (это значит что скорость данных, которая к нему поступает извне ниже скорости на линии USART и цифра 30 наводит на мысль что у GSM модема внутренний буфер 30 байт).
Чтобы это проверить можно снизить скорость на USART и посмотреть что изменится или если есть осциллограф с функцией декодирования протоколов - глянуть через него.
dgrishin вне форума  
Непрочитано 02.04.2017, 13:58  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Глюк приёма данных по USART

Сообщение от dgrishin Посмотреть сообщение
Мне кажется что микроконтроллер здесь не при чём - IDLE байт вполне может вставлять сам GSM модем (это значит что скорость данных, которая к нему поступает извне ниже скорости на линии USART и цифра 30 наводит на мысль что у GSM модема внутренний буфер 30 байт).
Чтобы это проверить можно снизить скорость на USART и посмотреть что изменится или если есть осциллограф с функцией декодирования протоколов - глянуть через него.
Да ну не)))). Ответы-то портятся рандомно. Правильные всё-таки приходят. Осцилла конечно же нет(. А снижать скорость по принципу 9600 -› 4800 -› 2400? Или снижать путём пробы уменьшения числа на 1 в регистре USARTx-›BRR ?
supercelt вне форума  
Непрочитано 02.04.2017, 14:01  
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,038
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Глюк приёма данных по USART

Сообщение от supercelt Посмотреть сообщение
Правильные всё-таки приходят. Ослилла конечно же нет(. А снижать скорость по принципу 9600 -› 4800 -› 2400? Или снижать путём пробы уменьшения числа на 1 в регистре USARTx-›BRR ?
Надо менять скорость и на модеме - а там наверное только стандартные скорости. Кажется ещё 7200 есть.
dgrishin вне форума  
Непрочитано 02.04.2017, 14:02  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Глюк приёма данных по USART

Сообщение от dgrishin Посмотреть сообщение
Надо менять скорость и на модеме - а там наверное только стандартные скорости. Кажется ещё 7200 есть.
ща попробую
supercelt вне форума  
Непрочитано 02.04.2017, 15:19  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Глюк приёма данных по USART

поменял скорость на 4800, проверял с IDLE. 10 звонков подряд - норм. Потом поменял на 115200. С первого же звонка - накладка (IDLE сработало на 30 символе). Потом поменял как было на 9600. Тут опять рандом. То со 2, то с 1, то с 5 звонка. Потом меняю опять на 4800 - хлоп, на 8 звонке - накладка.
supercelt вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Ускорить компьютер 7Fantomas7 Ремонт оргтехники 111 08.08.2018 05:27
Получение данных по USART Fangir AVR 32 02.12.2014 15:15
Получение данных по USART в CVAVR himik131 Микроконтроллеры, АЦП, память и т.д 6 12.03.2011 00:12
Вопрос по мультипроцессорному обмену USART MEGA8 vikont-s Микроконтроллеры, АЦП, память и т.д 0 10.08.2006 14:55


Часовой пояс GMT +4, время: 02:05.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot