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

 
 
2 страниц V  < 1 2  
Closed TopicStart new topic
> Соглашения по регистрам, Cortex M3, gcc 4.7.2
Genadi Zawidowsk...
сообщение Feb 14 2013, 12:14
Сообщение #16


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

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



Цитата(ViKo @ Feb 14 2013, 14:37) *
В принципе, любой компилятор C для любого процессора должен при входе в функцию сохранить в стеке те регистры, которые используются в этой функции. Или переключиться на другой набор регистров.

Надеюсь, Вы понимаете, что это зависит от используемого соглашения о вызовах?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 14 2013, 12:24
Сообщение #17


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Genadi Zawidowski @ Feb 14 2013, 15:14) *
Надеюсь, Вы понимаете, что это зависит от используемого соглашения о вызовах?

Я считаю, что программист может об этом не думать при создании программы, разве что для расширения кругозора.
Вот единственное, что приходит на ум, когда нужно знать, что куда занеслось при вызове.
Код
__asm void HardFault_Handler(void) {
  TST LR, #4
  ITE EQ
  MRSEQ R0, MSP            ; Main Stack was used, put MSP in R0
  MRSNE R0, PSP            ; Process Stack was used, put PSP in R0
  LDR R0,[R0, #24]        ; Get stacked PC from stack
  B .
}
Go to the top of the page
 
+Quote Post
ReAl
сообщение Feb 14 2013, 13:17
Сообщение #18


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

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



Цитата(Genadi Zawidowski @ Feb 14 2013, 11:31) *
Просто, где это сказано? Где написано, что эти соглашения действуют для gcc с ключами "по умолчанию".
Поиск чертырех букв APCS - абревиатуры названия на сайте gnu ничего не даёт (только как часть имени ключа).
Ленивый поток ассоциаций…
APCS/соглашение о вызовах — часть EABI.
arm-*-eabi-gcc работает по eabi


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Feb 15 2013, 07:22
Сообщение #19


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

Группа: Участник
Сообщений: 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
AHTOXA
сообщение Feb 15 2013, 07:28
Сообщение #20


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Вот же: Procedure Call Standard for the ARM Architecture.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Feb 15 2013, 07:45
Сообщение #21


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

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



Цитата(AHTOXA @ Feb 15 2013, 11:28) *

Уже указывали... Это документ фирмы под названием ARM Ltd, с гарантией на этом документе базируется компилятор KEIL фирмы ARM Ltd. Если GCC делали применяя этот документ, инфомация исчерпывающая. Просто явного указания на то, что gcc основывается на этом документе, нигде нет.

ps: всё, завязываю. Просьба тему закрыть.

Сообщение отредактировал Genadi Zawidowski - Feb 15 2013, 07:47
Go to the top of the page
 
+Quote Post

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

 


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


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