Как вы далеки от народа! Мне бы не как создать кольцевой буфер, а как разрулить это на уровне ОС. Ну шоб как на большом. print("blablabla") stdout/stderr. И чтобы само забирало и передавало. А не дёргать биты управления UART из майн.
Та там обычный джентельменский набор. Допустим передал printf в кольцевой буфер, семафором там, или как. А если буфер полон? может несколько потоков? Но даже в линуксе вывод както работает. Не говоря уже о нормальных осях.
Та там обычный джентельменский набор. Допустим передал printf в кольцевой буфер, семафором там, или как. А если буфер полон? может несколько потоков? Но даже в линуксе вывод както работает. Не говоря уже о нормальных осях.
как сделаешь так и будет. У меня при переполнении буфера новые сообщения просто отбрасываются
Та не. Передал printf в кольцевой буфер, а дальше что?
я немного по другому сделал. Формируется строка текста и в критической секции запихивается в fifo. Проверяется активность dma (который выгребает байтики из fifo) и если он ничего не делает, то стартует передача.
А как определить что строка уже вся в фифо и ничего другого непредвидится? Или фифо в ДМА не помещается?
в каком смысле как определить? На момент запихивания строки я точно знаю её размер, если в fifo достаточно места, то строка туда запихивается, если нет, то выбрасывается.
Ну сделайте queue, основанную на dma передачу в уарт в таске которая вызывается по прерыванию dma. А вместо printf сделайте обёртку функции которая отправляет данные в очередь. Правда я хз какой тут оверхкд будет. По моей памяти например в contiki os, подобное из коробки идет
Ну сделайте queue, основанную на dma передачу в уарт в таске которая вызывается по прерыванию dma. А вместо printf сделайте обёртку функции которая отправляет данные в очередь. Правда я хз какой тут оверхкд будет. По моей памяти например в contiki os, подобное из коробки идет
Пока решил собирать в кольцевой и запустил таск который проверяет буфер на наличие. А как в ДМА и очередь ещё непонял. В частности непонял как запускать ДМА после окончания вывода printf, как передавать если например printf-ов много и маленьких?