|
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
|
|
ARM11. Потеря данных при приеме UART-ом18.06.2013, 11:58. Показов 3921. Ответов 10
Метки нет (Все метки)
Для передачи использую интерфейс UART, проц ARM11. Есть входной FIFO глубиной 32.
Ставлю уровень заполнения FIFO и прерывание по этому событию. В прерывании считываю всю FIFO и провожу необходимый мне анализ данных. Обработчик по времени очень короткий. Так вот при передаче пакетов размером примерно до 60 байт все нормально принимается и читается. При передаче пакетов больше 60 байт в буфер FIFO почему-то попадают только первые 60 байт! То есть я их считываю как обычно, а после этого FIFO остается пустой, а куда делись остальные байты??? При чем возможно два сценария: установился флажок OVERRUN либо НЕ установился. В случае OVERRUN я еще могу понять - настолько быстро приходят байты, что даже с коротким обработчиком и глубоким буфером мы их не успеваем забрать. Но что происходит если никаких ошибок не возникало? Как UART "прозевал" последущие байты, почему не появилось новое прерывание по уровню FIFO?
0
|
|
| 18.06.2013, 11:58 | |
|
Ответы с готовыми решениями:
10
Прерывание таймером при приёме и передаче данных через UART STM32F103 UART лишний байт данных при приеме ломает все UART проблема при приеме данных. ATmega128A |
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
| 19.06.2013, 11:38 | |
|
...вопрос слишком общий. Без общей картины сложно определить как работает ваша система, какие нагрузки и т.д.
Но я бы проверил следующее: 1) Приоритеты прерываний UART'а. Поставьте их по-выше, возможно, какое-то другое прерывание забивает вызовы прерываний по УАРТу и таким образом, не дает работать. 2) Отключите парсинг, посчитаете (и выведите) просто количество принятых байт из FIFO. 3) Проверьте по ДШ процессора - нужно ли сбрасывать флаги заполнения FIFO и другие в прерываниях. Возможно, нужно, а вы их не сбрасываете. ЗЫ: ну, и без фрагментов исходников, конкретного названия чипа и других подробностей это просто "гадание на кофейной гуще", сами понимаете. Специфика есть в каждом АРМе.
0
|
|
|
61 / 186 / 31
Регистрация: 14.02.2013
Сообщений: 1,695
|
|
| 19.06.2013, 18:00 | |
|
Может какую нибудь переменную не обнуляешь.
0
|
|
|
487 / 333 / 33
Регистрация: 15.08.2011
Сообщений: 1,078
|
||
| 20.06.2013, 12:04 | ||
Но тогда этот вопрос надо в раздел Linux было отсылать.
0
|
||
|
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
|
||
| 20.06.2013, 12:54 [ТС] | ||
|
На самом деле это не распбери пи. В общем основная идея проблемы: когда прерывание настроено на срабатывание по какому-то уровню заполнения FIFO, то если у нас остаются байты несчитанные меньше уровня срабатывания - мы про это не знаем.
0
|
||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
| 20.06.2013, 13:08 | |
|
0
|
|
|
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
|
||
| 20.06.2013, 13:30 [ТС] | ||
|
Прерывание срабатывает когда, например, буфер FIFO заполнился на половину (этот уровень можно настраивать). Когды мы вышли из обработчика и если нам пришло еще байт меньше чем половина FIFO прерывание не сработает и мы даже не узнаем о том что там что-то есть пока не придет очередной пакет и уровень превысится. Но когда придет следующий пакет, очевидно, это будет уже не актуально.
0
|
||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
| 20.06.2013, 13:44 | |
|
tiger(), да ))). Теперь понял. Просто вам тогда не подходит данный алго. Создайте прерывание по RXNE (по приему каждого символа). и анализируйте на полноту принятого пакета. А прерывание по заполнению FIFO (или еще в DMA есть такое) и не используется для анализа - это дает возможность работать с потоками данных (перенаправлять их через DMA), а не отдельными пакетами.
0
|
|
|
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
|
|
| 20.06.2013, 14:51 [ТС] | |
|
DMA в этом проце невозможно подцепить к уарту, там есть строгая привязка всех каналов DMA к конкретным функциям.
А у меня срабатывание по уровню просто дает меньше прерываний, а значит меньше перегружает процессор.
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 20.06.2013, 15:24 | ||
|
0
|
||
| 20.06.2013, 15:24 | |
|
Помогаю со студенческими работами здесь
11
Потеря части больших данных при приёме через recv какая то черная магия при приеме по UART Ошибка при приёме данных Зависает при приёме больших данных QTcpServer, тормозит при приёме данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|