Я пытаюсь найти способ получить как можно больше из ограниченной памяти в моем микроконтроллере (32 КБ) и ищу предложения или указатели на алгоритм, который выполняет то, что я пытаюсь сделать.
Небольшая предыстория: я отправляю биты в манчестерском кодировании через SPI (последовательный периферийный интерфейс) непосредственно из DMA. Поскольку наименьшая возможная единица, которую я могу хранить в DMA, — это байт (8 бит), мне приходится представлять свои 1 как 0b11110000, а мои 0 — как 0b00001111. В основном это означает, что для каждого бита информации мне нужно использовать байт (8 бит) памяти. Что очень неэффективно.
Если бы я мог уменьшить это так, чтобы мои 1 были представлены как 0b10, а мои 0 как 0b01, мне нужно было бы использовать только 1/4 байта (2 бита) для каждого 1 бита памяти, что хорошо для моего решение.
Вот если бы я мог сохранять в DMA по битам, это не было бы проблемой, но работать конечно нужно с байтами. Итак, я знаю, что решение моей проблемы включает в себя сбор 8 бит (или, в моем случае, 4 2 бита) и последующее сохранение в DMA в виде байта.
Вопросы:
Есть ли стандартный способ решить эту проблему?
Как я могу создать 8-битное число из набора 4 2-битных чисел? Но я хочу не сложения этих цифр, а того, как это выглядит, когда собрано вместе.
Например: у меня есть следующие 4 2-битных числа (имея в виду, что 0b10 представляет 1, а 0b01 представляет 0) (Кроме того, тип, в котором они хранятся, открыт для решения, поскольку, очевидно, существует нет такого понятия, как 2-битный тип)
Число1: 0b01 Число 2: 0b10 Число 3: 0b10 Число4: 0b01
И я хочу создать из них следующее 8-битное число:
8-битный номер: 0b01 10 10 01 или без пробелов 0b01101001 (0x69)
я программирую на с