Цитата(en1gma @ Nov 10 2017, 12:41)

есть несколько проблем с 1+Мбс потоками с uart..
Я не знаю про какие тупые устройства Вы говорите, но я например в последнее время почти всегда отлаживаю свои устройства с логом на 921600бод.
Это идёт либо на обычный USB-UART переходник (FTDI, CP2102, ...) либо на COM-порты на PCI-плате.
И каких-то проблем не наблюдаю.
Цитата(en1gma @ Nov 10 2017, 12:41)

драйвера у тупых устройств выкидывают прерывание по условию буфер не полон (ибо буфер маленький) и я упираюсь в скорость обработки прерываний windows (ибо прерывание по каждому символу
Быстрые современные UART как правило имеют довольно приличное FIFO и срабатывание прерываний там можно выставить по определённому уровню. И явно не побайтно.
Вот на компе, с которого я сейчас пишу, стоит PCI-ая COM-мультипортовка на 4 порта, с максимальными скоростями тоже вроде около 10МБит (или выше - не помню уже). В свойствах указано "16C950 High Performance UART".
В настройках портов у неё указан размер FIFO (RX/TX) =128байт. И уровни срабатывания прерываний можно выставить какие угодно.
И я очень сомневаюсь, что устройство на 18 Мбод будет генерить прерывания на каждый символ (с частотой больше 1МГц) и чтобы нельзя было уменьшить эту частоту выставив соответствующий порог в FIFO.
Да и в любом случае, даже если это было бы так, то нагружалась бы система (частыми вызовами ISR), а не задача. Задаче-то какая разница с какой частотой процессор в прерывания дёргается? Вы под виндой с уровня приложения не имеете к этому доступа.
Цитата(en1gma @ Nov 10 2017, 12:41)

как правильно делать, я понимаю: аллоцировать память, складывать туда всё по dma, после окончания передачи и/или по команде пользователя этот массив медленно и верно складывать на накопитель.
Какое DMA? Вы вроде под программирование под виндой рассуждаете.
Правильно напишите поток (
отдельный от потока GUI), который в цикле вызывает WinAPI-шную ReadFile(), которая складывает полученные данные в кольцевой буфер и опять читает ReadFile().
Это и будет ваше DMA.
Для работы с COM-портами нет никакого смысла лезть в дебри написания своих драйверов для винды - штатные вполне нормально работают.