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

 
 
> Соглашения по регистрам, Cortex M3, gcc 4.7.2
Genadi Zawidowsk...
сообщение Feb 12 2013, 18:55
Сообщение #1


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

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Вижу, что в документе Cortex-M3 programming manual написано - при входе в прерывание сохраняется
Цитата
● R0-R3, R12
● Return address
● PSR
● LR

Добавление __attribute__((__interrupt__)) (как я смог понять из кода) добавляет выравнивание стека на 8. В этом нет необходимости - обработка прерывания процессором это обеспечивает независимо от требования на выравнивание.
А что обеспечивает сохранение остальных регистров? Или эти регистры в gcc 4.7.2 в случае их использования в вычислениях сохраняются автоматически?
Сейчас при невнимательном тестировании на первый взгляд всё работает и без __attribute__((__interrupt__)).

В документе http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gc...tion-Attributes написано только то, что я и понял - на Cortex Mx только выравнивает стэк:
Цитата
On ARMv7-M the interrupt type is ignored, and the attribute means the function may be called with a word aligned stack pointer.

В start-up никаких изменений режима работы процессора не делается.
CODE
static void ResetException( void )
{

uint32_t * pSrc, * pDest ;


/* Low level Initialize */
arm_cpu_initialize(); // watchdog disable, clock initialize

/* Initialize the relocate segment */
pSrc = & _sidata;
pDest = & __data_start;

if ( pSrc != pDest )
{
// compiled for FLASH
for ( ; pDest < & __data_end ; )
{
*pDest++ = *pSrc++ ;
}
}
// Следить, чтобы переменные не оказались в стеке, очищаемом сейчас.
// Для этого, например, использована секция noinit
/* Clear the zero segment */
for ( pDest = & __bss_start; pDest < & __bss_end; )
{
* pDest ++ = 0;
}

/* Branch to main function */
main();

/* Infinite loop */
for (;;)
;
}


Сообщение отредактировал Genadi Zawidowski - Feb 12 2013, 19:18
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Genadi Zawidowsk...
сообщение Feb 15 2013, 07:22
Сообщение #2


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

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Для примера, как выглядит соответствующая глава документации (цитата НЕ из GCC):
Цитата
9.3 Calling Convention
In order to keep the binary compatibility with gcc and vc, ucc conforms to the calling convention of these compilers.
(1) When calling a function, the actual parameters will be pushed onto stack from right to left. The caller will pop the parameters.
(2) preserve registers:EBX, ESI and EDI which will be saved by the callee.
scratch registers:EAX, ECX and EDX which will be saved by the caller.
(3) function return value:
if the return value is integer type,EAX holds the return value.
if the return value is floating point type,ST(0) holds the return value.
if the return value is struct/union type in size 1, 2 or 4, EAX holds the return value.
if the return value is struct/union type in size 8, (EAX, EDX) holds the return value.
if the return value is struct/union type in other size, the function’s first parameter is implicit
which is the address of the function return value’s receiver, the function’s return type will be void.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Genadi Zawidowski   Соглашения по регистрам   Feb 12 2013, 18:55
- - _Артём_   Цитата(Genadi Zawidowski @ Feb 12 2013, 20...   Feb 12 2013, 19:10
|- - Genadi Zawidowski   Цитата(_Артём_ @ Feb 12 2013, 23:10) Не п...   Feb 12 2013, 19:19
|- - VslavX   Цитата(Genadi Zawidowski @ Feb 12 2013, 21...   Feb 12 2013, 19:29
|- - _Артём_   Цитата(Genadi Zawidowski @ Feb 12 2013, 21...   Feb 12 2013, 19:33
- - ViKo   Из книжки J. Yiu ЦитатаIn many cases, the interrup...   Feb 12 2013, 19:33
- - Genadi Zawidowski   Спасибо, значит функции обработчиков перерывания в...   Feb 12 2013, 19:36
|- - demiurg_spb   Цитата(Genadi Zawidowski @ Feb 12 2013, 23...   Feb 13 2013, 05:38
- - ReAl   У меня Код#ifdef __cplusplus # define INTERRUPT e...   Feb 13 2013, 06:57
- - Genadi Zawidowski   Пока мне APCS встретилось только в таком контексте...   Feb 13 2013, 18:49
|- - ViKo   Цитата(Genadi Zawidowski @ Feb 13 2013, 21...   Feb 14 2013, 03:59
|- - VslavX   Цитата(Genadi Zawidowski @ Feb 13 2013, 20...   Feb 14 2013, 06:19
- - Genadi Zawidowski   ЦитатаGCC следует стандартным соглашениям для архи...   Feb 14 2013, 09:31
|- - ViKo   Цитата(Genadi Zawidowski @ Feb 14 2013, 12...   Feb 14 2013, 10:37
||- - _Pasha   Цитата(ViKo @ Feb 14 2013, 14:37) В качес...   Feb 14 2013, 10:53
||- - Genadi Zawidowski   Цитата(ViKo @ Feb 14 2013, 14:37) В принц...   Feb 14 2013, 12:14
||- - ViKo   Цитата(Genadi Zawidowski @ Feb 14 2013, 15...   Feb 14 2013, 12:24
|- - ReAl   Цитата(Genadi Zawidowski @ Feb 14 2013, 11...   Feb 14 2013, 13:17
- - AHTOXA   Вот же: Procedure Call Standard for the ARM Archit...   Feb 15 2013, 07:28
- - Genadi Zawidowski   Цитата(AHTOXA @ Feb 15 2013, 11:28) Вот ж...   Feb 15 2013, 07:45


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

 


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


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