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

 
 
 
Reply to this topicStart new topic
> Помощь в Keil Uvision 4, BL.W __aeabi_memcpy4
Only
сообщение Nov 19 2014, 21:14
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 16-11-14
Пользователь №: 83 698



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

0x08000530 F000F878 BL.W __aeabi_memcpy4 (0x08000624)

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


Прикрепленные файлы
Прикрепленный файл  Keil_4_Empty_Project.rar ( 370.56 килобайт ) Кол-во скачиваний: 8
 
Go to the top of the page
 
+Quote Post
редактор
сообщение Nov 20 2014, 08:52
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



может быть банальная инициализация данных при старте


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
WitFed
сообщение Nov 20 2014, 10:36
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 271
Регистрация: 6-12-11
Из: Taganrog
Пользователь №: 68 701



Проект я не глядел, хотя там наверняка можно умеючи получить строку исходника, из которой получился вызов выше у ТС.
Компиляторы сейчас умные слишком (односторонне, в меру заумности своих авторов и невозможности перевложить душу, только разум) -- могут на присвоение одной структуры в другую такую бяку сделать. Наверняка в настройках это всё можно открутить.
Или при входе в функцию написано нечто типа "int a = 2, b = 3, c = 4;", может "легче" ему показаться отвести 3 инитных слова в кодовом сегменте, а на старте функции одним махом скопировать.
Но если юзер перегрузит эту "родную" memcpy4() своей версией -- могут быть проблемы.
Go to the top of the page
 
+Quote Post
UniSoft
сообщение Nov 21 2014, 15:14
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 7-05-05
Из: China, Shenzhen
Пользователь №: 4 812



Цитата(Only @ Nov 20 2014, 05:14) *
Помогите ответить на вопрос:

0x08000530 F000F878 BL.W __aeabi_memcpy4 (0x08000624)

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

так это оптимизация,
а как он еще такое должен был реализовать?
int32_t mass1 [11] = {55,36,3,67,84,123,53,7,47,65,217};
Go to the top of the page
 
+Quote Post
Only
сообщение Nov 21 2014, 17:17
Сообщение #5





Группа: Участник
Сообщений: 11
Регистрация: 16-11-14
Пользователь №: 83 698



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


Цитата(UniSoft @ Nov 21 2014, 16:14) *
так это оптимизация,
а как он еще такое должен был реализовать?
int32_t mass1 [11] = {55,36,3,67,84,123,53,7,47,65,217};


Сообщение отредактировал Only - Nov 21 2014, 17:17
Go to the top of the page
 
+Quote Post
UniSoft
сообщение Nov 21 2014, 19:11
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 7-05-05
Из: China, Shenzhen
Пользователь №: 4 812



Цитата(Only @ Nov 22 2014, 01:17) *
А можно поподробнее?) Как и что он оптимизирует?

за подробностями вам лучше к стандартам си обратиться.
что оптимизирует? у вас массив из 11 элементов - локальная переменная,
которая инициализируется неким значением,
итого на заполнение этого массива поэлементно потребовалось бы как минимум 22 инструкции,
а так всего 4 простым копированием.
А вот как оптимизирует, все зависит от компилятора.
Go to the top of the page
 
+Quote Post
Only
сообщение Nov 25 2014, 18:22
Сообщение #7





Группа: Участник
Сообщений: 11
Регистрация: 16-11-14
Пользователь №: 83 698



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

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

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

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

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

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

Цитата(UniSoft @ Nov 21 2014, 20:11) *
за подробностями вам лучше к стандартам си обратиться.
что оптимизирует? у вас массив из 11 элементов - локальная переменная,
которая инициализируется неким значением,
итого на заполнение этого массива поэлементно потребовалось бы как минимум 22 инструкции,
а так всего 4 простым копированием.
А вот как оптимизирует, все зависит от компилятора.

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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