Серийный буфер

Кришна
Вторник 3 мая 2016 г. 14:52
Привет,
Я работаю с Maple Mini,
Когда я пытаюсь прочитать данные из серийного.Читать () функция я не могу читать более 64 байта.
Как увеличить размер rxbuffer?

например
/** * @file libmaple/flash.c * @brief Flash management functions */ #include #include /** * @brief Set flash wait states * * Note that not all wait states are available on every MCU. See the * Flash programming manual for your MCU for restrictions on the * allowed value of wait_states for a given system clock (SYSCLK) * frequency. * * @param wait_states number of wait states (one of * FLASH_WAIT_STATE_0, FLASH_WAIT_STATE_1, * ..., FLASH_WAIT_STATE_7). */ void flash_set_latency(uint32 wait_states) { uint32 val = FLASH_BASE->ACR; val &= ~FLASH_ACR_LATENCY; val |= wait_states; FLASH_BASE->ACR = val; }

Grumpyoldpizza
Вторник 3 мая 2016 г., 15:08
Вы можете редактировать ядер/maple/ardwareserial.h и установить serial_rx_buffer_size, чтобы сказать 128 ...

63 связан с буферизацией, которая требует, чтобы одна запись не была занята. Буфер 64 байта всегда будет максимально максимально подняться на 63, буфер 128 байтов в 127 и так далее.

У вас также нет более 63 байтов в приемнике. Дополнительные данные, которые нельзя буферизировать, просто отброшены.

В любом случае, умный разум быстро объясняет, почему 63 байта полученного буфера недостаточно для вашего сценария ?

- Томас

Mrburnette
Вторник 3 мая 2016 г., 17:00
Grumpyoldpizza написал:Вы можете редактировать ядер/maple/ardwareserial.h и установить serial_rx_buffer_size, чтобы сказать 128 ...

Кришна
Ср. 04 мая 2016 г. 8:26 утра
Большое спасибо, Mrburnette,
Спасибо тоже за ответ..

Кришна
Ср. 04 мая 2016 г., 8:27
Спасибо за ответ сварливой.

Кришна
Ср. 04 мая 2016 г. 8:30 утра
В любом случае, умный разум быстро объясняет, почему 63 байта полученного буфера недостаточно для вашего сценария ? 63 байт приемов буфера недостаточно для моего сценария,
Даже 127 байт приемов буфера недостаточно для моего сценария.
любое другое решение?


Спасибо,
Кришна.

Werecatf
Ср. 04 мая 2016 г. 8:37 утра
Кришна написал:63 байт приемов буфера недостаточно для моего сценария,
Даже 127 байт приемов буфера недостаточно для моего сценария.
любое другое решение?

Кришна
Ср. 04 мая 2016 г. 8:55 утра
Спасибо, что за ответ,
У вас также нет более 63 байтов в приемнике. Дополнительные данные, которые нельзя буферизировать, просто отброшены. Но я не могу прочитать более 63 байта данных, как сказал Grumpy.

Werecatf
Ср. 04 мая 2016 г., 10:08
Кришна написал:Но я не могу прочитать более 63 байта данных, как сказал Grumpy.

Rogerclark
Ср. 04 мая 2016 г., 10:09
Кришна написал:Спасибо, что за ответ,


Но я не могу прочитать более 63 байта данных, как сказал Grumpy.

Кришна
Ср. 04 мая 2016 г., 10:52
WereCatf написал:
Теперь, большая проблема здесь заключается в том, что вы не объяснили, что читаете из серийного порта, или что вы планируете делать с ним-скорее всего, есть лучшие способы сделать это в первую очередь
Я просто пытаюсь прочитать данные GPS.

Rogerclark
Ср. 04 мая 2016 г., 11:01
Есть много примеров чтения данных GPS

Вы пробовали тот, что на сайте Arduino

http: // Playground.Ардуино.CC/учебные пособия/GPS

Похоже, он использует буфер с символом 300, в который он считывает gps chars, пока не найдет конечный маркер, в этом случае он обрабатывает данные.

