Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компиляция WinAVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Aesthete Animus
Поясните, что я делаю (или понимаю) неправильно. Компилирую и линкую проект следующим образом:
Код
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, есть функция, которая нигде не вызывается, то все равно, она линкуется в прошивку. Как сделать, что бы скомпилирован и слинкован был только тот код, который действительно будет выполняться?
zltigo
Цитата(Aesthete Animus @ Dec 11 2007, 15:48) *
Как сделать, что бы скомпилирован и слинкован был только тот код, который действительно будет выполняться?

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

А можете пояснить? Желательно, с примерами smile.gif
Kuzmi4
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 - от там точно наглядный пример хорошо подготовленной программы с возможность условной компиляции...
Сергей Борщ
Дать компилятору ключ -ffunction-sections (--fdata-sections аналогично для данных), а линкеру - -gc-sections:
Код
CFLAGS += -ffunction-sections
CFLAGS += -fdata-sections

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

LDFLAGS += -Wl,--gc-sections

Спасибо! Это имеено то, что я хотел узнать. А где можно найти описание всех ключей компилятора?
Сергей Борщ
Цитата(Aesthete Animus @ Dec 12 2007, 10:09) *
Спасибо! Это имеено то, что я хотел узнать. А где можно найти описание всех ключей компилятора?
Частично в документации, частично на этом форуме... smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.