|
Подключение libc (из состава arm-kgp-eabi) на STM32, Необходимо подключит стандартную библиотеку к проекту |
|
|
|
Feb 17 2011, 06:18
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 21-01-11
Пользователь №: 62 381

|
Пытаюсь подключить стандартную библиотеку к проекту для STM32. Использую Eclipse + тулчейн от KGP. Насколько я понимаю, линкер должен выдать мне десяток сообщений о том, что не найдены системные вызовы типа sbrk, read, write и т.д., но ничего подобного не происходит все компилится на ура. Однако при попытке вызова printf() проц вываливается в HardFault. Если я правильно понимаю это может происходить из-за проблем с адресацией(?). Т.е., например, указатель указывает на область данных? Параметры компиляции: Код CROSS_COMPILE = arm-kgp-eabi- CC = $(CROSS_COMPILE)gcc LD = $(CROSS_COMPILE)gcc AR = $(CROSS_COMPILE)ar AS = $(CROSS_COMPILE)as CP = $(CROSS_COMPILE)objcopy OD = $(CROSS_COMPILE)objdump OPENOCD = openocd
CCFLAGS = -std=c99 -I./ -c -fno-common -O0 -g -mcpu=cortex-m3 -mthumb -DSTM32F10X_HD -DUSE_FULL_ASSERT -DUSE_STDPERIPH_DRIVER ARFLAGS = -rcs LDFLAGS = -Tstm32_flash.ld -nostartfiles -nostdlib -L../lib CPFLAGS = -Obinary ODFLAGS = -S В чем может быть косяк? PS Могу выложить Makefile целиком, если необходимо
|
|
|
|
|
 |
Ответов
|
Feb 17 2011, 07:36
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 21-01-11
Пользователь №: 62 381

