|
|
  |
поменять местами биты в байте, простой вопрос |
|
|
|
Apr 28 2010, 00:36
|
Профессионал
    
Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942

|
Цитата(singlskv @ Apr 28 2010, 00:58)  у Вас какая-то полная фигня в асм тексте(и в С тоже) после lsr r17 и lsr r16 и неиспользования в дальнейшем флага С Вы младший бит ужо потеряли короче, меньше 13 тактов и не надейтесь получить  эта я Вам как "крупный специалист по перекладыванию битиков" гарантирую...  Вы правы, действительно ошибся. lsl надо заменить на rol, lsr на ror. 11 тактов и получится. Перепроверьте. Соответственно код на Си тоже надо подправить. Поправленный код Код mov r17,r16 rol r17 andi r17,0x55 ror r16 andi r16,0xAA or r16,r17 mov r17,r16 swap r17 andi r17,0x66 andi r16,0x99 or r16,r17
|
|
|
|
|
Apr 28 2010, 02:55
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата А во вторых человек настолько хреново разбирается в том, что вы ему пытаетесь объяснить, что помоему тут разговор не об экономии 256 байтах RAM'a Вот приучится в тупую делать простые вещи и так и будет по табличке всю жизнь. Не на столько сложная задача. Понятно, что оптимизация просто ради оптимизации - никому не нужна. Но тут другой разговор идет. AVR - это всё таки не PC и разбрасываться ресурсами(а в конечном итоге и деньгами) ИМХО не стОит. И что плохого, если люди вступили в дискуссию и пытаются создать максимально оптимальный код под задачу? Лично я ничего плохого не вижу в этом. Вон с 13 тактов уже на 11 переползли. Может быть некоторые бы и до конца жизни не знали, что это возможно ))))))) И флаг Вам в руки, когда вы с такой привычкой реализуете что-нибудь на меге 128, а другой разработчик сделает тоже самое на тиньке какой-нибудь вшивой
--------------------
The truth is out there...
|
|
|
|
|
Apr 28 2010, 08:03
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(x736C @ Apr 28 2010, 04:36)  Перепроверьте. Нет, все равно ошибка. Смотрите: Код mov r17,r16; r16 = abcdefgh r17=abcdefgh C=x rol r17; r17=bcdefghx C=a andi r17,0x55; r17=0c0e0g0x ror r16; r16=aabcdefg C=h andi r16,0xAA; r16=a0b0d0f0 or r16,r17; r16=acbedgfx mov r17,r16; r17=acbedgfx swap r17; r17=dgfxacbe andi r17,0x66; r17=0gf00cb0 andi r16,0x99; r16=a00ed00x or r16,r17; r16=agfedcbx получили agfedcbx а нужно hgfedcba
|
|
|
|
|
Apr 28 2010, 13:56
|

Знающий
   
Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964

|
Такое впечатление, что все ваши начальники понимают, о чем здесь речь и оценивают вашу работу по количеству использованной памяти в мк, а не по результату (работает / не работает). Тоже самое относится ко времени, которое дается на разработку... Я например не могу объяснить своему начальнику, что такого прекрасного в экономии 256 бит памяти на начальном этапе разработке. А уж тем более почему я потратил на это половину своего рабочего дня.  Цитата(sigmaN @ Apr 28 2010, 06:55)  Вот приучится в тупую делать простые вещи и так и будет по табличке всю жизнь. А Вы думаете, что большинство делает иначе? Цитата(sigmaN @ Apr 28 2010, 06:55)  Понятно, что оптимизация просто ради оптимизации - никому не нужна. Но тут другой разговор идет. AVR - это всё таки не PC и разбрасываться ресурсами(а в конечном итоге и деньгами) ИМХО не стОит. И что плохого, если люди вступили в дискуссию и пытаются создать максимально оптимальный код под задачу? Лично я ничего плохого не вижу в этом. Вон с 13 тактов уже на 11 переползли. Может быть некоторые бы и до конца жизни не знали, что это возможно ))))))) И флаг Вам в руки, когда вы с такой привычкой реализуете что-нибудь на меге 128, а другой разработчик сделает тоже самое на тиньке какой-нибудь вшивой  Ничего плохого в этом нет. Просто я бы это все в отдельную тему выделил. Новичек в этой куче сообщений не найдет простого решения (которое будет работать с любым мк). Сколько времени у Вас уйдет, чтобы переписать этот код на ассемблере для другого Вам неизвестного ранее мк? А при этом Вы профессионал своего дела, а новичек скорее пойдет в соседний форум и найдет там как раз самое просто решение и использует его.
--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
|
|
|
|
|
Apr 28 2010, 14:11
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(sergeeff Jr. @ Apr 28 2010, 15:56)  Я например не могу объяснить своему начальнику, что такого прекрасного в экономии 256 бит памяти 256 Байт. Цитата А уж тем более почему я потратил на это половину своего рабочего дня.  А этот уже страшно  . На эту задачу на 'C' надо тратить 10 минут, даже если ночью разбудить. Набивать таблицу на 256 байт дольше и ошибиться легче. При этом на 'C', если чуть чуть думать, это будет достаточно портируемый вариант. Цитата Сколько времени у Вас уйдет, чтобы переписать этот код на ассемблере для другого Вам неизвестного ранее мк? Спокойнее, как выяснилось, писать на ассемблере практически бесполезно.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 28 2010, 15:21
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326

