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

 
 
> Yagarto Eclipse+GCC4.2.1/4.2.2 - в хидерах компилятся все функции!, Это такая "особенность" или я ... ?
injen-d
сообщение Jan 11 2008, 19:40
Сообщение #1


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

Группа: Свой
Сообщений: 91
Регистрация: 10-10-07
Из: Воронежа
Пользователь №: 31 250



Всем доброго времени суток.
Помогите пожалуйста, может кто сталкивался с подобными непонятками, буду очень признателен.
Не так давно AVRа стало маловато, решил переходить на ARM7, причем софт решил использовать свободный, чтоб так сказать все по честному. Выбор пал на YAGARTO Eclipse + GCC. До этого писал преимущественно на ассемблере, поэтому столкнулся с массой трудностей. Но постепенно все прояснялось, вот только со следующей проблемой борюсь уже 2 дня и ни сколько не продвинулся в ее решении. wacko.gif
Даже появились грешные мысли воспользоваться ломаным иаром или кейлом 05.gif
Проблема в следующем:
решил я воспользоваться файлом "libAT91SAM7S256.h" (взял его где-то из примеров) и сразу после его подключения и последующей компиляции (ни одну из его функций я еще не использовал) размер генерируемого кода увеличился с 1К до 17К. Как выяснилось компилятся все функции независимо от того, вызывались они или нет. После "танцев с бубном, протирки монитора и постукивания по системнику" совершенно чудесным образом хидер начал компилиться как надо: только те функции которые были вызваны из main (или другой функции). 08.gif
На радостях я решил сделать еще один хидер назвал его "icpsr.h" и вставил содержимое из файла "isrsupport.c" из примера demo_at91sam7_blink_flash. И тут опять старая проблема! Причем "libAT91SAM7S256.h" работает правильно, а "icpsr.h" компилится весь. Приведенные выше маневры не помогли. Подскажите, плиз проблема в компиляторе или в моей голове?
Проэкт прилагается.
Прикрепленный файл  NEW_workspace.rar ( 802.72 килобайт ) Кол-во скачиваний: 154


ЗЫ: при установке компилятору уровня оптимизации отличного от -О0 размер кода заметно сокращается, но компилятор начинает полностью игнорировать конструкции типа:
for (k = 600000; k != 0; k-- ); как будто их не существует!


--------------------
- Бендер, ты же робот, зачем тебе пить пиво?
- Незачем! Я могу бросить в любой момент!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
injen-d
сообщение Jan 13 2008, 10:33
Сообщение #2


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

Группа: Свой
Сообщений: 91
Регистрация: 10-10-07
Из: Воронежа
Пользователь №: 31 250



Цитата
Указание в скрипте линкера входных секций как *(.text.*) не помогло?

Еще как помогло! smile.gif
Правда файл crt.s перестал линковаться (вместо ассемблерных команд непонятные значения, занимающие тот же объем в итоговом файле). Но после вставки скрипта из примеров для WinARM и небольших в нем исправлений, все заработало.
В main.dmp вижу:
Код
0010047c <EnableFIQ>:
  10047c:    e10f0000     mrs    r0, CPSR
  100480:    e3c03040     bic    r3, r0, #64; 0x40
  100484:    e129f003     msr    CPSR_fc, r3
  100488:    e12fff1e     bx    lr
Disassembly of section .text.EnableIRQ:

0010048c <EnableIRQ>:
  10048c:    e10f0000     mrs    r0, CPSR
  100490:    e3c03080     bic    r3, r0, #128; 0x80
  100494:    e129f003     msr    CPSR_fc, r3
  100498:    e12fff1e     bx    lr
Disassembly of section .text.RestoreIRQ:

0010049c <RestoreIRQ>:
  10049c:    e10f2000     mrs    r2, CPSR
  1004a0:    e2000080     and    r0, r0, #128; 0x80
  1004a4:    e3c23080     bic    r3, r2, #128; 0x80
  1004a8:    e1833000     orr    r3, r3, r0
  1004ac:    e129f003     msr    CPSR_fc, r3
  1004b0:    e1a00002     mov    r0, r2
  1004b4:    e12fff1e     bx    lr

таким образом каждая функция расположена в своей секции, уровни оптимизации пробовал разные, в данном случае -Оs. Все функции на месте, хотя я вызываю только EnableIRQ() один раз в main.c.
Пробовал комментировать вызовы функций, находящихся в USART_setup.c в частности USART0_setup();
Картина та же - исчезает только команда вызова.
Может еще каких-нибудь флажков в мэйкфайле не хватает? laughing.gif
Цитата
Поэтому, даже если будете пользоваться библиотеками, вам придется каждую функцию компилировать в библиотеку из отдельного исходного файла - иначе получите то же самое, что и сейчас.

Вы, Сергей, абсолютно правы - уже убедился, так и есть: при вызове одной подключаются все. Слишком накладно получается каждую функцию из отдельного файла. unsure.gif


--------------------
- Бендер, ты же робот, зачем тебе пить пиво?
- Незачем! Я могу бросить в любой момент!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 13 2008, 10:41
Сообщение #3


Гуру
******

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



Цитата(injen-d @ Jan 13 2008, 12:33) *
Слишком накладно получается каждую функцию из отдельного файла. unsure.gif

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- injen-d   Yagarto Eclipse+GCC4.2.1/4.2.2 - в хидерах компилятся все функции!   Jan 11 2008, 19:40
- - Сергей Борщ   Цитата(injen-d @ Jan 11 2008, 21:40)...   Jan 11 2008, 21:17
- - injen-d   Спасибо за разъяснение, но это проблему не решило....   Jan 12 2008, 19:01
|- - Сергей Борщ   Цитата(injen-d @ Jan 12 2008, 21:01)...   Jan 12 2008, 19:35
|- - zltigo   Цитата(injen-d @ Jan 12 2008, 21:01)...   Jan 12 2008, 19:44
|- - injen-d   Цитата(zltigo @ Jan 12 2008, 22:44) А с к...   Jan 12 2008, 19:56
|- - zltigo   Цитата(injen-d @ Jan 12 2008, 21:56)...   Jan 12 2008, 20:46
|- - injen-d   Цитата(zltigo @ Jan 12 2008, 23:46) Дык, ...   Jan 12 2008, 20:50
|- - Сергей Борщ   Цитата(injen-d @ Jan 12 2008, 22:50)...   Jan 12 2008, 22:39
|- - Сергей Борщ   Цитата(injen-d @ Jan 13 2008, 12:33)...   Jan 13 2008, 11:25
- - injen-d   Цитатагруппы функций разбить по файлам Значит вс...   Jan 13 2008, 11:02
|- - zltigo   Цитата(injen-d @ Jan 13 2008, 13:02)...   Jan 13 2008, 11:28
- - injen-d   ЦитатаДо меня только сегодня дошло - вы опцию, кот...   Jan 13 2008, 11:47
|- - Сергей Борщ   Цитата(injen-d @ Jan 13 2008, 13:47)...   Jan 13 2008, 12:12
- - injen-d   Добавил: Код. = 0x0000000; .text : { KEEP...   Jan 13 2008, 12:44
- - Сергей Борщ   Цитата(injen-d @ Jan 13 2008, 14:44)...   Jan 13 2008, 19:03


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

 


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


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