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

Помощь в Keil Uvision 4

Помогите ответить на вопрос:

 

0x08000530 F000F878 BL.W __aeabi_memcpy4 (0x08000624)

 

А как вы думаете, зачем компилятор вставил вызов этой функции, хотя в вашем коде на С вызова нет?

 

Keil_4_Empty_Project.rar

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


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

Проект я не глядел, хотя там наверняка можно умеючи получить строку исходника, из которой получился вызов выше у ТС.

Компиляторы сейчас умные слишком (односторонне, в меру заумности своих авторов и невозможности перевложить душу, только разум) -- могут на присвоение одной структуры в другую такую бяку сделать. Наверняка в настройках это всё можно открутить.

Или при входе в функцию написано нечто типа "int a = 2, b = 3, c = 4;", может "легче" ему показаться отвести 3 инитных слова в кодовом сегменте, а на старте функции одним махом скопировать.

Но если юзер перегрузит эту "родную" memcpy4() своей версией -- могут быть проблемы.

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


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

Помогите ответить на вопрос:

 

0x08000530 F000F878 BL.W __aeabi_memcpy4 (0x08000624)

 

А как вы думаете, зачем компилятор вставил вызов этой функции, хотя в вашем коде на С вызова нет?

так это оптимизация,

а как он еще такое должен был реализовать?

int32_t mass1 [11] = {55,36,3,67,84,123,53,7,47,65,217};

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


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

А можно поподробнее?) Как и что он оптимизирует?

 

 

так это оптимизация,

а как он еще такое должен был реализовать?

int32_t mass1 [11] = {55,36,3,67,84,123,53,7,47,65,217};

Изменено пользователем Only

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


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

А можно поподробнее?) Как и что он оптимизирует?

за подробностями вам лучше к стандартам си обратиться.

что оптимизирует? у вас массив из 11 элементов - локальная переменная,

которая инициализируется неким значением,

итого на заполнение этого массива поэлементно потребовалось бы как минимум 22 инструкции,

а так всего 4 простым копированием.

А вот как оптимизирует, все зависит от компилятора.

 

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


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

Здравствуйте. Ещё такой вопрос) По коду,там где создаём структуру. При описании листинга дизассемблера структуры, препод спрашивает следующее:

 

Я пишу: Я понял так, что мы скопировали структуру в стек два раза.

 

>>>> И зачем же два раза?

 

Так, как у нас 11 элементов массива копируются не в регистры,а в стек. И функция работает с ними.

 

>>>> И все 11 копируются в стек?

 

Помогите пожалуйста разобраться с этим вопросом)

 

за подробностями вам лучше к стандартам си обратиться.

что оптимизирует? у вас массив из 11 элементов - локальная переменная,

которая инициализируется неким значением,

итого на заполнение этого массива поэлементно потребовалось бы как минимум 22 инструкции,

а так всего 4 простым копированием.

А вот как оптимизирует, все зависит от компилятора.

 

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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