Красиво и эффективно поменять порядок следования бит в байте (0 - 7 на 7 - 0), Си. Какие мысли?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Отправлено
allmaker
27 июля 2004 г. 12:41
Составить ответ
|||
Конференция
|||
Архив
Ответы
никто не сказал про пыки. только асм
—
пьеро
(27.07.2004 20:47,
пустое
,
ссылка
)
Уже недавно обсуждали. Надо просто ножки на порте перекоммутировать и две операции: запись в порт-чтение :-))
—
Крок
(27.07.2004 20:01,
пустое
)
Ответ: а можно и так
—
Andrey190
(27.07.2004 18:23, 609 байт)
Ответ: А разве процессор оговаривался?
—
_VAI
(27.07.2004 18:31,
пустое
)
Ответ: Извиняюсь зациклился на AVR. Да и ниже ответ предложен. А всетаки, можно ли в си двигать с учетом регистра?
—
Andrey190
(27.07.2004 18:36,
пустое
)
Вот алгоритм. Можно упростить для байта (частный случай).
—
Bill
(27.07.2004 14:51, 970 байт)
проще записать 16 сдвигов! реализация этого алгоритма для байта будет длиннее
—
KRS
(27.07.2004 18:03,
пустое
)
Ответ: хер вам в рыло
—
фыфыфыф
(29.04.2005 10:54, 12 байт)
Алексей Мусин уже давал ссылку где это было. Вся соль как раз в строчке "This method is best suited to situations where N is large.", А у нас N=8 ...
—
ShiphT
(27.07.2004 14:55,
пустое
)
Прошу прощения, пропустил :) Но упростить все равно можно.
—
Bill
(27.07.2004 15:07, 317 байт)
А вот для C55xx (+)
—
SM
(27.07.2004 15:41, 506 байт)
Анекдот вспомнился :)
—
?
(27.07.2004 15:50, 1050 байт)
:) Шпингалеты, самовывозом из Нижнего Тагила...
—
Bill
(27.07.2004 17:38,
пустое
)
Увы, для msp430 это промах...
—
ShiphT
(27.07.2004 15:25, 2044 байт)
Наверное, для него проще работать с 16-разрядными данными. :)
—
Bill
(27.07.2004 15:35, 34 байт)
Он просто не умеет нормально сдвигать =)))
—
ShiphT
(27.07.2004 15:37,
пустое
)
Пример для AVR
—
Bill
(27.07.2004 15:15, 1811 байт)
Речь то шла о Си. Напишите более простой код на Си, было бы очень интересно посмотреть.
—
Bill
(27.07.2004 18:58,
пустое
)
Продолжаем упрощать. :-Р
—
Yuriy
(27.07.2004 18:09, 364 байт)
Тут 20 команд! проще в тупую записать 16 команд сдвигов!
—
KRS
(27.07.2004 18:02,
пустое
)
Ответ:
—
да?
(27.07.2004 13:38, 319 байт)
А можно и за два такта...
—
sda
(27.07.2004 13:25,
пустое
)
А можно и за один такт, если (+)
—
SM
(27.07.2004 13:38, 167 байт)
Даже за пол-такта :)) (+)
—
SM
(27.07.2004 13:39, 104 байт)
А вот еще есть МК попроще с реверсом (+)
—
SM
(27.07.2004 13:56, 32 байт)
два такта и восемь проводочков?
—
пьеро
(27.07.2004 13:31,
пустое
)
Все таже старая идея с портами
—
да?
(27.07.2004 13:30,
пустое
)
Ага,незабвенный Орёл оставил:-))
—
sda
(27.07.2004 13:31,
пустое
)
:)))
—
?
(27.07.2004 13:28,
пустое
)
Да я серьёзно,без шуток.
—
sda
(27.07.2004 13:29,
пустое
)
ни разу не сомневаюсь. Это вариант по BE - In/Out :)
—
?
(27.07.2004 13:31,
пустое
)
А можно и соединить SPI и I?C, магический взмах бубном - и байты конвертятся сами (если аврмега) =)))
—
ShiphT
(27.07.2004 14:41,
пустое
)
Ага, еще сопроцессор для этой операции поставь :))
—
SM
(27.07.2004 14:50,
пустое
)
Просили же красивое решение - получайте. В определенном смысле весьма красиво =)))
—
ShiphT
(27.07.2004 14:52,
пустое
)
I2C - почему-то Alt+0178 не передает =(((
—
ShiphT
(27.07.2004 14:42,
пустое
)
По ссылке или в книжке Уоррена "Алгоритмические трюки для программистов"
—
Алексей Мусин
(27.07.2004 12:58,
пустое
,
ссылка
)
Мда, 64х битное умножение и остаток от деления... На контроллере таблицей в 256 байт и быстрее и короче =)))
—
ShiphT
(27.07.2004 13:33,
пустое
)
там, ниже, есть и на сдвигах :)
—
Алексей Мусин
(27.07.2004 13:41,
пустое
)
Это уже предлагалось. Из всех перечисленных там вариантов орудовать тетрадами выгоднее почти всегда.
—
ShiphT
(27.07.2004 13:46,
пустое
,
ссылка
)
Если речь не о PC конечно =)))
—
ShiphT
(27.07.2004 14:02,
пустое
)
как я понял, сдвиги выгодны
—
Алексей Мусин
(27.07.2004 14:31, 71 байт)
Про PowerPC не скажу, а у DSP для этого вообще команда специальная есть.(+)
—
ShiphT
(27.07.2004 14:37, 110 байт)
На DSP они не выгодны (+)
—
SM
(27.07.2004 14:35, 385 байт)
Убедил :) Если буду делать бит-реверс - то так :)
—
Алексей Мусин
(27.07.2004 13:59,
пустое
)
Спасибо, достойная ссылка
—
allmaker
(27.07.2004 13:07,
пустое
)
Вот, пока отвечаешь - узнаешь новое :) Bit twiddling это называется :)
—
Алексей Мусин
(27.07.2004 13:02,
пустое
,
ссылка
)
Вариант РАЗ: табличка 256 байт (быстро, большой код). Вариант ДВА: сдвиг туда-сюда (медленно, но кода поменьше)
—
KiV
(27.07.2004 12:45,
пустое
)
Вариант полтора - бьешь на тетрады и каждую табличкой. И быстро относительно, и табличка всего 16 байт. =)))
—
ShiphT
(27.07.2004 12:57,
пустое
)
млин, там стрелки короче =)))
—
ShiphT
(27.07.2004 13:12, 337 байт)
Млин, "Учи ХТМЛ!!!"
—
ShiphT
(27.07.2004 13:26, 3186 байт)
Причем не так уж все и плохо.
—
ShiphT
(27.07.2004 13:24, 3195 байт)
типа этого (+)
—
ShiphT
(27.07.2004 13:10, 342 байт)
поддерживаю - то же самое хотел написать :).
—
Max_Fly
(27.07.2004 12:46,
пустое
)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru