micropython / micropython/micropython
RingIO is limited to 64kB
Nobody has claimed this yet.
- Dominant language
- C
- Stars
- 22.1k
- Forks
- 9k
- Avg merge
- 6d 4h
- Merged PRs (30d)
- 16
Description
Description
Discussion: https://github.com/micropython/micropython/pull/9458#issuecomment-2581252345
Currently RingIO is limited to creating ring buffers of 64kB by the use of the following uint16_t variables in ringbuf.h:
typedef struct _ringbuf_t {
uint8_t *buf;
uint16_t size;
uint16_t iget;
uint16_t iput;
} ringbuf_t;
The suggestion is to change these to uint32_t to allow for >64kB ringbuffers. This would only be useful in ports with more than 64kB of heap available, so it may be worthwhile having different versions for different ports.
Or maybe the extra 6 bytes is acceptable across all ports for the sake of simplicity/consistency?
I note that other structures (like bytearray) don't have a 64kB limit, so this would seem to be some sort of precedent for changing the limit.
Code Size
This change would add 6 bytes to RAM usage whenever RingIO is invoked
Implementation
I hope the MicroPython maintainers or community will implement this feature
Code of Conduct
Yes, I agree
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in ringbuf.h and trace where ringbuf_t is allocated and used across the ports. Check how size, iget, and iput are represented and test whether buffers above 64kB work without exceeding port memory constraints; done means larger RingIO buffers are supported while the documented 6-byte RAM impact is addressed.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c
- Domain
- embedded-iot
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100