Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using with double-buffered transmission #94

Open
IndianBoy42 opened this issue Jun 13, 2024 · 1 comment
Open

Using with double-buffered transmission #94

IndianBoy42 opened this issue Jun 13, 2024 · 1 comment

Comments

@IndianBoy42
Copy link

IndianBoy42 commented Jun 13, 2024

So this is a feature request but a bit vague about what exactly the feature would be, I think we have to discuss it.

So basically I want to use this for printing to through the USB CDC interface of my microcontroller. For efficiency, we should use double buffering: so we set up one buffer to send and then continue filling the second buffer.

I have a std::array buffer, then create an emio::span_buffer, then create a emio::writer. when its full/close to full I can do the transmission from the underlying buffer.

The part that is missing is somehow in-place redirecting the writer and span_buffer to point to the other underlying buffer. Both span_buffer and writer have their copy assignment deleted. set_write_area doesn't reassign span_ member so it would be wrong to use it to change the buffer.

I think double buffering is a pretty common technique in embedded systems so it would be nice to support it.

Ultimately I would like the code to look like this:

// Global buffers exist `buffer[0]`
emio::span_buffer span{buffer};
emio::writer w{span};

format_to(w, ...);

flush(w); // Starts a transmission with the current buffer, writer now points to buffer[1]

format_to(w, ...);

The simplest solution might be that we get a writer.set_buffer() method

@Viatorus
Copy link
Owner

I use technics like double buffering myself. For that, I implemented a custom buffer which manages the two arrays internal and is linked to an output device (USB/UART).

I think, switching the buffers at writer/formatter level isn't an ideal abstraction.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants