Jump to content
supercelt

Вырианты чтения кольцевого буфера на stm32f4

Recommended Posts

Привет! Скажите, как бы вы читали кольцевой буфер?

Дано: по usart прилетает строка: <\r><\n>+CPIN:READY<\r><\n><\r><\n>OK<\r><\n>

Надо сказать что строки могут быть абсолютно разные, их придётся парсить и заранее что придёт - неизвестно. Но единственное что точно это то что всегда будут разделители <\r> и <\n>, может даже не в том порядке, но будут. Эта строка кидается в кольцевой буфер, из которого надо прочитать. Так вот, при наличии stm32f4 и частоте 166 мгц, будет правильнее читать буфер как только в нём появились любые данные? (то есть просто реагировать что индекс хвоста не равен индексу начала, при этом попытки нахождения нужной подстроки будут происходить при каждом пришедшем символе), ИЛИ лучше отслеживать символ <\n> и только после его появления ставить флаг на чтение? (меньше попыток чтения)

Share this post


Link to post
Share on other sites
21 час назад, supercelt сказал:

ИЛИ лучше отслеживать символ <\n>

вроде как отслеживать какой то символ это тоже чтение с последующим сравнением, поэтому не понятно в чем вы видите проблему - вам все равно надо последовательно прочитать все пришедшие байты что бы найти символ границы(правильно понимаю?) очередного сообщения.


Можно сделать все! Но чем больше можно, тем больше нельзя!

Share this post


Link to post
Share on other sites

Сделай FIFO из указателей на буфера, в каждый буфер пиши строками, обрабатывай так же.

Share this post


Link to post
Share on other sites

Как управлять SiС-транзистором?

Преимущества карбид-кремниевых транзисторов (SiC MOSFET) – высокий КПД, повышенная, по сравнению с биполярными транзисторами с изолированным затвором (IGBT), частота переключения, экономия места на печатной плате. Для управления SiC MOSFET используются специализированные драйверы: как изолированные от транзистора, так и неизолированные. Выбор драйвера и расчет оптимального режима его работы играет ключевую роль в эффективной работе всего устройства на базе SiC MOSFET.

Подробнее

Речь ведь о GSM модеме. Между строками огромный таймаут. По нему и парсить.

Share this post


Link to post
Share on other sites

Новый ХИТ CR123A/SN стабильно в десятку

Новая батарейка имеет наименование для заказа CR123A/SN. Батарейка используется для приложений с повышенными импульсами тока. Широко применяется в охранно-пожарных датчиках, устройствах телеметрии, поисковых маячках, LED-фонарях и других промышленных и бытовых устройствах

Подробнее

1 час назад, Andy-B сказал:

Речь ведь о GSM модеме. Между строками огромный таймаут. По нему и парсить.

Да. Я бы так наверное не рискнул, потому что на низкой скорости тестил модем и видел как наполняется буфер, бывало что пол строки придёт, потом пауза и долетает остальное. И еще пример: кроме того что я отправляю разные команды, и жду ответа, я должен постоянно еще и ловить звонок. Если будет идти звонок и я буду ждать еще ответ и на свой запрос, там это вообще непрерывно будет.... я прав?

Share this post


Link to post
Share on other sites

Сетевой источник питания с расширенным диапазоном входных напряжений на основе VIPER26xK

Питание стационарных устройств чаще осуществляется напряжением 220 В, получаемым от одной фазы трехфазной промышленной сети. Однако существует ряд приложений, которым необходима энергия из всех трех фаз, в т.ч. и в аварийных режимах. Решение этой задачи обычно требует введение в модули питания дополнительных узлов, увеличивающих как их размеры, так и стоимость. Упростить схемы источников питания от трехфазной сети переменного тока либо от других высоковольтных источников, позволяет использование преобразователей с расширенным диапазоном входного напряжения

Подробнее

Можно я свои 5 копеек вставлю? :)

Я бы сделал классический кольцевой буфер . По указателям отслеживал бы наполнение . И парсил бы потом его по заранее известным признакам . По таймауту можно ожидать полной загрузки в буфер сообщения . Если не догрузилось за n время , значит ошибка . 


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites
12 часов назад, artos5 сказал:

Можно я свои 5 копеек вставлю? :)

Я бы сделал классический кольцевой буфер . По указателям отслеживал бы наполнение . И парсил бы потом его по заранее известным признакам . По таймауту можно ожидать полной загрузки в буфер сообщения . Если не догрузилось за n время , значит ошибка . 

ну то есть после каждого пришедшего в буфер символа, мы бы отлавливали что буфер не пустой и шли на поиск строки, да? А не будет ли это накладно, запускать поиск после каждого символа?

Share this post


Link to post
Share on other sites

Отдельная функция, которая запускается по таймеру, время - за которое буфер на максимальной скорости заполняется на 3/4. В функции несколько статических указателей, на начало/конец сообщения, на точку чтения буфера, и на сам буфер. Кода в такой функции мало, и её можно смело поместить в прерывание аппаратного таймера.   При появлении контрольных "\r","\n" - будим функцию парсера, который уже может работать долго.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...