История изменений
Исправление vbr, (текущая версия) :
И как бы решение этой задачи схематически выглядело на Rust?
Сформулирую более понятно, как это работает. Есть ringbuffer, куда добавляются и берутся куски по 32 байта. На эти куски нужно получать указатель в середину (на 5-й байт) и передавать этот указатель в SPI-периферал, куда он будет писать данные. Потом нужно записать в 4-й байт uint32. И потом всё закоммитить и в обратном порядке в другом месте читать и парсить.
Подозреваю, что на Rust я бы сразу и упёрся в реализацию ringbuffer без копирования буферов. На C у него есть 4 операции - alloc + put и get + free, причём все операции разные, к примеру я сначала делаю alloc, потом запускаю SPI, потом в обработчике прерывания делаю put. При парсинге я делаю get, делаю парсинг данных, потом делаю free. Думаю, что раст меня сведёт с ума ещё на этапе alloc + put, разнесённых между несвязанными кусками программы. Там же всё владение идёт лесом. Быстро проглядел 5 реализаций рингбуферов на расте из гугла, нигде ничего подобного нет.
Исправление vbr, :
И как бы решение этой задачи схематически выглядело на Rust?
Сформулирую более понятно, как это работает. Есть ringbuffer, куда добавляются и берутся куски по 32 байта. На эти куски нужно получать указатель в середину (на 5-й байт) и передавать этот указатель в SPI-периферал, куда он будет писать данные. Потом нужно записать в 4-й байт uint32. И потом всё закоммитить и в обратном порядке в другом месте читать и парсить.
Подозреваю, что на Rust я бы сразу и упёрся в реализацию ringbuffer без копирования буферов. На C у него есть 4 операции - alloc + put и get + free, причём все операции разные, к примеру я сначала делаю alloc, потом запускаю SPI, потом в обработчике прерывания делаю put. При парсинге я делаю get, делаю парсинг данных, потом делаю free. Думаю, что раст меня сведёт с ума ещё на этапе alloc + put, разнесённых между несвязанными кусками программы. Там же всё владение идёт лесом. К примеру посмотрел растовый ringbuffer из гугла, там нет такого разделения.
Исправление vbr, :
И как бы решение этой задачи схематически выглядело на Rust?
Сформулирую более понятно, как это работает. Есть ringbuffer, куда добавляются и берутся куски по 32 байта. На эти куски нужно получать указатель в середину (на 5-й байт) и передавать этот указатель в SPI-периферал, куда он будет писать данные. Потом нужно записать в 4-й байт uint32. И потом всё закоммитить и в обратном порядке в другом месте читать и парсить.
Подозреваю, что на Rust я бы сразу и упёрся в реализацию ringbuffer без копирования буферов. На C у него есть 4 операции - alloc + put и get + free, причём все операции разные, к примеру я сначала делаю alloc, потом запускаю SPI, потом в обработчике прерывания делаю put. При парсинге я делаю get, делаю парсинг данных, потом делаю free. Думаю, что раст меня сведёт с ума ещё на этапе alloc + put, разнесённых между несвязанными кусками программы. Там же всё владение идёт лесом. К примеру посмотрел растовый ringbuffer из гугла, вообще не то.
Исправление vbr, :
И как бы решение этой задачи схематически выглядело на Rust?
Сформулирую более понятно, как это работает. Есть ringbuffer, куда добавляются и берутся куски по 32 байта. На эти куски нужно получать указатель в середину (на 5-й байт) и передавать этот указатель в SPI-периферал, куда он будет писать данные. Потом нужно записать в 4-й байт uint32. И потом всё закоммитить и в обратном порядке в другом месте читать и парсить.
Подозреваю, что на Rust я бы сразу и упёрся в реализацию ringbuffer без копирования буферов. На C у него есть 4 операции - alloc + put и get + free, причём все операции разные, к примеру я сначала делаю alloc, потом запускаю SPI, потом в обработчике прерывания делаю put. При парсинге я делаю get, делаю парсинг данных, потом делаю free. Думаю, что раст меня сведёт с ума ещё на этапе alloc + put, разнесённых между несвязанными кусками программы. Там же всё владение идёт лесом.
Исходная версия vbr, :
И как бы решение этой задачи схематически выглядело на Rust?
Сформулирую более понятно, как это работает. Есть ringbuffer, куда добавляются и берутся куски по 32 байта. На эти куски нужно получать указатель в середину (на 5-й байт) и передавать этот указатель в SPI-периферал, куда он будет писать данные. Потом нужно записать в 4-й байт uint32. И потом всё закоммитить и в обратном порядке в другом месте читать и парсить.
Подозреваю, что на Rust я бы сразу и упёрся в реализацию ringbuffer без копирования буферов. На C у него есть 4 операции - alloc + put и get + free, причём все операции разные, к примеру я сначала делаю alloc, потом запускаю SPI, потом делаю put. При парсинге я делаю get, делаю парсинг данны, потом делаю free. Думаю, что раст меня сведёт с ума ещё на этапе alloc + put, разнесённых между несвязанными кусками программы. Там же всё владение идёт лесом.