реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> поменять местами биты в байте, простой вопрос
aaarrr
сообщение Apr 27 2010, 23:29
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sergeeff Jr. @ Apr 28 2010, 02:55) *
Взял, скопипастил и пользуешься...

Ага. Взял эдак, скопипастил, грохнул бездумно 256 байт RAM на AVR, и пользуешься. А что, зато "переносимо".
Go to the top of the page
 
+Quote Post
sergeeff Jr.
сообщение Apr 28 2010, 00:09
Сообщение #32


Знающий
****

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



Я решаю задачи (взяв AVR с большим количеством памяти, чем нужно будет когда то), а уже потом оптимизирую. Вы видимо в обратном порядке, ну что же, флаг в руки.

А во вторых человек настолько хреново разбирается в том, что вы ему пытаетесь объяснить, что помоему тут разговор не об экономии 256 байтах RAM'a...


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 28 2010, 00:22
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sergeeff Jr. @ Apr 28 2010, 04:09) *
Я решаю задачи (взяв AVR с большим количеством памяти, чем нужно будет когда то), а уже потом оптимизирую.

С таким подходом к решению AVR'а с достаточным количеством памяти может и не найтись. Сначала надо продумать, потом написать, а затем оптимизировать. В предложенном вами решении первая часть отсутствует совершенно.

Я, кстати, тоже использовал табличку для разворота порядка битов на AVR. Только табличка была расположена во флеш с выравниванием по границе 256, а вся операция сводилась к одной команде lpm.
Go to the top of the page
 
+Quote Post
x736C
сообщение Apr 28 2010, 00:36
Сообщение #34


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(singlskv @ Apr 28 2010, 00:58) *
у Вас какая-то полная фигня в асм тексте(и в С тоже)
после
lsr r17 и
lsr r16 и неиспользования в дальнейшем флага С
Вы младший бит ужо потеряли

короче, меньше 13 тактов и не надейтесь получить smile.gif
эта я Вам как "крупный специалист по перекладыванию битиков" гарантирую... smile.gif

Вы правы, действительно ошибся.
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
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Apr 28 2010, 02:55
Сообщение #35


I WANT TO BELIEVE
******

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



Цитата
А во вторых человек настолько хреново разбирается в том, что вы ему пытаетесь объяснить, что помоему тут разговор не об экономии 256 байтах RAM'a
Вот приучится в тупую делать простые вещи и так и будет по табличке всю жизнь. Не на столько сложная задача.

Понятно, что оптимизация просто ради оптимизации - никому не нужна. Но тут другой разговор идет.
AVR - это всё таки не PC и разбрасываться ресурсами(а в конечном итоге и деньгами) ИМХО не стОит.
И что плохого, если люди вступили в дискуссию и пытаются создать максимально оптимальный код под задачу?
Лично я ничего плохого не вижу в этом. Вон с 13 тактов уже на 11 переползли. Может быть некоторые бы и до конца жизни не знали, что это возможно )))))))

И флаг Вам в руки, когда вы с такой привычкой реализуете что-нибудь на меге 128, а другой разработчик сделает тоже самое на тиньке какой-нибудь вшивой smile.gif


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 28 2010, 08:03
Сообщение #36


дятел
*****

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
x736C
сообщение Apr 28 2010, 09:04
Сообщение #37


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Да, облажался. Мне показалось, АВР делает циклический сдвиг регистра, ступил.
Go to the top of the page
 
+Quote Post
sergeeff Jr.
сообщение Apr 28 2010, 13:56
Сообщение #38


Знающий
****

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



Такое впечатление, что все ваши начальники понимают, о чем здесь речь и оценивают вашу работу по количеству использованной памяти в мк, а не по результату (работает / не работает). Тоже самое относится ко времени, которое дается на разработку...

Я например не могу объяснить своему начальнику, что такого прекрасного в экономии 256 бит памяти на начальном этапе разработке. А уж тем более почему я потратил на это половину своего рабочего дня. smile.gif
Цитата(sigmaN @ Apr 28 2010, 06:55) *
Вот приучится в тупую делать простые вещи и так и будет по табличке всю жизнь.

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

И флаг Вам в руки, когда вы с такой привычкой реализуете что-нибудь на меге 128, а другой разработчик сделает тоже самое на тиньке какой-нибудь вшивой smile.gif

Ничего плохого в этом нет. Просто я бы это все в отдельную тему выделил. Новичек в этой куче сообщений не найдет простого решения (которое будет работать с любым мк).

