реклама на сайте
подробности

 
 
> веерная перетасовка бит в переменной Cortex M0
sherr
сообщение Feb 26 2016, 14:27
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 10-06-06
Из: Ставрополь
Пользователь №: 17 955



Все по той же матрично-светодидной теме ->
Есть 32-битная переменная ,Надо ее преобразовать так (ниже номера бит)
Было:
00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,12,21,22,23,24,25,26
,27,28,29,30,31
Стало:
хх,хх, 00,06,11,16,22,27,01,07,12,17,23,28,02,08,13,18,24,29,03,09,14,19,25,30,04,10,15
,20,26,31

Тактов на все про все не больше 60-70 ...
В лоб занимает > 200, табличный вариант оставил на крайний случай.
Может есть какой-то хитрый метод ?

В принципе задача сводится к пяти преобразованиям типа :
ABCDxxxxxxx,,, в A00000B00000C00000D00000... где A-D это биты,
с последующим суммированием .
ps увы, в системе команд STM32F0 с битовыми операциями не густо
и битбандинга нет wacko.gif

Сообщение отредактировал sherr - Feb 26 2016, 14:34
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Feb 27 2016, 10:10
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(sherr @ Feb 26 2016, 17:27) *
В принципе задача сводится к пяти преобразованиям типа :
ABCDxxxxxxx,,, в A00000B00000C00000D00000... где A-D это биты

Это преобразование можно сделать так:
Код
y = ((x & 0xF) * 0x8421) & 0x41041;

Если умножение за один такт, то может получиться очень интересно.
Go to the top of the page
 
+Quote Post
sherr
сообщение Mar 4 2016, 05:57
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 10-06-06
Из: Ставрополь
Пользователь №: 17 955



А подскажите, как обратное преобразование сделать,
в частности у меня A0000B00000C0000D0000E00000F0000 -> .....000000ABCDEF00 ?
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 4 2016, 07:38
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(sherr @ Mar 4 2016, 08:57) *
А подскажите, как обратное преобразование сделать,
в частности у меня A0000B00000C0000D0000E00000F0000 -> .....000000ABCDEF00 ?

Побитово собирать.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 16:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016