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

 
 
> Разворачивание на C++
ReAl
сообщение Nov 27 2010, 22:01
Сообщение #1


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Да вот кстати о С++
Там тема интересная на avrfreaks, мужик хочет добиться нужного разворачивания для скорости вывода. Две страницы многоэтажного ма...кросизма.
Сейчас вот в голову стукнуло «чисто для поржать»
http://www.avrfreaks.net/index.php?name=PN...p=769453#769453
Причём полный улёт — шаблоны, ссылки... Страшный-страшный С++
И результат...


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение Nov 29 2010, 05:20
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(ReAl @ Nov 28 2010, 04:01) *
Да вот кстати о С++
[...]
Причём полный улёт — шаблоны, ссылки... Страшный-страшный С++
И результат...

Посмотрел по ссылке. Красиво. И реализация, и результат. a14.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Petka
сообщение Nov 29 2010, 07:47
Сообщение #3


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

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(dxp @ Nov 29 2010, 08:20) *
Посмотрел по ссылке. Красиво. И реализация, и результат. a14.gif


bb-offtopic.gif

Можно проще и на чистом си:
Код
inline void unroll_out(uint8_t count, uint8_t value)
{
    PORTB = value;
    value <<= 1;
    if(count) unroll_out(count-1, value);
}

void foo(uint8_t v)
{
    unroll_out(8, v);
}


Результат:
Код
00000014 <foo>:
  14:    88 bb           out    0x18, r24; 24
  16:    88 0f           add    r24, r24
  18:    88 bb           out    0x18, r24; 24
  1a:    88 0f           add    r24, r24
  1c:    88 bb           out    0x18, r24; 24
  1e:    88 0f           add    r24, r24
  20:    88 bb           out    0x18, r24; 24
  22:    88 0f           add    r24, r24
  24:    88 bb           out    0x18, r24; 24
  26:    88 0f           add    r24, r24
  28:    88 bb           out    0x18, r24; 24
  2a:    88 0f           add    r24, r24
  2c:    88 bb           out    0x18, r24; 24
  2e:    88 0f           add    r24, r24
  30:    88 bb           out    0x18, r24; 24
  32:    88 0f           add    r24, r24
  34:    88 bb           out    0x18, r24; 24
  36:    08 95           ret
Go to the top of the page
 
+Quote Post



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

 


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


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