|
|
  |
Коды завершения функции |
|
|
|
Apr 24 2018, 14:59
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
Цитата(ViKo @ Apr 24 2018, 08:26)  Иногда приходится придумывать некие коды, информирующие о той или иной ошибке при выходе из функции. . . . Я использую "двуполярный" (положительный и отрицательный) enum. Критичные ошибки - минус, ноль и плюс - без ошибок и некритичные. Использую также "битовую" структуру. Взведенный старший бит - флаг наличия ошибки. Для возврата ошибок через несколько уровней вызова, без использования try-catch, самый "нижний" код ошибки транслируется "верхними" ф-ми с умножением на 10. (по разрядности полученной ошибки можно судить с какого уровня "прилетело").
|
|
|
|
|
Apr 25 2018, 06:23
|

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

|
А как насчет высказывания jcxz? Цитата Только я всегда думал, что размер структуры в этом случае ограничен sizeof(int)*2. По-крайней мере в IAR for ARM. Я думаю, он нагло ошибается.  Цитата(AlexandrY @ Apr 25 2018, 09:12)  Дело не в семантике. Поэтому от "структур" уже время отказаться.  "В свое время мы поговорим и об этом."
|
|
|
|
|
Apr 25 2018, 07:05
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(ViKo @ Apr 25 2018, 09:23)  Я думаю, он нагло ошибается.  Может иногда всё-таки лучше почитать мануал? Код 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 в двух регистрах.
|
|
|
|
|
Apr 25 2018, 07:37
|
Знающий
   
Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842

|
Цитата(jcxz @ Apr 24 2018, 19:28)  Это в каком компиляторе?? ... Только я всегда думал, что размер структуры в этом случае ограничен sizeof(int)*2. Вы правы, я неправильно запомнил. Хотя мне казалось логичным сделать Argument = result = scratch, но инфоцентр 5.1.1 Core registers определяет по другому. И по передаче структур больше слова, тоже. Блин на х86 это сделано разумнее.
|
|
|
|
|
Apr 25 2018, 07:38
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (Kabdim @ Apr 24 2018, 22:39)  У вас в чипе 4Гб памяти? ОЗУ? 140 кБ встроенной, и снаружи 32 Мб. QUOTE (ViKo @ Apr 25 2018, 02:39)  Из функции можно возвратить структуру, в любом правильном компиляторе. Не предлагаю, но сообщаю. Да, это верно. Возвращаем,и даже не задумываемся. QUOTE (jcxz @ Apr 25 2018, 02:44)  Мне это известно. Только я всегда думал, что размер структуры в этом случае ограничен sizeof(int)*2. По-крайней мере в IAR for ARM. Может где-то по-другому? Не совсем понял, о чём вы?
--------------------
Выбор.
|
|
|
|
|
Apr 25 2018, 07:41
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(ViKo @ Apr 25 2018, 10:33)  Первая цитата не показывает, что размер структуры ограничен двумя словами. Вторая цитата не содержит слова "структура". Если не умеете читать и понимать даже выдержки из даташита - Ваши проблемы. Может приведёте какие-то аргументы? Я аргументы привёл, от Вас - только трёп.  Цитата(haker_fox @ Apr 25 2018, 10:38)  Не совсем понял, о чём вы? О том, что компилятор IAR (for ARM) позволяет использовать для возвращаемых значений до двух регистров (R0,R1). Если кто-то знает другое (или про компилятор использующий большее число регистров) - плиз приведите аргументы.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|