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

 
 
 
Reply to this topicStart new topic
> Компиляция WinAVR
Aesthete Animus
сообщение Dec 11 2007, 13:48
Сообщение #1


Местный
***

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



Поясните, что я делаю (или понимаю) неправильно. Компилирую и линкую проект следующим образом:
Код
del *.elf
del *.bin
del *.hex
del *.obj
del *.map
del *.o
del *.lst
del *.eep



avr-gcc -g -Os -mmcu=atmega8 -c lib\utils.c
avr-gcc -g -Os -mmcu=atmega8 -c lib\uart.c

avr-gcc -g -Os -mmcu=atmega8 -c main.c

avr-gcc -g -mmcu=atmega8 -o main.elf main.o uart.o utils.o


avr-objcopy -O ihex main.elf main.hex


Если в каком-то из файлов, например в utils.h, есть функция, которая нигде не вызывается, то все равно, она линкуется в прошивку. Как сделать, что бы скомпилирован и слинкован был только тот код, который действительно будет выполняться?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 11 2007, 13:54
Сообщение #2


Гуру
******

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



Цитата(Aesthete Animus @ Dec 11 2007, 15:48) *
Как сделать, что бы скомпилирован и слинкован был только тот код, который действительно будет выполняться?

Пользоваться библиотеками, или условной компиляцией.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Dec 11 2007, 14:00
Сообщение #3


Местный
***

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



Цитата(zltigo @ Dec 11 2007, 16:54) *
Пользоваться ... условной компиляцией.

А можете пояснить? Желательно, с примерами smile.gif
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Dec 11 2007, 14:43
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 ну чтоб так просто - лезем в "C:\WinAVR\avr\include " и там берём например - error.h открываем его и видим

#if defined (FULL_ERROR_SUPPORT)
#define ERRSUP_IOMAN
#define ERRSUP_DISC
#define ERRSUP_PARTITION
#define ERRSUP_FAT_FILESYSTEM
#define ERRSUP_FAT_FILESYSTEM
#elif defined (BASE_ERROR_SUPPORT)
#define ERRSUP_IOMAN
#define ERRSUP_DISC
#define ERRSUP_PARTITION
#endif

#if defined (HWINT_HAS_ERROR_SUPPORT) && defined (INTERFACE_ERROR_SUPPORT)
#define ERRSUP_HWINTERFACE
#endif

#ifdef ERRSUP_IOMAN
#define IOMAN_ERR_EUINT8 euint8 error;
#define ioman_setError(ioman,errval) ioman->error = errval
#define ioman_getError(ioman) ioman->error
#else
#define IOMAN_ERR_EUINT8
#define ioman_setError(ioman,errval)
#define ioman_getError(ioman) 0
#endif


1-я строчка означает что если определено FULL_ERROR_SUPPORT, тогда определяются ERRSUP_IOMAN и так далее, а если BASE_ERROR_SUPPORT - тогда ERRSUP_IOMAN и так далее.. Ну а далее вам прочитать думаю труда не составит.. если хотите чтото посложней - лезьте на http://elm-chan.org и там исчите ff004b.zip или ffsample.zip - от там точно наглядный пример хорошо подготовленной программы с возможность условной компиляции...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 11 2007, 15:13
Сообщение #5


Гуру
******

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



Дать компилятору ключ -ffunction-sections (--fdata-sections аналогично для данных), а линкеру - -gc-sections:
Код
CFLAGS += -ffunction-sections
CFLAGS += -fdata-sections

LDFLAGS += -Wl,--gc-sections


--------------------
На любой вопрос даю любой ответ
"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
Aesthete Animus
сообщение Dec 12 2007, 08:09
Сообщение #6


Местный
***

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



Цитата(Сергей Борщ @ Dec 11 2007, 18:13) *
Дать компилятору ключ -ffunction-sections (--fdata-sections аналогично для данных), а линкеру - -gc-sections:
Код
CFLAGS += -ffunction-sections
CFLAGS += -fdata-sections

LDFLAGS += -Wl,--gc-sections

Спасибо! Это имеено то, что я хотел узнать. А где можно найти описание всех ключей компилятора?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 12 2007, 09:18
Сообщение #7


Гуру
******

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



Цитата(Aesthete Animus @ Dec 12 2007, 10:09) *
Спасибо! Это имеено то, что я хотел узнать. А где можно найти описание всех ключей компилятора?
Частично в документации, частично на этом форуме... smile.gif


--------------------
На любой вопрос даю любой ответ
"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

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

 


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


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