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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Не могу решить проблему вызова функций IAR, используется 1 раз, но вызывается call
starter48
сообщение Oct 28 2005, 19:29
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 15-10-05
Из: Томск
Пользователь №: 9 680



Цитата(prottoss @ Oct 29 2005, 01:59)
Цитата(starter48 @ Oct 29 2005, 01:11)
Зачем спрашивал, если сам всё знаешь? smile.gif


Цитата(starter48 @ Oct 28 2005 @ 23:52)
Нужно объявить переменную как extern в .h файле с функцией.


Где ж тут разграничение пространства имен? Если глобальные переменные одного модуля известны всем модулям?
*


А как ты собрался инлайнить ф-ю одного модуля в другой, если эта ф-я использует статические переменные в другом модуле?
Переменные, которые ты собрался использовать во встраиваемых ф-ях нужно сделать видимыми для всех, т.к. статическую переменную оптимизатор может просто выкинуть.
При инлайне код ф-ии встраивается в код соответствующего модуля, значит, и доступ к используемым в этой ф-ии переменным из этого модуля должен быть.
Разграничение пр-ва имён будет действовать на те переменные и ф-ии, которые объявлены со словом static. Вообще, все переменные и ф-ии, которые не используются в других модулях следует объявлять как static, т.к. это развязывает руки компилятору для оптимизации.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 29 2005, 19:27
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(starter48 @ Oct 29 2005, 03:29)
А как ты собрался инлайнить ф-ю одного модуля в другой, если эта ф-я использует статические переменные в другом модуле?
Переменные, которые ты собрался использовать во встраиваемых ф-ях нужно сделать видимыми для всех, т.к. статическую переменную оптимизатор может просто выкинуть.


Я не собирался и не собираюсь ничего инлайнить. Эти вопросы к автору темы. Я использую инлайн функции только для прерываний или для функций и только в одном модуле с целью оптимизировать код в модуле.

Как правило один модуль в проекте отвечает за какой то один блок устройства. Это сродни классу в СРР, если вы пишите на протом Си. Поэтому, глобальные переменные одного модуля, я не показываю никогда другому модулю. Если же мне надо получить доступ к переменным одного модуля у другого, я делаю функции GetЧтоТо { return g_ЧтоТо; } или SetЧтоТо(value) { g_ЧтоТо = value;} и объявляю их в хедере модуля. Это все, конечно, не буквально, но что то в этом духе.

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


--------------------
Go to the top of the page
 
+Quote Post
_artem_
сообщение Oct 29 2005, 19:43
Сообщение #18


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Po moemu C99 podderzivaet inline keyword . No IAR ego (C99) ne podderzivaet . )

Drugoe resenie pisat inline funkcii na makro . No pomoemu nado ispolzovat figurnie skobki dlya declaration vremennix peremennix . Xotya mogu i osibatsya .


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
halfdoom
сообщение Oct 31 2005, 10:40
Сообщение #19


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

Группа: Свой
Сообщений: 1 003
Регистрация: 20-01-05
Пользователь №: 2 072



Цитата(haker_fox @ Oct 27 2005, 02:29)
Моя программа состоит из нескольких модулей. Есть главный модуль main.c, в нем для инициализации различных частей программы вызываются функции из других модулей. Причем эти функции используются однократно, при запуске программы. Уровень оптимизации стоит максимальный и по размеру кода.

Функции из разых модулей не могут быть встроены. Что-бы обойти эти поблемы последние версии иар имеют ключик позволяющий компилировать несколько модулей одновременно с формированием одного объектного файла.
Go to the top of the page
 
+Quote Post
Balaganov
сообщение Nov 26 2005, 11:38
Сообщение #20


Участник
*

Группа: Свой
Сообщений: 41
Регистрация: 16-02-05
Пользователь №: 2 688



Цитата(halfdoom @ Oct 31 2005, 13:40) *
Цитата(haker_fox @ Oct 27 2005, 02:29)
Моя программа состоит из нескольких модулей. Есть главный модуль main.c, в нем для инициализации различных частей программы вызываются функции из других модулей. Причем эти функции используются однократно, при запуске программы. Уровень оптимизации стоит максимальный и по размеру кода.

Функции из разых модулей не могут быть встроены. Что-бы обойти эти поблемы последние версии иар имеют ключик позволяющий компилировать несколько модулей одновременно с формированием одного объектного файла.

Если можно поподробнее что за ключ? Искал в хелпе на 4.11а, но видимо плохо.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 26 2005, 22:26
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Balaganov @ Nov 26 2005, 13:38) *
Если можно поподробнее что за ключ? Искал в хелпе на 4.11а, но видимо плохо.


--mfc
Enable multiple file compilation

В IAR ARM ANSI C/C++ Compiler V4.30A-P050906/W32
имеет место быть, правда помечен, как эспериментальный.
А в хелпах его, как и многого другого, нет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Balaganov
сообщение Nov 27 2005, 22:48
Сообщение #22


Участник
*

Группа: Свой
Сообщений: 41
Регистрация: 16-02-05
Пользователь №: 2 688



Цитата(zltigo @ Nov 27 2005, 01:26) *
Цитата(Balaganov @ Nov 26 2005, 13:38) *

Если можно поподробнее что за ключ? Искал в хелпе на 4.11а, но видимо плохо.


--mfc
Enable multiple file compilation

В IAR ARM ANSI C/C++ Compiler V4.30A-P050906/W32
имеет место быть, правда помечен, как эспериментальный.
А в хелпах его, как и многого другого, нет.

А для AVR нету подобного? А то студия при пошаговой отладке не переходит на include файл если функция в нем является inline sad.gif
Go to the top of the page
 
+Quote Post

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

 


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


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