Подскажите как красиво перевернуть байт

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Dany
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пн апр 30, 2007 13:45:52

Подскажите как красиво перевернуть байт

Сообщение Dany »

Байт= 7.......0, нужно для вывода в порт перевернуть Байт= 0......7.
Не менять же вручную биты?
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

цикл 8 раз из двух сдвигов через перенос - один влево, другой вправо - это красиво? на Си будет записано кучей сдвигов в одну строку, но результат будет тот же...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Dany
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пн апр 30, 2007 13:45:52

Сообщение Dany »

Вот так мне и не хочется делать, но ничего не приходит в голову. Пишу на С, вот мне и интересно, не ужели все пользуют макрос со сдвигами?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

вряд ли что можно придумать что-то принципиально иное и лучшее... но можно подумать над тем, чтобы данные сразу готовились в "перевернутом" формате еще на этапе компиляции или на этапе их получения...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Эиком - электронные компоненты и радиодетали
Dany
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пн апр 30, 2007 13:45:52

Сообщение Dany »

Данные как данность, с ними не придумаешь, они приходят из вне. Только если физически изменить разводку порта в схеме, тогда ничего не надо будет переворачивать.
Спасибо ARV за оперативное содействие и активное участие. Буду думать, что выбрать физический или программный метод:)
Реклама
Аватара пользователя
Кошкелот
Встал на лапы
Сообщения: 97
Зарегистрирован: Пн июл 30, 2007 08:19:02
Откуда: Екатеринбург
Контактная информация:

Сообщение Кошкелот »

Еще остается табличный метод. 256 байтов в ПЗУ, адрес - исходный байт плюс константа, значение - любое. Не шибко "красиво", но быстро.
Мнение автора не обязательно совпадает с его точкой зрения
Реклама
Dany
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пн апр 30, 2007 13:45:52

Сообщение Dany »

Нее табличный метод совсем не по душе, а временные рамки не критичны.
Аватара пользователя
Кошкелот
Встал на лапы
Сообщения: 97
Зарегистрирован: Пн июл 30, 2007 08:19:02
Откуда: Екатеринбург
Контактная информация:

Сообщение Кошкелот »

Код: Выделить всё

dst=0;
for(i=1, j=0x80;i<0x100;i<<1, j }} =1)  if(src&i) dst|=j;


Тоже не ахти что, да...?

(очепятка,, да млин - не пойму, почему не вводится как пишу)
Вместо фигруных скобок читать угловые!!!
Мнение автора не обязательно совпадает с его точкой зрения
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

В FAQ моего курса (по кнопке "www") это пункт:

"_05 перевернуть порядок битов в байте.txt"

Но движок форума "рубит" Си код.

Вот об этом - http://www.radiokot.ru/forum/viewtopic.php?p=61763
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Dany
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пн апр 30, 2007 13:45:52

Сообщение Dany »

Я остановился на таком коде
char reverse(char byte)
{
char result=0,
i;
for(i=0;i<8;i++)
{
if (byte & (1 << i))
{
result |= 1 << (7-i);
}
}
return result;
}
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

на ассемблере, конечно, красивше получается :)

Код: Выделить всё

   ldi   Temp, 8
m1:
   ror   r0
   rol   r1
   dec   Temp
   brne  m1
исходный байт в r0, результат в r1, Temp - какой-то вспомогательный регистр

у tych-а неплохой код на Си - если компилятор хорошо оптимизирует, то получится весьма оптимальный код, я предполагаю в идеале почти вдвое более быстрый, чем этот кусок, но втрое большего объема :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
moLCHec
Мявтор!
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.
Контактная информация:

Сообщение moLCHec »

ИМХО: если не вариант ARV, а Си то табличный явно быстрее и меньше.
Таблица занимает 4 слова + 4...5 слов на извлечение и присвоение. А приводимый Си код слов на 10-ть тянет при оптимальном транслировании, а о скорости и говорить нечего.
Настоящий кот всегда либо голоден,
либо невыспался ...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

а давайте микро-конкурс устроим - кто сделает самый быстрый и одновременно самый короткий код для поставленной задачи на ассемблере? только давайте честно - не использовать листинг из-под Сишного компилятора. А можно заодно и компиляторы сравнить - включить оптимизацию по скорости и привести кусок листинга без купюр (и не выдавать его за свой собственный) - тогда конкурс не только между человеками будет, но и между компиляторами :)
есть желающие? ;) у меня пока вырисовывается код из 14-и однотактных команд...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

moLCHec писал(а):ИМХО: если не вариант ARV, а Си то табличный явно быстрее и меньше.
Таблица занимает 4 слова + 4...5 слов на извлечение и присвоение. А приводимый Си код слов на 10-ть тянет при оптимальном транслировании, а о скорости и говорить нечего.
ошибаетесь, уважаемый, на счет меньше - таблица будет из 128 слов (256 байтов)...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
moLCHec
Мявтор!
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.
Контактная информация:

Сообщение moLCHec »

Согласен , что то меня сглючило. Башка гудит. :?
Настоящий кот всегда либо голоден,
либо невыспался ...
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

ARV писал(а):давайте честно - не использовать листинг из-под Сишного компилятора.


Я в пролете ...

ARV писал(а):А можно заодно и компиляторы сравнить - включить оптимизацию по скорости и привести кусок листинга без купюр (и не выдавать его за свой собственный) - тогда конкурс не только между человеками будет, но и между компиляторами :)


Можно. Только какой код сравнивать будем ? Одинаковый ?
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Вот есть сделаный тест-сравнение компиляторов http://www.atmanecl.com/EnglishSite/CCCE.htm

Можно и его проверить на достоверность.

Там кстати к AVR и 8051 "пристегнули" :lol:
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Мышонок
Друг Кота
Сообщения: 3792
Зарегистрирован: Чт сен 14, 2006 11:42:09
Откуда: Обитаю на чердаке
Контактная информация:

Сообщение Мышонок »

Что такоё стеки и деки знаете? :wink:

Пользуйтесь! :))
Память очень интересная штука: бывает так, что запомнишь одно, а вспомнишь другое...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

2 tych: во-первых, почему в пролете? во-вторых, твой код можно и сравнивать :) мне лично он понравился. сам придумал? ;) в-третьих: честно говоря, почти все "уже придумано до нас" - но совсем не интересно смотреть на готовые результаты тестов, интереснее свое замутить...
2 мышонок: если идея конкурса понравилась, то лучше код, а не совет. подсказки в конкурсе - это нечестно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Dany
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пн апр 30, 2007 13:45:52

Сообщение Dany »

Какая популярная тема оказалась:) Меня устроил приведенный код, так как переворачивать надо только 1 байт. Поэтому вопросы оптимизации отпадают. Код зато читаем и без магических чисел, просто и красиво.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»