Mrburnette
Ср. 04 мая 2016 г., 11:45
Кришна написал:WereCatf написал:
Теперь, большая проблема здесь заключается в том, что вы не объяснили, что читаете из серийного порта, или что вы планируете делать с ним-скорее всего, есть лучшие способы сделать это в первую очередь
Я просто пытаюсь прочитать данные GPS.

BlueSystems
Сб 11 марта 2017 г., 17:53
Я отмечаю, что на STM32F103 размер серийного буфера, похоже, не вытащится из твердого тела.час.
Это твердое.H редактируется от 64 байтов до 128. В размер буфера серийного порта нет изменений.

Я изменился
C: \ users \ johnston \ documents \ arduino \ arpware \ arduino_stm32-master \ stm32f1 \ cores \ maple \ hardwareserial.час ###################### STM32VLDISCOVERY ######################################## STM32VLDISCOVERY.name=STM32VLDISCOVERY STM32VLDISCOVERY.vid.0=0x1EAF STM32VLDISCOVERY.pid.0=0x0004 STM32VLDISCOVERY.build.variant=STM32VLDISCOVERY STM32VLDISCOVERY.build.vect=VECT_TAB_ADDR=0x8000000 STM32VLDISCOVERY.build.core=maple STM32VLDISCOVERY.build.f_cpu=24000000L STM32VLDISCOVERY.build.board=STM32_VLDISCOVERY STM32VLDISCOVERY.upload.use_1200bps_touch=false STM32VLDISCOVERY.upload.file_type=bin STM32VLDISCOVERY.upload.auto_reset=true STM32VLDISCOVERY.upload.tool=stlink_upload ## STM32_VLDISCOVERY ------------------------- STM32VLDISCOVERY.menu.device_variant.STM32VLDISCOVERY=STM32F100RB (20k RAM. 128k Flash) STM32VLDISCOVERY.menu.device_variant.STM32VLDISCOVERY.build.cpu_flags=-DMCU_STM32F103CB STM32VLDISCOVERY.menu.device_variant.STM32VLDISCOVERY.build.ldscript=ld/jtag.ld STM32VLDISCOVERY.menu.device_variant.STM32VLDISCOVERY.upload.maximum_size=131072 STM32VLDISCOVERY.menu.device_variant.STM32VLDISCOVERY.upload.ram.maximum_size=20480 STM32VLDISCOVERY.menu.device_variant.STM32VLDISCOVERY.upload.flash.maximum_size=131072 #---------------------------- UPLOAD METHODS --------------------------- STM32VLDISCOVERY.menu.upload_method.STLinkMethod=STLink STM32VLDISCOVERY.menu.upload_method.STLinkMethod.upload.protocol=STLink STM32VLDISCOVERYmenu.upload_method.STLinkMethod.upload.tool=stlink_upload STM32VLDISCOVERY.menu.upload_method.STLinkMethod.build.upload_flags=-DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG=1

BlueSystems
Сб 11 марта 2017 г. 18:35
После некоторого копания становятся ясными размерами буфера UART в

C: \ users \ johnston \ documents \ arduino \ arpware \ arduino_stm32-master \ stm32f1 \ system \ libmaple \ include \ libmaple \ usart.час

Изменение файла следующим образом... STM32 ST-LINK CLI v2.1.0 STM32 ST-LINK Command Line Interface ST-LINK SN : ST-Link/V1 on E: ST-LINK Firmware version : V1J11S0 (Need Update) Old ST-LINK firmware detected! Please upgrade it from ST-LINK->'Firmware update' menu. Connected via SWD. Connection mode : Normal. Device ID:0x420 Device flash Size : 128 Kbytes Device family :STM32F100xx Low/Medium density Value Line Loading file... Flash Programming: File : C:\Temp\arduino_build_100163\sketch_feb14a.ino.bin Address : 0x08000000 Flash memory programming... ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± 0% 0%ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ 44%ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ 89%ÛÛÛÛÛÛ 100% Flash memory programmed in 1s and 435ms. Programming Complete. MCU Reset. Application started.

Асмаллри
Солнце 14 января 2018 г. 15:09
Спасибо, Боб, это была отличная помощь. Я не мог найти, как решить эту проблему размера буфера кольца.