|
sergeeff JrТут речь не оптимизации ради оптимизации. Проинвертировать биты в байте таблицей не факт, что проще. Причин несколько: - размер кода; - время на кодирование (или тупое набивание таблицы); - количество вызовов функции в общем времени работы программы. Предложенный алгоритм с xor работает быстро. Более того, в некоторых случаях он вообще будет работать быстрее, чем таблица (если таблицу хранить во внешней медленной памяти). Отлаженный и качественный алгоритм с одного МК на другой на ассемблере (свежий пример - с 8051 на ARM9) переноситься за 1 день. И даёт выигрыш в производительности 3-8 раз по сравнению с кодом, написанным на C. Для устройств, где важен каждый милливатт, это зачастую важно. Если Ваше устройство работает от аккумулятора 10 дней (с "вылизанным" ПО на ассемблере), а у конкурентов только 2 дня (на "copypaste'ном" С), то тендер Вы, очень вероятно, проиграете. Зато потом будет масса времени объяснить своему начальнику, что такого прекрасного в экономии.
|
|
|
|
|
Apr 28 2010, 16:49
|

Знающий
   
Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964

|
Байт конечно, очепятался я. Я не говорил, что я не буду искать более красивого решения (что проигнорирую вариант с XOR), но сделаю я это может через месяц, может через два. Потому что как раз каждый милливатт нужен.  А тот, кто создал эту тему вообще скорее всего вникать не будет. А урезателям бонусов еще раз скажу: когда вас поставят в положение - сделай плату, сделай прошивку, подготовь макет с прогой на компе, летим за тридевять земель к клиенту через неделю, тогда я посмотрю что вы будет в коде вылизывать, а главное когда.  А "тупое набивание таблицы" кто-то сделал до меня.
--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
|
|
|
|
|
Apr 28 2010, 17:35
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Если обратите внимание, в последних книгах по программированию, серьезные авторы предупреждают о вреде преждевременной оптимизации. Сначала получи работоспособную программу (устройство), а затем, при необходимости, займись оптимизацией узких мест. Очевидно, что у каждого программиста со стажем накоплено оптимизированных функций и модулей на 95 % случаев. Автор топика, судя по задаваемому вопросу, программист молодой. Если он над каждым простым вопросом будет сидеть по две недели, конечное устройство не будет разработано в обозримом будущем никогда.
|
|
|
|
|
Apr 28 2010, 18:05
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sergeeff Jr. @ Apr 28 2010, 20:49)  А урезателям бонусов еще раз скажу: когда вас поставят в положение - сделай плату, сделай прошивку, подготовь макет с прогой на компе, летим за тридевять земель к клиенту через неделю, тогда я посмотрю что вы будет в коде вылизывать, а главное когда.  Думаете, "урезатели бонусов" не умеют работать быстро и качественно?  Цитата(sergeeff @ Apr 28 2010, 21:35)  Если обратите внимание, в последних книгах по программированию, серьезные авторы предупреждают о вреде преждевременной оптимизации. Сначала получи работоспособную программу (устройство), а затем, при необходимости, займись оптимизацией узких мест. Да, а применение таблицы "из интернета" - это как раз отличный пример преждевременной оптимизации. С соответствующими побочными эффектами
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|