|
поменять местами биты в байте, простой вопрос |
|
|
|
 |
Ответов
|
Apr 26 2010, 07:56
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Для AVR все равно быстрее так Код uint8_t rsb(uint8_t a) { a = ((a & 0x55) << 1) | ((a & 0xAA) >> 1); a = ((a & 0xCC) >> 2) | ((a & 0x33) << 2); return __swap_nibbles(a); } 15 тактов. Даже если на асм написать развернутый цикл со сдвигом через перенос получится 16 тактов. Код 5 a = ((a & 0x55) << 1) | ((a & 0xAA) >> 1); \ 00000000 2F10 MOV R17,R16 \ 00000002 7515 ANDI R17,0x55 \ 00000004 0F11 LSL R17 \ 00000006 7A0A ANDI R16,0xAA \ 00000008 9506 LSR R16 \ 0000000A 2B01 OR R16,R17 6 a = ((a & 0xCC) >> 2) | ((a & 0x33) << 2); 7 return __swap_nibbles(a); \ 0000000C 2F10 MOV R17,R16 \ 0000000E 7C1C ANDI R17,0xCC \ 00000010 9516 LSR R17 \ 00000012 9516 LSR R17 \ 00000014 7303 ANDI R16,0x33 \ 00000016 0F00 LSL R16 \ 00000018 0F00 LSL R16 \ 0000001A 2B01 OR R16,R17 \ 0000001C 9502 SWAP R16 \ 0000001E 9508 RET
|
|
|
|
|
Apr 26 2010, 20:59
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(KRS @ Apr 26 2010, 11:56)  Даже если на асм написать развернутый цикл со сдвигом через перенос получится 16 тактов. Можно и так, но не менее 16 тактов... Код BLD R16,0 BST R17,7
BLD R16,1 BST R17,6
BLD R16,2 BST R17,5
BLD R16,3 BST R17,4
BLD R16,4 BST R17,3
BLD R16,5 BST R17,2
BLD R16,6 BST R17,1
BLD R16,7 BST R17,0 А ещё кто-то предлагал соединить два 8-ми битных порта перемычками крест-накрест и инвертировать за 2-3 такта: Код out PORTB, R16 nop in R17,PORTD
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Apr 27 2010, 09:06
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(demiurg_spb @ Apr 27 2010, 00:59)  А ещё кто-то предлагал соединить два 8-ми битных порта перемычками крест-накрест и инвертировать за 2-3 такта: Код out PORTB, R16 nop in R17,PORTD Я вот не помню, AVR умеет свопить полубайты? Тогда можно одним портом обойтись с чуть большим количеством тактов
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
Сообщений в этой теме
Vny4ek поменять местами биты в байте Apr 25 2010, 19:34 zltigo Цитата(Vny4ek @ Apr 25 2010, 21:34) 0х72=... Apr 25 2010, 19:45 aaarrr Цитата(zltigo @ Apr 25 2010, 23:45) Не хи... Apr 25 2010, 19:47 ASN Vny4ek
тут есть Apr 25 2010, 19:53 Vny4ek я это вижу как цикл на 8 шагов
где проверяется зна... Apr 25 2010, 20:04 baralgin Сумбурное описание, но если правильно понял то тип... Apr 25 2010, 20:04 demiurg_spb Если вопрос звучал так: "Как зеркалить биты в... Apr 25 2010, 20:53 KRS IMHO цикл тут неоптимален.
Можно же стандартный сп... Apr 25 2010, 20:46 baralgin Цитата(KRS @ Apr 25 2010, 23:46) Можно же... Apr 25 2010, 20:57 zltigo Цитата(baralgin @ Apr 25 2010, 22:57) Цик... Apr 25 2010, 21:12 baralgin Не поленился, проверил (плохая привычка меряться..... Apr 25 2010, 21:55 zltigo Цитата(baralgin @ Apr 25 2010, 23:55) Не ... Apr 25 2010, 22:04 KRS Цитата(baralgin @ Apr 26 2010, 01:55) ps:... Apr 25 2010, 22:07 baralgin Цитата(zltigo @ Apr 26 2010, 01:04) Сильн... Apr 25 2010, 22:31 Vny4ek я проще себе это представлял, не знаю только как н... Apr 26 2010, 05:33 zltigo Цитата(Vny4ek @ Apr 26 2010, 07:33) я про... Apr 26 2010, 06:58 zltigo Цитата(KRS @ Apr 26 2010, 09:56) Для AVR ... Apr 26 2010, 08:14 x736C Цитата(KRS @ Apr 26 2010, 11:56) Для AVR ... Apr 27 2010, 01:53  singlskv Цитата(x736C @ Apr 27 2010, 05:53) С перв... Apr 27 2010, 20:58   x736C Цитата(singlskv @ Apr 28 2010, 00:58) у В... Apr 28 2010, 00:36    singlskv Цитата(x736C @ Apr 28 2010, 04:36) Перепр... Apr 28 2010, 08:03 Vny4ek ЦитатаВсе плохо, Вы, как оказалось, не только напи... Apr 26 2010, 17:12 smac Цитата(Vny4ek @ Apr 26 2010, 21:12) Инфы ... Apr 26 2010, 19:45 sigmaN Vny4ek вот как-то так:
установить бит в байтеКодb ... Apr 26 2010, 19:55 Vny4ek sigmaN, спасибо большое. То что написали после вас... Apr 27 2010, 05:02 zltigo Цитата(Vny4ek @ Apr 27 2010, 07:02) sigma... Apr 27 2010, 07:35 sergeeff Jr. Я по простому сделал (как и сказали, при помощи та... Apr 27 2010, 06:15 akl Может.
Apr 27 2010, 09:16 sergeeff Jr. Блин крутые специалисты, вы проблему решаете или п... Apr 27 2010, 22:55 aaarrr Цитата(sergeeff Jr. @ Apr 28 2010, 02:55)... Apr 27 2010, 23:29 sergeeff Jr. Я решаю задачи (взяв AVR с большим количеством пам... Apr 28 2010, 00:09 aaarrr Цитата(sergeeff Jr. @ Apr 28 2010, 04:09)... Apr 28 2010, 00:22 sigmaN ЦитатаА во вторых человек настолько хреново разбир... Apr 28 2010, 02:55 ASN sergeeff Jr
Тут речь не оптимизации ради оптимизац... Apr 28 2010, 15:21 x736C Да, облажался. Мне показалось, АВР делает цикличес... Apr 28 2010, 09:04 sergeeff Jr. Такое впечатление, что все ваши начальники понимаю... Apr 28 2010, 13:56 zltigo Цитата(sergeeff Jr. @ Apr 28 2010, 15:56)... Apr 28 2010, 14:11 aaarrr Цитата(sergeeff Jr. @ Apr 28 2010, 17:56)... Apr 28 2010, 14:13 sergeeff Jr. Байт конечно, очепятался я.
Я не говорил, что я н... Apr 28 2010, 16:49 KRS Цитата(sergeeff Jr. @ Apr 28 2010, 20:49)... Apr 28 2010, 22:11 sergeeff Если обратите внимание, в последних книгах по прог... Apr 28 2010, 17:35 aaarrr Цитата(sergeeff Jr. @ Apr 28 2010, 20:49)... Apr 28 2010, 18:05 sergeeff Это все на тему - сделать работоспособное устройст... Apr 28 2010, 20:41 Vny4ek Всем большое спасибо за помощь. Сам понимаю что ту... Apr 30 2010, 06:27
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|