Size: a a a

2018 December 26

BV

Bulat Valeev in ELECTRONIX
Ну типа сделать процесс который в случае если сработал флаг прерывания uart buffer empty загружает в дма указатель  и число передаваемых байт из очереди,(либо всю строку из очереди и передаёт указатель в задаче) , включает dma и ждёт пока не установится флаг uart buffer empty. Так у вас развяжутся потоки данных, (ценой ОЗУ естественно). Либо сделать то же самое через семафор или очередь длиной в 1 элемент. Тогда ртос остановит выполнение процесса с printf, пока очередь не освободится
источник

VS

Vovan Sidorovich in ELECTRONIX
Bulat Valeev
Ну типа сделать процесс который в случае если сработал флаг прерывания uart buffer empty загружает в дма указатель  и число передаваемых байт из очереди,(либо всю строку из очереди и передаёт указатель в задаче) , включает dma и ждёт пока не установится флаг uart buffer empty. Так у вас развяжутся потоки данных, (ценой ОЗУ естественно). Либо сделать то же самое через семафор или очередь длиной в 1 элемент. Тогда ртос остановит выполнение процесса с printf, пока очередь не освободится
а если данных нет долго? как вообще включить УАРТ? Как узнать что сообщение от printf помещено очередь уже полностью а не первый байт?
источник

BV

Bulat Valeev in ELECTRONIX
Если данных не будет то задача которая в дма грузит данные будет всегда в заблокированном состоянии и не будет тратить процессорное время
источник

BV

Bulat Valeev in ELECTRONIX
Как включить уарт - это в гайды по spl и cmsis , я наизусть не помню) вот по поводу очередей есть хороший цикл статей курница. Он как раз вашу проблему примерно как примери рассматривает
источник

VS

Vovan Sidorovich in ELECTRONIX
Bulat Valeev
Если данных не будет то задача которая в дма грузит данные будет всегда в заблокированном состоянии и не будет тратить процессорное время
Так как его влючить то!? Если например в выводе в кольцевой то как определить что это последний?
источник

VS

Vovan Sidorovich in ELECTRONIX
Имя отчесво курница можно?
источник

BV

Bulat Valeev in ELECTRONIX
Андрей
источник

VS

Vovan Sidorovich in ELECTRONIX
Можно с ДМА так. Первый байт размещаю в первый полубуфер, запускаю ДМА, остальные байты во второй полубуфер ДМА. Как толко прерывание проверяю а есть ли что во втором? Но возникает вопрос, а если заполнение второго полубуфера ещё идёт?
источник

BV

Bulat Valeev in ELECTRONIX
Чёт вы что-то сложное замышляете.
источник

VS

Vovan Sidorovich in ELECTRONIX
Bulat Valeev
Чёт вы что-то сложное замышляете.
так RTOS же! Глупо было бы ждать пока printf отработает. Тем более что у меня может пару килобайт выдать.
источник

T

Th0r in ELECTRONIX
Vovan Sidorovich
так RTOS же! Глупо было бы ждать пока printf отработает. Тем более что у меня может пару килобайт выдать.
так а зачем тебе чота думать и кидать данные по отдельности? какие-то проверки, первый байт. сделал задачу, она и выводит все данные, без дополнительных сложностей
источник

VS

Vovan Sidorovich in ELECTRONIX
Th0r
так а зачем тебе чота думать и кидать данные по отдельности? какие-то проверки, первый байт. сделал задачу, она и выводит все данные, без дополнительных сложностей
как он сделал? Вообще непонимаю!
источник

AC

Andrey Chufyrev in ELECTRONIX
Это для целей логирования? В таких случаях обычно не принтф используют
источник

AC

Andrey Chufyrev in ELECTRONIX
Хотя механизмы с буферами и очередями, конечно, остаются
источник

VS

Vovan Sidorovich in ELECTRONIX
Andrey Chufyrev
Хотя механизмы с буферами и очередями, конечно, остаются
Вот в этих механизмах и плаваю.
источник
2018 December 27

EK

Eugene K in ELECTRONIX
Вообще printf() (тем более во внешний порт) и "реальное время" очень не соответствуют друг другу концептуально. Возможно поэтому желаемая тропинка и не заасфальтирована.
источник

S

Sergey in ELECTRONIX
А почему "printf в реальный порт и реальное время" не совместимо? Записал в uart байт и до окончания передачи можно ожидать. И даже если следующий байт уйдет не сразу, то ничего страшного. Или компиляторы пытаются весь результат вывести без разрывов?
У меня была проблема с printf (на нувотоне у меня, похоже, прерывания запрещались на это время - было заметно, при динамической индикации - не победил), поэтому и интересуюсь.
источник

GK

Grigorii Kuzmin in ELECTRONIX
Sergey
А почему "printf в реальный порт и реальное время" не совместимо? Записал в uart байт и до окончания передачи можно ожидать. И даже если следующий байт уйдет не сразу, то ничего страшного. Или компиляторы пытаются весь результат вывести без разрывов?
У меня была проблема с printf (на нувотоне у меня, похоже, прерывания запрещались на это время - было заметно, при динамической индикации - не победил), поэтому и интересуюсь.
Думаю, потому что принтф предназначен для вывода человекочитаемых строк, а человек читает гораздо медленнее чем длится "реальное время"
источник

BV

Bulat Valeev in ELECTRONIX
Sergey
А почему "printf в реальный порт и реальное время" не совместимо? Записал в uart байт и до окончания передачи можно ожидать. И даже если следующий байт уйдет не сразу, то ничего страшного. Или компиляторы пытаются весь результат вывести без разрывов?
У меня была проблема с printf (на нувотоне у меня, похоже, прерывания запрещались на это время - было заметно, при динамической индикации - не победил), поэтому и интересуюсь.
Это безусловно зависит отзадачи. Но тратить процессорное время на ожидание не совсем разумно. Собственно поэтому и используется дма, так как цпересылка байт через него не занимает это время, и у вас может одновременно передаваться лог и выполняться задача
источник

GK

Grigorii Kuzmin in ELECTRONIX
я сколько читаю, так и не понял проблемы
источник