Как обычно НЕТ ! Но автор там указан. Я FAQ собираю из всего, на мой взгляд, интересного и полезного новичку.ARV писал(а):сам придумал?
Подскажите как красиво перевернуть байт
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Реклама
не редкость, когда мысль или идея и самого автора переживает, чего ж удивляться, что тема стала популярной и зажила своей жизнью?Dany писал(а):Какая популярная тема оказалась:) Меня устроил приведенный код, так как переворачивать надо только 1 байт. Поэтому вопросы оптимизации отпадают. Код зато читаем и без магических чисел, просто и красиво.
я считаю, что вот на таких простеньких задачках здорово оттачивается мастерство программиста.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
В CVAVR получилось время выполнения 31 мкС примерно при частоте 1 МГц с оптимизацией по скорости.
Прога без кода переворачивания байта состоит из 96 слов (1 иснтрукция NOP это слово в размере программы) при добавлении кода получается 127 слов - т.е. добавляется 31 слово - примерно 31 инструкция АСМ.
В ICC 7.14 получилось время выполнения 35 мкС примерно при частоте 1 МГц - дема кончилась - оптимизации похоже нет. "Лодер" не использовал.
Прога без кода переворачивания байта состоит из 44 слов (так VMLAB показывает после "ребилд ол") при добавлении кода получается 79 слов - т.е. добавляется 35 слов.
Все исходники и для симуляции в архиве.
Нужно попробовать в IAR и WinAVR.
Прога без кода переворачивания байта состоит из 96 слов (1 иснтрукция NOP это слово в размере программы) при добавлении кода получается 127 слов - т.е. добавляется 31 слово - примерно 31 инструкция АСМ.
В ICC 7.14 получилось время выполнения 35 мкС примерно при частоте 1 МГц - дема кончилась - оптимизации похоже нет. "Лодер" не использовал.
Прога без кода переворачивания байта состоит из 44 слов (так VMLAB показывает после "ребилд ол") при добавлении кода получается 79 слов - т.е. добавляется 35 слов.
Все исходники и для симуляции в архиве.
Нужно попробовать в IAR и WinAVR.
- Вложения
-
- test CVAVR ICC VMLAB.rar
- (101.56 КБ) 359 скачиваний
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
2 tych:
1. почему такой огромный архив?! че там за исходники такие?! я сейчас такие объемы никак не могу поглядеть
...
2. По логике вещей надо было бы просто по листингу посчитать "читсые" команды, реализующие переворот - и помня, что почти все команды выполняются 1 такт, просто посчитать такты - скорость в тактах не зависит от частоты генератора...
3. в любом случае 31 слово - это много хуже, чем я ожидал... я предполагал 15-16 слов... интересно, а то же самое при оптимизации по объему - какой результат даст?
жаль, никто не желает посоревноваться с компиляторами...
1. почему такой огромный архив?! че там за исходники такие?! я сейчас такие объемы никак не могу поглядеть
2. По логике вещей надо было бы просто по листингу посчитать "читсые" команды, реализующие переворот - и помня, что почти все команды выполняются 1 такт, просто посчитать такты - скорость в тактах не зависит от частоты генератора...
3. в любом случае 31 слово - это много хуже, чем я ожидал... я предполагал 15-16 слов... интересно, а то же самое при оптимизации по объему - какой результат даст?
жаль, никто не желает посоревноваться с компиляторами...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Вот без картинок с результатом в CVAVR
- Вложения
-
- source_2.rar
- (16.96 КБ) 390 скачиваний
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Реклама
В том то и дело что ПОЧТИ все.ARV писал(а):почти все команды выполняются 1 такт
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Вот что сгенерировал IAR с оптимизацией по размеру.
Код: Выделить всё
// 5 tmp = ((in & 0x0F) <<4>> 4);
LDI R30, `in`
LD R17, Z
SWAP R17
ANDI R17, 0xF0
LD R16, Z
SWAP R16
ANDI R16, 0x0F
OR R16, R17
STD Z+2, R16
// 6 tmp = ((tmp & 0x33) <<2>> 2);
MOV R17, R16
ANDI R17, 0x33
LSL R17
LSL R17
ANDI R16, 0xCC
LSR R16
LSR R16
OR R16, R17
STD Z+2, R16
// 7 out = ((tmp & 0x55) <<1>> 1);
MOV R17, R16
ANDI R17, 0x55
LSL R17
ANDI R16, 0xAA
LSR R16
OR R16, R17
STD Z+1, R16Вы взяли покоцаный Си код или это скрипт форума покоцал ?
прицепите текст плиззз.
прицепите текст плиззз.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
судя по ассемблерному коду - это скрипт покоцал, т.к. видно, что компилировался нормальный код... однако, я был лучшего мнения о компиляторах Си
и это результат оптимизации по размеру кода?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
По вашим постам на форуме этого не скажешь.ARV писал(а):я был лучшего мнения о компиляторах Си![]()
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
я, как и все, склонен поддаваться мнению большинства... тут все так рьяно защищают Си, так хвалят протеус и всякие прочие новейшие средства, что я поневоле начинаю сомневаться... и сомневаясь, заочно считаю их (средства эти) лучше и сильнее моих привычных... отсюда и такие слова...
однако, я убеждаюсь лишний раз, что все-таки нет совершенства
я вручную "откомпилировал" этот Сишный код, и без особых стараний получил 15 команд (кстати, они все есть и в приведенном примере - америки я не открыл). я не учитываю пару команд из приведенного примера, которые "подготавливают" данные, т.е. заносят их в регистры. однако за счет отказа от использования ОЗУ и исключения лишних пересылок, мой вариант кода оказался короче примерно на 6 команд. а когда я изменил и алгоритм решения задачи - получил 14 команд. наверное, это не предел, но раз никто не хочет это доказать - и мне неохота 
однако, я убеждаюсь лишний раз, что все-таки нет совершенства
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Смысла то в этом нет. Используя Си как средство облегчить кодирование алгоритма люди соглашаются платить за это.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Сообщения: 6
- Зарегистрирован: Сб июл 21, 2007 12:29:16
Dany писал(а):Байт= 7.......0, нужно для вывода в порт перевернуть Байт= 0......7.
Не менять же вручную биты?
unsigned char Bit_Reverse( unsigned char x )
{
x = ((x >> 1) & 0x55) | ((x <<1>> 2) & 0x33) | ((x <<2>> 4) & 0x0f) | ((x << 4) & 0xf0);
return x;
}
- Сообщения: 29
- Зарегистрирован: Пн апр 30, 2007 13:45:52
Что то не то у вас в коде вход b_1101_1001bezobraznic писал(а):Dany писал(а):Байт= 7.......0, нужно для вывода в порт перевернуть Байт= 0......7.
Не менять же вручную биты?
unsigned char Bit_Reverse( unsigned char x )
{
x = ((x >> 1) & 0x55) | ((x <<1>> 2) & 0x33) | ((x <<2>> 4) & 0x0f) | ((x << 4) & 0xf0);
return x;
}
выход b_1111_0110
не обращай внимания,Dany, похоже, это была неудачная попытка записать код tych-а в одну строку (об этом я в своем первом посте писал)... имхо, ни красоты, ни какого-либо выигрыша (даже если записать без ошибок)...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 29
- Зарегистрирован: Пн апр 30, 2007 13:45:52
Я рад ! 
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru


