Code size analysis#

pw_cobs: Consistent Overhead Byte Stuffing (COBS) codec and zero-copy frame streamer

pw_cobs is designed for small Flash and RAM footprints on microcontrollers.

The table below shows the incremental Flash footprint of:

Label

Segment

Delta

One-shot COBS encode and decode

FLASH

+72

pw::size_report::CobsSizeReport()

+12

pw::internal_result::ResultMembers<>::ResultMembers()

+10

pw::Result<>::Result<>()

NEW

+390

pw::cobs::Streamer::Write()

NEW

+276

pw::cobs::Decoder::ProcessChunk()

NEW

+188

pw::cobs::Encode()

NEW

+98

pw::cobs::Decode()

NEW

+88

pw::cobs::(anonymous namespace)::CopyNonZero()

NEW

+72

pw::cobs::(anonymous namespace)::FindFirstZero()

NEW

+46

std::__2::__min_element[abi:nqn240000]<>()

NEW

+34

pw::cobs::Streamer::Reset()

NEW

+30

pw::cobs::Streamer::Streamer()

NEW

+24

__aeabi_uread4

NEW

+14

std::__2::min[abi:nqn240000]<>()

NEW

+14

std::__2::min_element[abi:nqn240000]<>()

+1,368

In-place EncodeBuffer

FLASH

+108

[section .rodata]

+4

vPortSVCHandler_C

+28

pw::size_report::CobsSizeReport()

+12

pw::internal_result::ResultMembers<>::ResultMembers()

+10

pw::Result<>::Result<>()

+4

__bi_84

NEW

+390

pw::cobs::Streamer::Write()

NEW

+188

pw::cobs::Encode()

NEW

+94

pw::cobs::EncodeInPlace()

NEW

+88

pw::cobs::(anonymous namespace)::CopyNonZero()

NEW

+72

pw::cobs::(anonymous namespace)::FindFirstZero()

NEW

+64

pw::cobs::EncodeBuffer<>::append()

NEW

+46

std::__2::__min_element[abi:nqn240000]<>()

NEW

+34

pw::cobs::Streamer::Reset()

NEW

+32

pw::cobs::EncodeBuffer<>::Encode()

NEW

+32

pw::cobs::EncodeBuffer<>::EncodeBuffer()

NEW

+30

pw::cobs::Streamer::Streamer()

NEW

+24

__aeabi_uread4

NEW

+14

std::__2::min[abi:nqn240000]<>()

NEW

+14

std::__2::min_element[abi:nqn240000]<>()

+1,288

Streaming COBS Decoder

FLASH

+40

pw::size_report::CobsSizeReport()

+12

pw::internal_result::ResultMembers<>::ResultMembers()

+10

pw::Result<>::Result<>()

NEW

+276

pw::cobs::Decoder::ProcessChunk()

NEW

+88

pw::cobs::(anonymous namespace)::CopyNonZero()

NEW

+72

pw::cobs::(anonymous namespace)::FindFirstZero()

NEW

+24

__aeabi_uread4

NEW

+20

pw::cobs::Decoder::Process()

NEW

+10

pw::cobs::Decoder::Clear()

+552

All COBS primitives combined

FLASH

+108

[section .rodata]

+8

vPortSVCHandler_C

+148

pw::size_report::CobsSizeReport()

+12

pw::internal_result::ResultMembers<>::ResultMembers()

+10

pw::Result<>::Result<>()

+4

__bi_84

NEW

+390

pw::cobs::Streamer::Write()

NEW

+276

pw::cobs::Decoder::ProcessChunk()

NEW

+188

pw::cobs::Encode()

NEW

+98

pw::cobs::Decode()

NEW

+94

pw::cobs::EncodeInPlace()

NEW

+88

pw::cobs::(anonymous namespace)::CopyNonZero()

NEW

+72

pw::cobs::(anonymous namespace)::FindFirstZero()

NEW

+64

pw::cobs::EncodeBuffer<>::append()

NEW

+46

std::__2::__min_element[abi:nqn240000]<>()

NEW

+34

pw::cobs::Streamer::Reset()

NEW

+32

pw::cobs::EncodeBuffer<>::Encode()

NEW

+32

pw::cobs::EncodeBuffer<>::EncodeBuffer()

NEW

+30

pw::cobs::Streamer::Streamer()

NEW

+24

__aeabi_uread4

NEW

+20

pw::cobs::Decoder::Process()

NEW

+14

std::__2::min[abi:nqn240000]<>()

NEW

+14

std::__2::min_element[abi:nqn240000]<>()

NEW

+10

pw::cobs::Decoder::Clear()

+1,816