Люди добрые, а подскажите на сколько правильно я использую heapless:pool

и почему ему надо выделять определённый объём памяти, и совсем не тот который кажется нужен если просто посчитать.

Есть у меня rtic::channel размером Один. В него я пишу heapless::String::<21> который по идее занимает 21 раз по u8 плюс len: usize. Usize на моём stm32 это u32, так что выходит ещё 4ре байта. В сумме 25 байт. Вроде всё.

Вот тут пишу в канал: https://github.com/pronvis/drawer-robot/blob/f8310a123b3ba3176f9d4b0b1d85b64e5dd5f39a/src/main.rs#L382
и тут: https://github.com/pronvis/drawer-robot/blob/f8310a123b3ba3176f9d4b0b1d85b64e5dd5f39a/src/display/mod.rs#L102

Тут читаю из канала:
https://github.com/pronvis/drawer-robot/blob/f8310a123b3ba3176f9d4b0b1d85b64e5dd5f39a/src/main.rs#L373
и тут функция print: https://github.com/pronvis/drawer-robot/blob/f8310a123b3ba3176f9d4b0b1d85b64e5dd5f39a/src/display/mod.rs#L61

Дальше я с перерывом в пол секунды пишу в этот канал строку. На другом конце читаю её и вывожу на дисплей.

Вроде всё ок и работает. Но хотелось бы понять на сколько адекватно с точки зрения памяти так делать? Хотелось бы прост из любого места в программе иметь возможность выводить на дисплей, и с каналами это удобно.


Но ещё странный момент - кол-во памяти требуемое пулу чтобы это всё работало.
(оно выделяется тут: https://github.com/pronvis/drawer-robot/blob/f8310a123b3ba3176f9d4b0b1d85b64e5dd5f39a/src/main.rs#L77)

Если у нас есть задержка между отправлениями в пол секунды, то хватает 32 байт в пуле. Если задержки нет, то 96.
И вот этого я совсем не понимаю.
- Канал размером Один.
- Размер сообщения 25 байт
- Памяти нужно 25 *2 (одно сообщение улетело в канал, другое сформировалось и ожидает когда канал опустеет чтобы отправиться)

Откуда взялось 32 и 96? (я их подобрал эмперически)

2 ответов

30 просмотров

» Откуда взялось 32 и 96? даю подсказку, эти числа делятся на 4 вот тут https://github.com/pronvis/drawer-robot/blob/f8310a123b3ba3176f9d4b0b1d85b64e5dd5f39a/src/lib.rs#L29 все выровняется по магинному слову, то есть будет 24 байта, а 4 раза по 24 это 96

Для таких задач bbqueue может подойти чуть лучше

Похожие вопросы

Обсуждают сегодня

Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
14
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Карта сайта