Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: свежак для выни (AVR gcc)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
klen
свежая сборка для авр
bu2.18.50.20071201
gcc4.3.0.20071130
avrlibc1.15.1.20071029
доложил доку по avrlibc к корень как просили

7z SFX

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

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

Анатолий.

А раньше сохранялись? Посмотрел, что накомпилил winavr20060421, push R2 не нашел....
Кстати вопрос - атрибут naked применять к main корректно или он в основном для ISR? Я попробовал, программа стала меньше на 8 байт, вроде работоспособность не потеряла. Но все же хотелось бы точно знать, что странные траблы не вылезут потом. А то оптимизация у GCC и так иногда непонятна.
aesok
Цитата(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 и так иногда непонятна.

Факты.

Анатолий.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.