Сколько времени у Вас уйдет, чтобы переписать этот код на ассемблере для другого Вам неизвестного ранее мк? А при этом Вы профессионал своего дела, а новичек скорее пойдет в соседний форум и найдет там как раз самое просто решение и использует его. biggrin.gif


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 28 2010, 14:11
Сообщение #39


Гуру
******

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



Цитата(sergeeff Jr. @ Apr 28 2010, 15:56) *
Я например не могу объяснить своему начальнику, что такого прекрасного в экономии 256 бит памяти

256 Байт.
Цитата
А уж тем более почему я потратил на это половину своего рабочего дня. smile.gif

А этот уже страшно sad.gif. На эту задачу на 'C' надо тратить 10 минут, даже если ночью разбудить. Набивать таблицу на 256 байт дольше и ошибиться легче.
При этом на 'C', если чуть чуть думать, это будет достаточно портируемый вариант.
Цитата
Сколько времени у Вас уйдет, чтобы переписать этот код на ассемблере для другого Вам неизвестного ранее мк?

Спокойнее, как выяснилось, писать на ассемблере практически бесполезно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 28 2010, 14:13
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sergeeff Jr. @ Apr 28 2010, 17:56) *
Я например не могу объяснить своему начальнику, что такого прекрасного в экономии 256 бит памяти на начальном этапе разработке. А уж тем более почему я потратил на это половину своего рабочего дня. smile.gif

Не бит, а байт. И что такого прекрасного в копипасте безграмотного решения? Или нельзя хотя бы чуть-чуть подумать (да даже не подумать, а просто посмотреть, что копируете), и добавить к таблице модификатор const?
На месте вашего начальника я бы премию срезал, без шуток. Ибо это пример даже не индусского, а китайского кода.
Go to the top of the page
 
+Quote Post
ASN
сообщение Apr 28 2010, 15:21
Сообщение #41


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



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


Знающий
****

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



Байт конечно, очепятался я.

Я не говорил, что я не буду искать более красивого решения (что проигнорирую вариант с XOR), но сделаю я это может через месяц, может через два. Потому что как раз каждый милливатт нужен. smile.gif

А тот, кто создал эту тему вообще скорее всего вникать не будет.

А урезателям бонусов еще раз скажу: когда вас поставят в положение - сделай плату, сделай прошивку, подготовь макет с прогой на компе, летим за тридевять земель к клиенту через неделю, тогда я посмотрю что вы будет в коде вылизывать, а главное когда. smile.gif

А "тупое набивание таблицы" кто-то сделал до меня. smile.gif


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Apr 28 2010, 17:35
Сообщение #43


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Если обратите внимание, в последних книгах по программированию, серьезные авторы предупреждают о вреде преждевременной оптимизации. Сначала получи работоспособную программу (устройство), а затем, при необходимости, займись оптимизацией узких мест.
Очевидно, что у каждого программиста со стажем накоплено оптимизированных функций и модулей на 95 % случаев. Автор топика, судя по задаваемому вопросу, программист молодой. Если он над каждым простым вопросом будет сидеть по две недели, конечное устройство не будет разработано в обозримом будущем никогда.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 28 2010, 18:05
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sergeeff Jr. @ Apr 28 2010, 20:49) *
А урезателям бонусов еще раз скажу: когда вас поставят в положение - сделай плату, сделай прошивку, подготовь макет с прогой на компе, летим за тридевять земель к клиенту через неделю, тогда я посмотрю что вы будет в коде вылизывать, а главное когда. smile.gif

Думаете, "урезатели бонусов" не умеют работать быстро и качественно? wink.gif

Цитата(sergeeff @ Apr 28 2010, 21:35) *
Если обратите внимание, в последних книгах по программированию, серьезные авторы предупреждают о вреде преждевременной оптимизации. Сначала получи работоспособную программу (устройство), а затем, при необходимости, займись оптимизацией узких мест.

Да, а применение таблицы "из интернета" - это как раз отличный пример преждевременной оптимизации. С соответствующими побочными эффектами sad.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Apr 28 2010, 20:41
Сообщение #45


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Это все на тему - сделать работоспособное устройство (программу) в отведенные для этого временные рамки или развести дискуссию вроде "А не посоветуюте ли какой язык высокого уровня эффективнее использовать в моей разработке?" Жаркие дебаты будут будоражить пытливые умы не одну неделю, разработка будет стоять в ожидании этого самого оптимального ЯВУ. И самое забавное, что дискуссия ничем и не закончится.
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 4th July 2025 - 23:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01517 секунд с 7
ELECTRONIX ©2004-2016