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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
beer_warrior
сообщение Mar 5 2007, 17:22
Сообщение #31


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
на сколько понимаю на этом всё

Я просил платформеннонезависиый код. Представленный таковым не является. Видимо это понятие вам незнакомо.
Кроме того ожидается, что будет представлены сравнительные результаты, которые докажут ваши слова.
Тратить время на компиляцию библиотек нет ни времени, не желания.


Впрочем почитав ваши опусы в других ветках - нет желаня тратить время на беседы с вами вообще.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
aesok
сообщение Mar 5 2007, 18:11
Сообщение #32


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(ahulap @ Mar 5 2007, 16:19) *
Вот еще что обнаружил:

есть маленнькая функция
static void putc(unsigned char c)
{
while ( !(UCSRA & _BV(UDRE)) ) ;
UDR = c;
}
и вызывается из очень многих мест. Но компиллятор ее везде делает инлайном, что съедает довольно много кода:
3fba: 5d 9b sbis 0x0b, 5 ; 11
3fbc: fe cf rjmp .-4 ; 0x3fba <main+0x6cc>
3fbe: 9c b9 out 0x0c, r25 ; 12

PS: оптимизация -Os. Стоит в нее добавить хотя бы один NOP - реализуется как функция и call'ы.


Это нормальное поведение компилятора, попытаться оптимизировать маленькие функции. Если вы не хотите чтобы функция бала инлайновой, объявите ее с атрибутом "noinline":

static void putc(unsigned char c) __attribute__((noinline));

Анатолий.
Go to the top of the page
 
+Quote Post
ahulap
сообщение Mar 5 2007, 18:57
Сообщение #33


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 22-06-06
Из: Kharkiv, UA
Пользователь №: 18 284



Цитата(aesok @ Mar 5 2007, 17:11) *
Цитата(ahulap @ Mar 5 2007, 16:19) *

Вот еще что обнаружил:

есть маленнькая функция
static void putc(unsigned char c)
{
while ( !(UCSRA & _BV(UDRE)) ) ;
UDR = c;
}
и вызывается из очень многих мест. Но компиллятор ее везде делает инлайном, что съедает довольно много кода:
3fba: 5d 9b sbis 0x0b, 5 ; 11
3fbc: fe cf rjmp .-4 ; 0x3fba <main+0x6cc>
3fbe: 9c b9 out 0x0c, r25 ; 12

PS: оптимизация -Os. Стоит в нее добавить хотя бы один NOP - реализуется как функция и call'ы.


Это нормальное поведение компилятора, попытаться оптимизировать маленькие функции. Если вы не хотите чтобы функция бала инлайновой, объявите ее с атрибутом "noinline":

static void putc(unsigned char c) __attribute__((noinline));

Анатолий.


Спасибо! Освободил 78 байт кода.
Дело в том, что WinAVR20060125 этого не делал. Там, мне показалось, было так: если тело функции и все N-call'ов занимают больше места, чем инлайн N-раз, то функция делалась инлайном?
Go to the top of the page
 
+Quote Post
gormih
сообщение Mar 6 2007, 01:12
Сообщение #34


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(beer_warrior @ Mar 5 2007, 17:22) *
Цитата
на сколько понимаю на этом всё

Я просил платформеннонезависиый код. Представленный таковым не является. Видимо это понятие вам незнакомо.
Кроме того ожидается, что будет представлены сравнительные результаты, которые докажут ваши слова.
Тратить время на компиляцию библиотек нет ни времени, не желания.


blink.gif

Да если честно мне платформонезависимый си грубо говоря "по барабану". Есть конкретные задачи, решать которые без привязки к платформе по меньшей мере безграмотно. Код, который не привязан к конкретной платформе это как минимум математическая задача, которая после своего решения должна быть связана интерфейсной частью с основной прогррамой. С огромной долей сомнения выскажу предположение, что математические задачи WinAVR решает лучше, чем остальные компиляторы ( smile3046.gif ) , просто потому, что таковых задач на AVR мне решать не приходилось, да как то и не приходило в голову пока что. А вот то, что касается внешних интерфейсов - то тут Вы меня точно не переубедите - проверено мной на практике - код, генерируемый WinAVR при компиляции драйверов внешних устройств (как пример LCD контроллер выше) неадекватен. Я просто даже разбираться не стал, почему это hex после winavr весит 2 кб, а в других компиляторах на порядок меньше. Мне это, как разработчику НЕ ИНТЕРЕСНО, мне важен хороший результат в кратчайшие сроки, который я с легкостью получил в другом компиляторе. Уж извините, что Вас не спросил... возможно, уважаемый beer_warrior Вы настолько круто знакомы с WinAVR, что у Вас будут другие результаты, чего Вам искренне желаю.



Цитата(beer_warrior @ Mar 5 2007, 17:22) *
Впрочем почитав ваши опусы в других ветках - нет желаня тратить время на беседы с вами вообще




Вот с этого места поподробнее.


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 6 2007, 10:46
Сообщение #35


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Поумерьте свой пыд, господа.
Тема уже давно себя исчерпала и нечего огонь раздувать.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 7 2007, 18:15
Сообщение #36


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



gormin довыступался до предупреждения из-за грубости и провокации религиозного спора.
Go to the top of the page
 
+Quote Post

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

 


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


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