Я думаю можно попробовать так: 1. пул из N блоков байт одинакового размера; 2. блоки организованы в FIFO; 3. берём из пула первый сводный блок и пишем в него пока он не заполнится; 4. помечаем заполненный блок как готовый к отправке; 5. если DMA не еще включен, отправляем заполненный блок; 6. в прерывании DMA по завершении передачи, если есть блоки готовые к передачи, то передаем их; 7. можно поставить в очередь передачи частично заполненный блок (надо хранить кол-во байт в нем), предусмотреть типа функции flush, которую вызавать в конце пакета, или по таймауту; 8. минимальное кол-во блоков - два.
|