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

Коды завершения функции

Возвращать PC/LR и по мап файлу смотреть что откуда?

Тогда функции должны возращать результаты в виде структур, где, собственно говоря, код завершения, и некая служебная информация.

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


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

У вас в чипе 4Гб памяти? Но в общем, если не паковать - да, структура, так будет проще. Насколько я помню функция может использовать до 4 32битных регистров для возвращения значения. В функциональном мире вроде из функций обычно возвращают Result<T, E>.

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


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

Иногда приходится придумывать некие коды, информирующие о той или иной ошибке при выходе из функции. . . .

Я использую "двуполярный" (положительный и отрицательный) enum.

Критичные ошибки - минус, ноль и плюс - без ошибок и некритичные.

Использую также "битовую" структуру. Взведенный старший бит - флаг наличия ошибки.

Для возврата ошибок через несколько уровней вызова, без использования try-catch,

самый "нижний" код ошибки транслируется "верхними" ф-ми с умножением на 10.

(по разрядности полученной ошибки можно судить с какого уровня "прилетело").

 

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


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

Насколько я помню функция может использовать до 4 32битных регистров для возвращения значения.

Это в каком компиляторе??

 

ЗЫ: Имхо - для таких тем нужно завести особую ветку форума. Озаглавить её "Конструирование сферических коней в вакууме". И разрешить вход только истинным кавалеристам. B)

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


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

Из функции можно возвратить структуру, в любом правильном компиляторе. Не предлагаю, но сообщаю.

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


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

Из функции можно возвратить структуру, в любом правильном компиляторе. Не предлагаю, но сообщаю.

Мне это известно. Только я всегда думал, что размер структуры в этом случае ограничен sizeof(int)*2. По-крайней мере в IAR for ARM.

Может где-то по-другому?

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


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

Из функции можно возвратить структуру, в любом правильном компиляторе. Не предлагаю, но сообщаю.

Ща модно говорить - объект. Объект ошибки.

Слово "сруктура" непроизвольно выдает склонность к ископаемым языкам. :biggrin:

 

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


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

Ща модно говорить - объект. Объект ошибки.

Слово "сруктура" непроизвольно выдает склонность к ископаемым языкам. :biggrin:

Действия и поступки структура и объект - одно и то же (, Айсман)!

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


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

Действия и поступки структура и объект - одно и то же (, Айсман)!

Дело не в семантике.

Язык определяет сознание

Поэтому от "структур" уже время отказаться. :laughing:

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


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

А как насчет высказывания jcxz?

Только я всегда думал, что размер структуры в этом случае ограничен sizeof(int)*2. По-крайней мере в IAR for ARM.

Я думаю, он нагло ошибается. :blink:

 

Дело не в семантике.

Поэтому от "структур" уже время отказаться. :laughing:

"В свое время мы поговорим и об этом." :biggrin:

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


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

Я думаю, он нагло ошибается. :blink:

Может иногда всё-таки лучше почитать мануал?

If the function returns a structure larger than 32 bits, the memory location where the 
structure is to be stored is passed as an extra parameter. Notice that it is always 
treated as the first parameter.

это о возврате структур.

 

The registers available for returning values are R0 and R0:R1.
...
long long and double-precision (64-bit) return values: R0:R1

А это - о том как всё-таки можно вернуть структуру размером sizeof(int)*2 в двух регистрах.

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


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

Первая цитата не показывает, что размер структуры ограничен двумя словами.

Вторая цитата не содержит слова "структура".

"Об чем вы, дядя Сидор?"

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


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

Это в каком компиляторе??

...

Только я всегда думал, что размер структуры в этом случае ограничен sizeof(int)*2.

Вы правы, я неправильно запомнил. Хотя мне казалось логичным сделать Argument = result = scratch, но инфоцентр 5.1.1 Core registers определяет по другому. И по передаче структур больше слова, тоже. Блин на х86 это сделано разумнее.

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


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

У вас в чипе 4Гб памяти?

ОЗУ? 140 кБ встроенной, и снаружи 32 Мб.

 

Из функции можно возвратить структуру, в любом правильном компиляторе. Не предлагаю, но сообщаю.

Да, это верно. Возвращаем,и даже не задумываемся.

 

Мне это известно. Только я всегда думал, что размер структуры в этом случае ограничен sizeof(int)*2. По-крайней мере в IAR for ARM.

Может где-то по-другому?

Не совсем понял, о чём вы?

 

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


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

Первая цитата не показывает, что размер структуры ограничен двумя словами.

Вторая цитата не содержит слова "структура".

Если не умеете читать и понимать даже выдержки из даташита - Ваши проблемы.

Может приведёте какие-то аргументы? Я аргументы привёл, от Вас - только трёп. :laughing:

 

Не совсем понял, о чём вы?

О том, что компилятор IAR (for ARM) позволяет использовать для возвращаемых значений до двух регистров (R0,R1).

Если кто-то знает другое (или про компилятор использующий большее число регистров) - плиз приведите аргументы.

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


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

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

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

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

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

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

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

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

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

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