UART, RingBuffer и FreeRTOS. Развлекаемся с приёмом и передачей.

Как применять показанный ранее кольцевой буфер для приёма и передачи информации по UART (и не только) в тасках RTOS.

Постановка задачи следующая: нужно принять по uart некоторое количество пакетов, линия может быть зашумлена и в паузах могут появлятся фантомные байты (которые передатчик не передавал), отделить пакеты от мусора и выполнить какие-то действия, скорость соединения не большая, допустим 115200.

Статья будет являться небольшой демонтрацией для работы с FreeRTOS и тем кольцевым буфером, о котором я однажды писал. А uart здесь каким боком? А таким, что данная заметка будет еще и небольшим туториалом для одного хорошего человека.

Погнали...

Ускоряем вычисления с использованием дробной константы

Небольшая таблица в Exel для быстрого расчета коэффициентов.

Cover Image

Я думаю часто приходилось использовать коэффициенты вроде 0.78, 0.23, 0.87 для корректировки измереных значений АЦП, для последующей обработки, или может где-то ещё, где это значение является константой.

Но что делать если у нас есть требования ко времени выполнения и использовать float кажется слишком дорого?

Keil. Тема редактора кода в стиле Visual Studio Dark.

Небольшая заметка о настройке подсветки синтаксиса и других цветах в редакторе кода keil.

Cover Image

Я думаю многим нарвиться темная тема оформления в Visual Studio. Если вы один из этих людей, то предлагаю посмотреть как быстро реализовать данную расцветку в редакторе keil.

Библиотека CMSIS DSP. Так ли быстр целочисленный квадратный корень?

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

Cover Image

Как-то долго я не обращал внимания на эту библиотеку, но вот насталов время.

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

Для начала проверим, так ли быстр армовский квадратный корень и подходит ли он именно для тех задач, для которые необходимы мне.

Делаем простой и универсальный кольцевой буфер.

Делаем простой кольцевой буфер

Постоянно приходится передавать и принимать данные из/в UART, SPI, I2C и др. Всё просто и понятно когда посылки идут редко и есть время на их обработку, а что же делать если посылки могут идти пачками за один раз, а потом долгое время отсутствовать и мы при обработке первой не успеваем обрабатывать остальные и они теряются или портятся. Значит нужно использовать какой-то буфер, откуда потом понемногу брать и обрабатывать данные, а что делать если мы уже заполнили буфер и нам уже некуда писать? Писать дальше начиная с первого (на самом деле с нулевого) элемента буфера, дополнительно нужно учитывать место с которого можно читать данные и место с которого можно писать. Вот мы и получаем наш кольцевой буфер.