Перейти к содержанию
    

"reentrant function" ARM7, GCC

Вроде есть опция ГЦЦ `-mapcs-reentrant':

Generate reentrant, position independent code. This is the

equivalent to specifying the `-fpic' option. The default is

`-mno-apcs-reentrant'.

 

ГЦЦ рядом нет, проверить не могу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Будет ли функция реентерабельная больше зависит от Вас, а не от компилятора.

 

A) Реентерабельная функция не должна хранить статические данные в промежутках между вызовами (все данные передаются из вызывающей функции).

Б) Реентерабельная функция не должна возвращать указатель на статические данные.

В) Реентерабельная функция не может вызывать нереентерабельную функцию.

Г) Если нужен доступ к общим ресурсам, то необходимо использовать механизм блокировки (простейшим вариантом является запрещение прерываний на время "критической операции").

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Будет ли функция реентерабельная больше зависит от Вас, а не от компилятора.

Это, конечно, так, но только при условии, что параметры передаются через стек. А вот, например, C51 от Keil по умолчанию передает параметры через специально выделенную (статически) область памяти. Другое дело, что для ARM передача через стек выглядит наиболее естественно и, скорее всего, используется по умолчанию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Другое дело, что для ARM передача через стек выглядит наиболее естественно и, скорее всего, используется по умолчанию.

 

Если укажите компилятор для ARM и его опции, при которых параметры будут передаваться через статически выделенную область памяти, буду очень благодарен - я такого извращения еще не видел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если укажите компилятор для ARM и его опции, при которых параметры будут передаваться через статически выделенную область памяти, буду очень благодарен - я такого извращения еще не видел.

Не укажу, да и вообще не уверен, что для ARM это есть :). Пример выше я привел лишь для того, чтобы обратить внимание автора вопроса на то, что такие варианты в принципе бывают, и, если у него возникли проблемы с реентерабельностью, то, возможно, дело в этом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...