Я работаю над простым стеком протоколов для небольшой встраиваемой системы (многоточечный, тип rs485). В этом стеке бесполезные модели после уровней OSI:
- Применение
- Сеть
- Канал передачи данных
- физический (последовательный драйвер)
У каждого уровня есть своя собственная часть верхнего / нижнего колонтитула, которая обертывает полезную нагрузку слоя над ним.
Я буду использовать свой собственный буферный пул статически распределенных блоков фиксированного размера для хранения двоичных пакетов. (В этом приложении нет malloc / free.)
В других API я видел, что данные обычно передаются как константный указатель с соответствующей длиной. Таким образом, для данных потребуется операция копирования на каждом уровне, поскольку полезная нагрузка уровня выше помещается во вновь выделенный буфер для текущего уровня.
Для трехуровневого стека это будет 2 операции копирования и 3 выделенных буфера.
Есть ли лучший способ сделать это, сохранив при этом чистое разделение уровней протокола?
Чтобы лучше закрепить обсуждение, допустим, что пакеты обычно имеют размер около 2 КБ, а процессор представляет собой небольшой 8-битный микроконтроллер, работающий на частоте 8 МГц.