|
Вот... Тот кусок, что в первом посте и есть options.mk, который подключается ниже Код include ../options.mk
# NOTICE: reflash.cfg utilizes file main.bin, # thus when changing $BIN make corresponding changes in reflash.cfg
# final binary (put it in the root directory) BIN = main.bin
# add library parts to be compiled LIB_OPT = misc.c LIB_OPT += stm32f10x_rcc.c LIB_OPT += stm32f10x_gpio.c LIB_OPT += stm32f10x_tim.c LIB_OPT += stm32f10x_usart.c LIB_OPT += stm32f10x_dma.c LIB_OPT += stm32f10x_spi.c
VPATH = ../lib
#TARGET = STM32F10X_HD
# sources and objects directories SRC_DIR = ./src OBJ_DIR = ./obj
# list of sources in SRC_DIR directory SRC = $(wildcard $(SRC_DIR)/*.c) # remove directory part from the list of sources SRC_PLAIN = $(notdir $(SRC))
# list of objects in OBJ_DIR directory OBJ = $(patsubst %, $(OBJ_DIR)/%, $(SRC_PLAIN:.c=.o))
# main output file MAIN_OUT = $(patsubst %, $(OBJ_DIR)/%, $(patsubst %.bin, %.out, $(notdir $(BIN)))) # disassembly of the main output object LIST_OUT = $(MAIN_OUT:.out=.list) # memory map file MAP_OUT = $(MAIN_OUT:.out=.map)
# include CMSIS library paths CCFLAGS += -I../lib/libcmsis -I../lib/libstdperiph/inc # generate map file LDFLAGS += -Wl,-Map='$(MAP_OUT)',--cref,--gc-sections
all: $(BIN)
$(BIN): $(MAIN_OUT) @echo "--------------- copying ---------------" $(CP) $(CPFLAGS) $(MAIN_OUT) $(BIN) $(OD) $(ODFLAGS) $(MAIN_OUT) > $(LIST_OUT) $(MAIN_OUT): $(OBJ) libs @echo "--------------- linking ---------------" $(LD) $(LDFLAGS) -o $(MAIN_OUT) $(OBJ) -lstdperiph -lc -lgcc libs: @echo "--------------- making libraries ------" make all -C ../lib LIB_OPT='$(LIB_OPT)' $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c @echo "--------------- compiling -------------" $(CC) $(CCFLAGS) -c $< -o $@ clean: @echo "--------------- cleaning --------------" make clean -C ../lib rm -f $(OBJ) $(MAIN_OUT) $(BIN) $(LIST_OUT) $(MAP_OUT) reflash: $(BIN) @echo "--------------- programming flash -----" $(OPENOCD) -f armusbocd.cfg -f reflash.cfg stm32_flash.ld Код /* Entry Point */ ENTRY(Reset_Handler)
/* Highest address of the user mode stack */ _estack = 0x20010000; /* end of 64K RAM */
/* Generate a link error if heap and stack don't fit into RAM */ _Min_Heap_Size = 0; /* required amount of heap */ _Min_Stack_Size = 0x200; /* required amount of stack */
/* Specify the memory areas */ MEMORY { FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K }
/* Define output sections */ SECTIONS { /* The startup code goes first into FLASH */ .isr_vector : { . = ALIGN(4); KEEP(*(.isr_vector)) /* Startup code */ . = ALIGN(4); } >FLASH
/* The program code and other data goes into FLASH */ .text : { . = ALIGN(4); *(.text) /* .text sections (code) */ *(.text*) /* .text* sections (code) */ *(.rodata) /* .rodata sections (constants, strings, etc.) */ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ *(.glue_7) /* glue arm to thumb code */ *(.glue_7t) /* glue thumb to arm code */
KEEP (*(.init)) KEEP (*(.fini))
. = ALIGN(4); _etext = .; /* define a global symbols at end of code */ } >FLASH
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH .ARM : { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH
.ARM.attributes : { *(.ARM.attributes) } > FLASH
.preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(.fini_array*)) KEEP (*(SORT(.fini_array.*))) PROVIDE_HIDDEN (__fini_array_end = .); } >FLASH
/* used by the startup to initialize data */ _sidata = .;
/* Initialized data sections goes into RAM, load LMA copy after code */ .data : AT ( _sidata ) { . = ALIGN(4); _sdata = .; /* create a global symbol at data start */ *(.data) /* .data sections */ *(.data*) /* .data* sections */
. = ALIGN(4); _edata = .; /* define a global symbol at data end */ } >RAM
/* Uninitialized data section */ . = ALIGN(4); .bss : { /* This is used by the startup in order to initialize the .bss secion */ _sbss = .; /* define a global symbol at bss start */ __bss_start__ = _sbss; *(.bss) *(.bss*) *(COMMON)
. = ALIGN(4); _ebss = .; /* define a global symbol at bss end */ __bss_end__ = _ebss; } >RAM
PROVIDE ( end = _ebss ); PROVIDE ( _end = _ebss );
/* User_heap_stack section, used to check that there is enough RAM left */ ._user_heap_stack : { . = ALIGN(4); . = . + _Min_Heap_Size; . = . + _Min_Stack_Size; . = ALIGN(4); } >RAM
/* MEMORY_bank1 section, code must be located here explicitly */ /* Example: extern int foo(void) __attribute__ ((section (".mb1text"))); */ .memory_b1_text : { *(.mb1text) /* .mb1text sections (code) */ *(.mb1text*) /* .mb1text* sections (code) */ *(.mb1rodata) /* read-only data (constants) */ *(.mb1rodata*) } >MEMORY_B1
/* Remove debug information from the standard libraries */ /DISCARD/ : { libc.a ( * ) libm.a ( * ) libgcc.a ( * ) } } Пробовал скрипт для линкера из соседней ветки, на который Вы дали ссылку, но один фиг... На всякий случай еще прикладываю .map файл. Похоже на то, что линкер находит реализацию системных вызовов в самой libc. Это так во всех тулчейнах или это особенность KGP?
|
|
|
|
Сообщений в этой теме
gba Подключение libc (из состава arm-kgp-eabi) на STM32 Feb 17 2011, 06:18 AHTOXA Цитата(gba @ Feb 17 2011, 11:18) Могу выл... Feb 17 2011, 07:22 timm Слаб я в армах, но:
Цитата(gba @ Feb 17 2011,... Feb 24 2011, 11:01  gba timm, честно говоря, не понял, что Вас смутило с l... Feb 25 2011, 15:23   AHTOXA Цитата(gba @ Feb 25 2011, 20:23) AHTOXA, ... Feb 25 2011, 17:59    gba Цитата(AHTOXA @ Feb 25 2011, 20:59) А про... Feb 25 2011, 18:46     AHTOXA Я редко пользуюсь отладчиком, но когда пробовал, в... Feb 25 2011, 19:21      gba Цитата(AHTOXA @ Feb 25 2011, 22:21) Я ред... Feb 25 2011, 21:19 gba Проект собирается, правда заливать не пробовал... ... Feb 17 2011, 14:50 AHTOXA Цитата(gba @ Feb 17 2011, 19:50) Проект с... Feb 17 2011, 17:59 gba Да, с Code Sourcery эффект есть. Выкинул файл sysc... Feb 17 2011, 18:27 gba Оказалось не все так радужно. При попытке вызова p... Feb 24 2011, 10:44 AHTOXA Цитата(gba @ Feb 24 2011, 15:44) При попы... Feb 24 2011, 11:46 KnightIgor Цитата(gba @ Feb 17 2011, 07:18) Пытаюсь ... Feb 26 2011, 12:11 gba Цитата(KnightIgor @ Feb 26 2011, 15:11) А... Feb 26 2011, 13:51  KnightIgor Цитата(gba @ Feb 26 2011, 14:51) А вот дл... Feb 26 2011, 15:06   gba Цитата(KnightIgor @ Feb 26 2011, 18:06) Э... Feb 26 2011, 19:47    AHTOXA Вот за это я и не люблю отладчики. Они зачастую сб... Feb 26 2011, 21:26 gba Можно не любить калькулятор, но он тем не менее ус... Feb 28 2011, 07:08 AHTOXA Цитата(gba @ Feb 28 2011, 12:08) Можно не... Feb 28 2011, 09:08  gba Цитата(AHTOXA @ Feb 28 2011, 12:08) Меня ... Feb 28 2011, 09:46   AHTOXA Да ерунда всё это. Нормальный процесс начального в... Feb 28 2011, 10:46
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|