Постановка задачи следующая: нужно принять по uart
некоторое количество пакетов, линия может быть зашумлена и в паузах могут появлятся фантомные байты (которые передатчик не передавал), отделить пакеты от мусора и выполнить какие-то действия, скорость соединения не большая, допустим 115200
.
Статья будет являться небольшой демонтрацией для работы с FreeRTOS
и тем кольцевым буфером, о котором я однажды писал. А uart
здесь каким боком? А таким, что данная заметка будет еще и небольшим туториалом для одного хорошего человека.
Погнали...
Я думаю часто приходилось использовать коэффициенты вроде 0.78
, 0.23
, 0.87
для корректировки измереных значений АЦП, для последующей обработки, или может где-то ещё, где это значение является константой.
Но что делать если у нас есть требования ко времени выполнения и использовать float
кажется слишком дорого?
Я думаю многим нарвиться темная тема оформления в Visual Studio. Если вы один из этих людей, то предлагаю посмотреть как быстро реализовать данную расцветку в редакторе keil.
Как-то долго я не обращал внимания на эту библиотеку, но вот насталов время.
Там есть куча всяких полезностей, в том числе и быстрых математических функций. И даже вычисление целочисленного квадратного корня. Круто, я смогу отказаться от самописной реализации в пользу той, которую предлагает компания ARM.
Для начала проверим, так ли быстр армовский квадратный корень и подходит ли он именно для тех задач, для которые необходимы мне.
Статья ориентирована на одного моего товарища, вполне перспективного программиста, надеюсь она ему поможет. Если вы не он, закройте страницу тоже можете читать.
Основные вопросы этой заметки:
- как начать разрабатывать ПО для
stm32
в Keil
;
- что для этого необходимо.
Начать необходимо со второго вопроса. Необходимый минимум это среда программирования (Keil
), программатор и отладочная плата. Можно конечно и в симуляторе запускать программу, но это не так инетресно, так что плата и программатор нужны. Где брать писать не буду, не моя это забота.
- Из чего состоит проблема?
- Проблема ли это?
- Как решить этот вопрос?
Проблема проявляется следующим образом.
Несколько буферов настроены на отправку ответа на запрос RTR
. Несколько буферов на приём. Из одного буфера периодически отправляется пакет (обычный пакет данных).
Имеет несколько ситуаций:
- Если мы получали
RTR
запрос и после него решили отправить какие-то данные в простом пакете, то замечаем такую картину - отправляется пакет данных, а за ним отправляется ответ на RTR запрос (хотя никакого запроса сейчас небыло).
- Если мы не получали
RTR
запросов или получили после них просто пакеты данных (в нём не установлен флаг RTR
), то при отправке лишнего пакета не наблюдается.