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

 
 
> Inline функции.
Jenya7
сообщение Feb 26 2015, 10:54
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



я в main вызываю функции. но я хочу сократить время исполнения. вместо того чтоб тратить время на переход к функциям я могу заинлайнить их. правильно ли я мыслю?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
XVR
сообщение Feb 26 2015, 12:52
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Это другое дело, тут проблема будет не в inline, а в double definition.
Давайте пока не будем рассматривать влияние inline (а равно как и static) на видимость функций и собираемость программ. (Тут еще template'ы можно вспомнить sm.gif )

Пока вопрос стоял так - нужно ли указывать компилятору inline у функции, что бы он ее заинлайнил? Ответ - для подавляющего большинства компиляторов - нет, они сами это сделают, если сочтут нужным.
Go to the top of the page
 
+Quote Post
MK2
сообщение Feb 27 2015, 13:21
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 30-10-10
Пользователь №: 60 535



Цитата(XVR @ Feb 26 2015, 15:52) *
Это другое дело, тут проблема будет не в inline, а в double definition.
Давайте пока не будем рассматривать влияние inline (а равно как и static) на видимость функций и собираемость программ. (Тут еще template'ы можно вспомнить sm.gif )

Пока вопрос стоял так - нужно ли указывать компилятору inline у функции, что бы он ее заинлайнил? Ответ - для подавляющего большинства компиляторов - нет, они сами это сделают, если сочтут нужным.

Тогда как скажите объяснить iar что бы он заинлайнил эту ф-цию, но и оптимизацией не выкинул пустой цикл?!
Код
void inline generation()      const
    {
  GPIO_PinOutToggle(gpioPortB, 13);

  for(uint16_t i = 0; i < 0x2; i++);

   GPIO_PinOutToggle(gpioPortB, 13);
    }
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Feb 27 2015, 13:58
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(MK2 @ Feb 27 2015, 13:21) *
Тогда как скажите объяснить iar что бы он заинлайнил эту ф-цию, но и оптимизацией не выкинул пустой цикл?!
Код
void inline generation()      const
    {
  GPIO_PinOutToggle(gpioPortB, 13);

  for(uint16_t i = 0; i < 0x2; i++);

   GPIO_PinOutToggle(gpioPortB, 13);
    }


1. за задержки на пустых циклах надо сразу отрывать сами знаете что. В этом случае генофонд человечества будет медленно, но улучшаться.
1.1 на сколько тактов задержки благородный дон рассчитывает в цикле данной конструкции?
1.2 платформозависимые кунштюки обычно плохо ложатся на платформонезависимый код, поэтому используют платформозависимые решения, типа asm "nop"

2. читать книжки про спецификатор volatile.
3. по возможности сделать эту функцию static
4. inline это всего лишь рекомендация, которой не всегда можно следовать. Например, что будет, если попытаться взять адрес заинлайненой функции ?
Go to the top of the page
 
+Quote Post
megajohn
сообщение Feb 27 2015, 14:06
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(CrimsonPig @ Feb 27 2015, 16:58) *
1.поэтому используют платформозависимые решения, типа asm "nop"


дык есть платформы, где такты периферии гораздо ниже тактов CPU, и что останется от авторской идеи - вооще вопрос.
Надо будет как-нибудь поэксперементировать на CM3


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Feb 27 2015, 14:16
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(megajohn @ Feb 27 2015, 14:06) *
дык есть платформы, где такты периферии гораздо ниже тактов CPU, и что останется от авторской идеи - вооще вопрос.
Надо будет как-нибудь поэксперементировать на CM3


Ну пусть сделает пару холостых записей (или чтений) в какой-нибудь регистр. Я же говорил, что к платформозависимым заморочкам надо подходить с платформозависимыми инструментами sm.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 18:39
Рейтинг@Mail.ru


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