Здравствуйте все.
Нашёл одну проблему при работе с GCC (yagarto(1206), kgp-arm-eabi_x86-32_20120427): Мои проекты доросли до такого размера, когда уже хочется использовать собственные библиотеки. Вот я и решил собрать STM32F4xx_StdPeriph_Driver как библиотеку libSTM32F4xx_StdPeriph_Driver.a.
Собирается хорошо. Работает. НО! Линкер тянет все функции из используемого obj файла в библиотете.
---------------------------------------------------------------------------- Библиотеку собираю так:
C_SOURCE = \ $(STDLIB_SRC_DIR)/src/misc.c \ $(STDLIB_SRC_DIR)/src/STM32F4xx_gpio.c \ $(STDLIB_SRC_DIR)/src/STM32F4xx_rcc.c \ .....
ALLFLAGS += \ -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard \ -Wall \ -ggdb \ -Os \ -MD -MP -MF $(OUTDIR)/.dep/$(@F).d \ -I inc \ -I . \ -I ./../CMSIS/Include \
AR_FLAGS = rcs $(PROJECT).a
----------------------------------------------------------------- А программу так:
ALLFLAGS += \ -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard \ -Wall \ -ggdb \ -Os \ -MD -MP -MF $(OUTDIR)/.dep/$(@F).d \ -I inc \ -I . \ -I ./../CMSIS/Include \ .....
ALLFLAGS += -ffunction-sections -fdata-sections -Wl,--gc-sections
LINKER_FLAGS = -nostartfiles -Xlinker -o$(ELFDIR)/$(PROJECT).elf -Xlinker -M -Xlinker -Map=$(OUTDIR)/$(PROJECT).map
>>>>>>>> 1) LINKER_FLAGS += $(STDLIB_SRC_DIR)/libSTM32F4xx_StdPeriph_Driver.a >>>>>>>> 2) C_SOURCE += $(STDLIB_SRC_DIR)/src/stm32f4xx_gpio.c
----------------------------------------------------------------- Сама программа простейшая:
int main( void ) { while( 1 ) { GPIO_WriteBit( GPIOB, GPIO_Pin_4, Bit_SET ); GPIO_WriteBit( GPIOB, GPIO_Pin_4, Bit_RESET ); } }
И получаю два варианта: 1) Используется libSTM32F4xx_StdPeriph_Driver.a text data bss dec hex filename 2152 16 256 2424 978 ./Control4.elf
2) Используется C_SOURCE += $(STDLIB_SRC_DIR)/src/stm32f4xx_gpio.c text data bss dec hex filename 536 0 256 792 318 ./Control4.elf
в map файле видно, что при подключении библиотеки тянутся все ненужные (в данном примере) функции GPIO_Init, GPIO_ReadOutputDataBit и т.д.
Что я делаю не так??? Подскажите пожалуйста.
P.S. Про флаг -flto я знаю. С ним оптимизируется всё хорошо. Но мне надо что-бы работало и отлаживалось без него.
Сообщение отредактировал AlexeyVoroshen - Oct 7 2012, 19:47
|