Mrburnette
Солнце 14 января 2018 г., 21:33
[Асмаллри - Солнце 14 января 2018 г. 15:09] - Спасибо, Боб, это была отличная помощь. Я не мог найти, как решить эту проблему размера буфера кольца.
Ол Боб не был активным на форуме с момента BlueSystems
Солнце 12 марта 2017 г. 16:14
Хотя целесообразно разбудить старую ветку, чтобы добавить соответствующую информацию, считается плохим манером на форуме, чтобы разбудить долгий сон, просто чтобы сказать: «Спасибо."

Тем не менее, его предложение о расширении серийного буфера будет работать, но не является рекомендуемым «исправлением», поскольку Редактирование основных файлов всегда является последним средством.

Скорее кодер должен реализовать свой отдельный буфер (ы), если размер по умолчанию не является удовлетворительным. Если кто -то взломает в ядре, то все изменения перезаписаны в следующий раз, когда вы обновляете... и при изменении ставок представлены для запросов на притяжение GitHub, которые могут быть часто.

Если вам нужен пример двойного буферизации, леди Ада (Adafruit) имеет пример здесь, в ее анализаторе GPS:

https: // raw.githubusercontent.com/adafr ... it_gps.CPP

Луча

Стивестронг
Солнце 14 января 2018 г. 22:41
Как сказал Рэй, вы не должны менять размер буфера в сердечнике.

Если ваш датчик будет медленно медленным, то я бы порекомендовал прикрепить короткую функцию к прерыванию Systick, которое (каждое 1 мс) будет читать символ из сериала, если он получен, и хранит его в дополнительном более крупном буфере. (ViewTopic.PHP?F = 18&t = 2117)
Таким образом, вам не нужно связываться с основными внутренними органами.

Асмаллри
Пн 15 января 2018 г., 9:12
Спасибо за совет, я точно понимаю, что вы говорите.

К сожалению, это требует модификации ядра, но есть некоторые вещи, такие как возможность указать размер кольцевых буферов, не принадлежат ядро. Должно быть возможно указать размер кольцевого буфера на устройство без необходимости выполнения собственного управления двумя уровнями кольцевых буферов, выполняя ненужный буфер для буферизации копий.

Стивестронг
Пн 15 января 2018 г. 9:23
[Асмаллри - Пн 15 января 2018 г. 9:12] - Должно быть возможно указать размер кольцевого буфера на устройство без необходимости выполнения собственного управления двумя уровнями кольцевых буферов, выполняя ненужный буфер для буферизации копий.
Конечно, это возможно с использованием динамического распределения, но не предпочтительного, поскольку Malloc () может в качестве ведущего ведущий, кроме ожидаемого, увеличить размер сгенерированного бина, также зависящий от версии компилятора и используемых компилятора. Для относительно небольшой оперативной памяти (встроенных систем) динамическое распределение не приносит преимущества, просто увеличивает риск, который применение не удалось.
Это уже обсуждалось и было решено, что будут использоваться определения статического размера.
Было решено, что существуют другие методы (например, предложенные), которые помогают, когда необходим более крупный буфер.

Независимо от того, управляется ли кольцевой буфер или нет, имеет более низкое значение, если у вас в любом случае есть медленные датчики, которые мешают вам получить полученные данные от серийного раздела, что заставляет вас увеличить размер буфера.

Эдогальдо
Пн 15 января 2018 г., 10:12
По моему мнению, есть 2 слабости в текущей реализации последовательного буфера:
  • Размер буфера нелегко настраивать через код (в любом случае его можно изменить на уровне платы на досках.txt persong -dusart_rx_buf_size = xx -dusart_tx_buf_size = yy)
  • Если у вас n серийных устройств (у клена есть 3, а другие имеют больше), у вас будет 2*N Buffers Commandated, даже если вы используете только один сериал или вообще не используете их..
Я думаю, что это проблемы, которые можно решить, чтобы сделать лучшее ядро, одним из вариантов может быть перемещение буферов в файлах вариантов.

