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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> научить IAR AVR 5.5 оптимизировать сохранение регистров, при вызове между модулями
megajohn
сообщение Jul 12 2012, 08:15
Сообщение #1


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

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



в прерывании вызываю функцию, которая в другом файле/модуле инкрементирует байт.
Дык IAR нагенерил код, который перед вызовом функции сохраняет в стек не менее 16 регистров, и после выполнения восстанавливает. А в той функции юзается только один R16.
Пробовал с макчсимальной оптимизицией по скорости и коду. Это костыль от IAR как нибудь обходится ?



--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 12 2012, 08:30
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Можно попробовать Multifile Compilation (--mfc).
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 12 2012, 08:46
Сообщение #3


Гуру
******

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



Я как то бодался с этой фигней в итоге написал обработчик на ассемблере


--------------------
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 12 2012, 08:50
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(megajohn @ Jul 12 2012, 12:15) *
в прерывании вызываю функцию, которая в другом файле/модуле инкрементирует байт.


Если функция вида
Код
void F(void) { ++X; }
то, почему бы её не сделать
Код
#pragma inline

Go to the top of the page
 
+Quote Post
megajohn
сообщение Jul 12 2012, 09:03
Сообщение #5


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

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



помнится, вызов inline Между модулями в IAR не допустим и вызвает ошибку компиляции/линковки.

пока помог обращение через extern


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 12 2012, 09:14
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(megajohn @ Jul 12 2012, 13:03) *
помнится, вызов inline Между модулями в IAR не допустим и вызвает ошибку компиляции/линковки.

"просто вы не умеете их готовить..." (С) из рекламы

Цитата(megajohn @ Jul 12 2012, 13:03) *
пока помог обращение через extern
Тоже выход... Можно считать, что это тот же "inline", но "руками"...
Go to the top of the page
 
+Quote Post
megajohn
сообщение Jul 12 2012, 09:22
Сообщение #7


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

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



Цитата(Палыч @ Jul 12 2012, 13:14) *
"просто вы не умеете их готовить..." (С) из рекламы


я уже и так
inline static void app_init( void )

и так
#pragma inline = forced
void app_init( void )

но не работает. Как правильно ?


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 12 2012, 09:39
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (megajohn @ Jul 12 2012, 12:22) *
Как правильно ?
Поместить тело функции в заголовочный файл модуля, чтобы компилятор знал, что же именно встраивать в точку вызова?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
megajohn
сообщение Jul 12 2012, 09:41
Сообщение #9


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

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



Цитата(scifi @ Jul 12 2012, 12:30) *
Можно попробовать Multifile Compilation (--mfc).


EWAVR_CompilerReference.pdf
EWAVR_UserGuide.pdf

ничего такого не знают


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 12 2012, 09:55
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(megajohn @ Jul 12 2012, 13:41) *
EWAVR_CompilerReference.pdf
EWAVR_UserGuide.pdf

ничего такого не знают

Что интересно, у меня есть Яр для Coldfire, у него тоже ничего такого в мануалах не написано. А суслик есть - проверено. Работает так же, как, например, в Яр для Арм.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 12 2012, 11:39
Сообщение #11


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
в прерывании вызываю функцию, которая в другом файле/модуле инкрементирует байт.
Дык IAR нагенерил код, который перед вызовом функции сохраняет в стек не менее 16 регистров, и после выполнения восстанавливает. А в той функции юзается только один R16.


IAR все делает правильно. Если надо экономить - инлайнте функции.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 12 2012, 12:40
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(megajohn @ Jul 12 2012, 12:41) *
EWAVR_CompilerReference.pdf
EWAVR_UserGuide.pdf

ничего такого не знают

Как не знают?
Пункт "Summary of compiler options":
Цитата
--mfc Enables multi-file compilation
Go to the top of the page
 
+Quote Post
megajohn
сообщение Jul 12 2012, 14:13
Сообщение #13


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

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



Цитата(_Артём_ @ Jul 12 2012, 16:40) *
Как не знают?
Пункт "Summary of compiler options":


Нету в моем

"EWAVR_UserGuide.pdf"
EDITION NOTICE
Fifth edition: May 2009
Part number: UAVR-5
This guide describes version 5.x of the IAR Embedded Workbench® IDE for Atmel®
Corporation’s AVR microcontroller.
Internal reference: R8, 5.3, IMAE.

"EWAVR_CompilerReference.pdf"
EDITION NOTICE
Fourth edition: February 2005
Part number: CAVR-4
This guide applies to version 4.x of AVR IAR Embedded Workbench®.

вышлите плз свои версии на megajohn@inbox.ru


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 12 2012, 14:42
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(megajohn @ Jul 12 2012, 17:13) *
Нету в моем

Да, в описании 5-го действительно нет, но есть на вкладке General Options - C/C++ compiler options.

Go to the top of the page
 
+Quote Post
megajohn
сообщение Jul 13 2012, 06:01
Сообщение #15


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

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



Цитата(_Артём_ @ Jul 12 2012, 18:42) *
Да, в описании 5-го действительно нет, но есть на вкладке General Options - C/C++ compiler options.


Да, то что доктор прописал. Сразу с 1кб флеши высвободился из 20кб


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 19:11
Рейтинг@Mail.ru


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