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

 
 
> свежак для выни (AVR gcc), bu2.18.50.20071201_gcc4.3.0.20071130_avr
klen
сообщение Dec 3 2007, 17:13
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



свежая сборка для авр
bu2.18.50.20071201
gcc4.3.0.20071130
avrlibc1.15.1.20071029
доложил доку по avrlibc к корень как просили

7z SFX

7z
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
aesok
сообщение Dec 3 2007, 20:38
Сообщение #2


Знающий
****

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



В GCC 4.3 добавлен атрибут "OS_task". Используйте его с функцией 'main', регистры r2-r15 не будут сохраняться в стеке.

Анатолий.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Dec 3 2007, 20:55
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(aesok @ Dec 4 2007, 00:38) *
В GCC 4.3 добавлен атрибут "OS_task". Используйте его с функцией 'main', регистры r2-r15 не будут сохраняться в стеке.

Анатолий.

А раньше сохранялись? Посмотрел, что накомпилил winavr20060421, push R2 не нашел....
Кстати вопрос - атрибут naked применять к main корректно или он в основном для ISR? Я попробовал, программа стала меньше на 8 байт, вроде работоспособность не потеряла. Но все же хотелось бы точно знать, что странные траблы не вылезут потом. А то оптимизация у GCC и так иногда непонятна.
Go to the top of the page
 
+Quote Post
aesok
сообщение Dec 3 2007, 21:38
Сообщение #4


Знающий
****

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



Цитата(Qwertty @ Dec 3 2007, 23:55) *
А раньше сохранялись? Посмотрел, что накомпилил winavr20060421, push R2 не нашел....


Раньше понятие растяжимое...

В winavr2006... функция 'main' обрабатывалась специальным образом, и используемые call-saved регистры (r2-r17, r28-r29) никогда не сохранялись в стеке.

В winavr2007... функция 'main' стала обычной функцией, и call-saved регистры используемые в 'main' сохраняются в стеке.

В GCC 4.3 добавлен атрибут "OS_task". Вот предварительная документация на него:

Functions with 'OS_task' attribute do not save any "call-saved" registers, requiring less stack space. Such functions should only be called from assembler routines. This attribute is typically used for the 'main' function.

Регистры r28-29 пока сохраняются sad.gif. Патч для GCC 4.2 есть, и "OS_task" должен быть в следующем WinAVR.

Цитата
Кстати вопрос - атрибут naked применять к main корректно ...? Я попробовал, программа стала меньше на 8 байт, вроде работоспособность не потеряла. Но все же хотелось бы точно знать, что странные траблы не вылезут потом.


Конечно вылезут ошибки, но ни какие не странные, а такие какие и должны.

Одной из задач пролога функции 'main', как и любой другой функции является выделение в стеке места для локальных переменных. Добавляя атрибут 'naked' к функции вы выкидываете код пролога функции. Если функции простая, и компилятору не потребовалось место в стеке для локальных переменных то проблем нет. Если же место для локальных переменных в стеке нужно, а оно не выделено, то эти переменные будут искажены.

Цитата
А то оптимизация у GCC и так иногда непонятна.

Факты.

Анатолий.

Сообщение отредактировал aesok - Dec 3 2007, 22:07
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 1st July 2025 - 19:47
Рейтинг@Mail.ru


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