Асмаллри
Пн 15 января 2018 г. 16:51
Я не смог найти ссылку на "dusart_rx_buf_size" или "dusart_tx_buf_size" в любом месте, включая общий поиск Google. У вас есть ссылка или пример?

Спасибо, Эндрю

Эдогальдо
Пн 15 января 2018 г., 17:23
[Асмаллри - Пн 15 января 2018 г. 16:51] - Я не смог найти ссылку на "dusart_rx_buf_size" или "dusart_tx_buf_size" в любом месте, включая общий поиск Google. У вас есть ссылка или пример?

Спасибо, Эндрю
В досках.txt вы можете добавить, например, ряд: <board_name>.строить.hs_flag = -dusart_rx_buf_size = 100 -dusart_tx_buf_size = 100
я.эн.: maple_loader v0.1 Resetting to bootloader via DTR pulse Reset via USB Serial Failed! Did you select the right serial port? Searching for DFU device [1EAF:0003]... Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming... Found it! Opening USB Device 0x1eaf:0x0003... Found Runtime: [0x1eaf:0x0003] devnum=1, cfg=0, intf=0, alt=2, name="STM32duino bootloader v1.0 Upload to Flash 0x8002000" Setting Configuration 1... Claiming USB DFU Interface... Setting Alternate Setting ... Determining device status: state = dfuIDLE, status = 0 dfuIDLE, continuing Transfer Size = 0x0800 bytes_per_hash=342 Starting download: [##################################################] finished! state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present Done! Resetting USB to switch back to runtime mode error resetting after download: usb_reset: could not reset device, win error: The device is not connected.

Mrburnette
Пн 15 января 2018 г., 18:51
[Эдогальдо - Пн 15 января 2018 г. 10:12] - <...>
Я думаю, что это проблемы, которые можно решить, чтобы сделать лучшее ядро, одним из вариантов может быть перемещение буферов в файлах вариантов.


Да, доски.Файл TXT может быть изменен для передачи переменной из списка заранее определенных размеров буферов. Кажется немного глупым, ИМХО, так как кто -то все еще может потребоваться размер буфера, не указанный в досках.текст

Люди, которые, честно говоря, нуждаются в изменении размера по умолчанию «должны быть в состоянии исправить проблему, владельца. Я являюсь сторонником того, что пользователи не взломали ядро, поэтому «исправление» действительно должно быть определенным пользователем буфером (опять же, на мой взгляд.) Это решает обеспокоенность по поводу увеличения буфера для отправки, когда должен быть увеличен только буфер приемника ... О, я думаю, доски.Файл TXT может иметь две (2) переменные, одна для TX и одна для RX. Запутанный.

Теперь я считаю, что значения Arduino 64 байта, вероятно, слишком малы для STM32, так как UC имеет более быстрые часы и гораздо больше SRAM. Но по умолчанию по умолчанию ... Нам просто нужно выяснить, соответствуют ли номера BlueSystems, если остаться с 64/64 лучше, потому что это то, что делает Arduino.

Когда мы начинаем тянуть все константы в доски.Файл TXT, очень легко «потерять» фактически развернутую настройку после факта ... Неспособность полностью документировать в примечаниях, какие настройки были фактически выбраны. Arduinoide не проходит во многих фронтах, но метаданные, используемые из всех мягких установок, действительно должны быть добавлены к источнику.INO -файл для целей документации.... или в отдельный файл, насколько я понимаю. Файл существует в текущем каталоге, прочитайте его и установите значения. Файл не существует в текущем каталоге, установите значения по умолчанию.

Может быть, мы должны просто пнуть IDE в задницу и использовать? По крайней мере, такого пути, настройки, которые не являются дефолтами, задокументированы.

Здесь так много умных разработчиков (и я, кроме меня, с тех пор, как я технически никогда не был разработчиком, а один из тех менеджеров Gosh-Darn.) Мы просто не можем сменить ядро ​​или окружающую среду каждый раз, когда кто -то сталкивается с грубым местом. Роджер не может идти в ногу с оттоком.

Почему бы не построить библиотеку, которая позволяет буферизацию любого последовательного порта? По крайней мере, с библиотекой, исходный код автоматически документирует настройки. Предостережение

Луча