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