Size: a a a

2018 December 29

VS

Vovan Sidorovich in ELECTRONIX
Со своим printf сам знаю как. Надо чтобы нормально. Кажется придумал(или кажется)
источник

AZ

Aleksander Zholtkovskii in ELECTRONIX
а какой ещё printf, "стандартный", использующий putc() ?
Можно извернуться и написать реализацию putc, запоминающую id/pid/... вызывающего процесса и заводящую на каждого свой буфер, который уже скармливается КОМ порту.
Тоже вариант, тоже не идеальный.
Серебрянной пули нет (c)
источник

DS

Dolphin Soft in ELECTRONIX
Vovan Sidorovich
Со своим printf сам знаю как. Надо чтобы нормально. Кажется придумал(или кажется)
sprintf
источник

DS

Dolphin Soft in ELECTRONIX
Vovan Sidorovich
Никаких там основ нет. Типа пользуйтесь готовым.
Повторю вопрос. Есть printf или ещё какая выводилка.
Задача через РТОС вывести в КОМ порт правильно строку произвольной длинны.
Из printf сматывается в кольцевой буфер(очередь).
1. Если буфер заполнен понятно как передать. Но не понятно как усыпить вызывающюю задачу с printf(помним что задач несколько) до окончания предачи того что в буфере, а лучше до освобождения хотя бы одного места в буфере.
2. Если printf вывел меньше буфера, то как узнать что он уже всё вывел и начать передачу?
3. А лучше запускать в момент вывода чтобы и продолжал сматывать в кольцевой буфер и сразу начал передавать передавая упраление другой задаче если вдруг какая пауза(см п1).
Задачь с printf несколько. как разделить порт на уровне вызовов printf понятно(открывать порт).
1. DMA
2. DMA Interrupt
3. Запускать в момент вызова: готовить буфер на отправку с помощью sprintf, конфигурация DMA, старт отправки и выход.
источник

DS

Dolphin Soft in ELECTRONIX
Вобще, что за задача, которая даже не выглядит как задача?
источник

VS

Vovan Sidorovich in ELECTRONIX
А если буфер меньше чем длинна строки?
источник

AZ

Aleksander Zholtkovskii in ELECTRONIX
Vovan Sidorovich
А если буфер меньше чем длинна строки?
Огласите весь список, пожалуйста (c)
источник

VS

Vovan Sidorovich in ELECTRONIX
Переменная длинна, от байта до 10 килобайт. По возможности вывод без пауз между символами.
источник

AZ

Aleksander Zholtkovskii in ELECTRONIX
Vovan Sidorovich
Переменная длинна, от байта до 10 килобайт. По возможности вывод без пауз между символами.
см мой первый вариант
источник

VS

Vovan Sidorovich in ELECTRONIX
Aleksander Zholtkovskii
см мой первый вариант
писать свою printf?
источник

VS

Vovan Sidorovich in ELECTRONIX
там проблема не в printf,  а грамотно разрулить несколько задач что пишут в поток, от 0 до 10000 байт.
источник

AZ

Aleksander Zholtkovskii in ELECTRONIX
Vovan Sidorovich
писать свою printf?
да. Внутри использовать "стандартный" snprintf который делает почти всю работу
источник

AZ

Aleksander Zholtkovskii in ELECTRONIX
Vovan Sidorovich
там проблема не в printf,  а грамотно разрулить несколько задач что пишут в поток, от 0 до 10000 байт.
и чем не устраиват мой вариат? Отлично всё разрулится
источник

VS

Vovan Sidorovich in ELECTRONIX
как стандартный sprintf выведет 100000 байт если буфер 256 к примеру. кусками с указателем?
источник

AZ

Aleksander Zholtkovskii in ELECTRONIX
Vovan Sidorovich
как стандартный sprintf выведет 100000 байт если буфер 256 к примеру. кусками с указателем?
придётся выделять сразу много памяти. Другого варианта нет.
источник

AZ

Aleksander Zholtkovskii in ELECTRONIX
либо править код вызывающий printf, чтобы он так не делал
источник

AZ

Aleksander Zholtkovskii in ELECTRONIX
и о каком буфере речь?
источник

VS

Vovan Sidorovich in ELECTRONIX
Пока что всё у меня уже выводит.
Буфере ДМА.
Но хотелось бы узнать как это сделано в нормальных осях. Линексу там или Виндовс.
источник

AZ

Aleksander Zholtkovskii in ELECTRONIX
Vovan Sidorovich
Пока что всё у меня уже выводит.
Буфере ДМА.
Но хотелось бы узнать как это сделано в нормальных осях. Линексу там или Виндовс.
буфер dma в самом конце "цепочки" и никак не учавствует в "грамотном разруливании потоков строк".
Для больших осей стоит смотреть на разные либы для логирования, их много.
источник

VS

Vovan Sidorovich in ELECTRONIX
Это не логгирование.
источник