From 8ec785db3feb0908b14f714dfbc586d21e860448 Mon Sep 17 00:00:00 2001 From: Mike Szczys Date: Sun, 24 Jun 2012 14:57:09 -0500 Subject: [PATCH] Incorporated modified Linker Scripts; add compiler flags and reallyclean option --- Device/ldscripts/sections_flash.ld | 128 +++++++++++++++++++++++ Device/ldscripts/stm32f0.ld | 15 +++ Device/ldscripts/stm32f0discovery_def.ld | 20 ++++ Makefile | 32 ++++-- 4 files changed, 189 insertions(+), 6 deletions(-) create mode 100644 Device/ldscripts/sections_flash.ld create mode 100644 Device/ldscripts/stm32f0.ld create mode 100644 Device/ldscripts/stm32f0discovery_def.ld diff --git a/Device/ldscripts/sections_flash.ld b/Device/ldscripts/sections_flash.ld new file mode 100644 index 0000000..7312366 --- /dev/null +++ b/Device/ldscripts/sections_flash.ld @@ -0,0 +1,128 @@ +/* +Common part of the linker scripts for STR71x devices in FLASH mode +(that is, the FLASH is seen at 0) +Copyright RAISONANCE 2005 +You can use, modify and distribute this file freely, but without any warranty. +*/ + +/* Sections Definitions */ + +SECTIONS +{ + /* for Cortex devices, the beginning of the startup code is stored in the .isr_vector section, which goes to FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* the program code is stored in the .text section, which goes to Flash */ + .text : + { + . = ALIGN(4); + + *(.text) /* normal code */ + *(.text.*) /* -ffunction-sections code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) /* -fdata-sections read only data */ + *(.glue_7) /* TBD - needed ? */ + *(.glue_7t) /* TBD - needed ? */ + + /* Necessary KEEP sections (see http://sourceware.org/ml/newlib/2005/msg00255.html) */ + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; + /* This is used by the startup in order to initialize the .data section */ + _sidata = _etext; + } >FLASH + + /* This is the initialized data section + The program executes knowing that the data is in the RAM + but the loader puts the initial values in the FLASH (inidata). + It is one task of the startup to copy the initial values from FLASH to RAM. */ + .data : AT ( _sidata ) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + _data = . ; + + *(.data) + *(.data.*) + *(.RAMtext) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM + + /* This is the uninitialized data section */ + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + _bss = .; + + *(.bss) + *(.bss.*) /* patched by elias - allows the use of -fdata-sections */ + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + } >RAM + + PROVIDE ( end = _ebss ); + PROVIDE ( _end = _ebss ); + + __exidx_start = .; + __exidx_end = .; + + /* after that it's only debugging information. */ + + /* remove the debugging information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/Device/ldscripts/stm32f0.ld b/Device/ldscripts/stm32f0.ld new file mode 100644 index 0000000..9f86078 --- /dev/null +++ b/Device/ldscripts/stm32f0.ld @@ -0,0 +1,15 @@ +/* +Default linker script for STM32F051R8T6 64k 8k +Copyright RAISONANCE S.A.S. 2007 + +!!! This file is automatically generated by RIDE !!! +Do not modify it, as it will be erased at every link. +You can use, copy and distribute this file freely, but without any waranty. +*/ + +/* include the memory spaces definitions sub-script */ +INCLUDE "stm32f0discovery_def.ld" + +/* include the sections management sub-script for FLASH mode */ +INCLUDE "sections_flash.ld" + diff --git a/Device/ldscripts/stm32f0discovery_def.ld b/Device/ldscripts/stm32f0discovery_def.ld new file mode 100644 index 0000000..5690f6d --- /dev/null +++ b/Device/ldscripts/stm32f0discovery_def.ld @@ -0,0 +1,20 @@ +/* +Linker subscript for STM32F051 definitions with 64K Flash and 8K RAM +Copyright RAISONANCE 2007 +!!! This file is automatically generated by RIDE !!! +Do not modify it, as it will be erased at every link. +You can use, copy and distribute this file freely, but without any warranty. +*/ + +/* Memory Spaces Definitions */ + +ENTRY(Reset_Handler) + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K +} + +/* highest address of the user mode stack */ +_estack = 0x20002000; diff --git a/Makefile b/Makefile index a8f1277..15ea40b 100755 --- a/Makefile +++ b/Makefile @@ -7,6 +7,9 @@ PROJ_NAME=main # Location of the Libraries folder from the STM32F0xx Standard Peripheral Library STD_PERIPH_LIB=Libraries +# Location of the linker scripts +LDSCRIPT_INC=Device/ldscripts + # location of OpenOCD Board .cfg files (only used with 'make program') OPENOCD_BOARD_DIR=/usr/share/openocd/scripts/board @@ -19,9 +22,14 @@ OPENOCD_PROC_FILE=extra/stm32f0-openocd.cfg CC=arm-none-eabi-gcc OBJCOPY=arm-none-eabi-objcopy +OBJDUMP=arm-none-eabi-objdump +SIZE=arm-none-eabi-size -CFLAGS = -g -O2 -Wall -TDevice/stm32_flash.ld -CFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m0 -march=armv6s-m +CFLAGS = -Wall -g -std=c99 -Os +#CFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m0 -march=armv6s-m +CFLAGS += -mlittle-endian -mcpu=cortex-m0 -march=armv6-m -mthumb +CFLAGS += -ffunction-sections -fdata-sections +CFLAGS += -Wl,--gc-sections -Wl,-Map=$(PROJ_NAME).map ################################################### @@ -30,12 +38,16 @@ vpath %.a $(STD_PERIPH_LIB) ROOT=$(shell pwd) -CFLAGS += -Iinc -I$(STD_PERIPH_LIB) -I$(STD_PERIPH_LIB)/CMSIS/Device/ST/STM32F0xx/Include -CFLAGS += -I$(STD_PERIPH_LIB)/CMSIS/Include -I$(STD_PERIPH_LIB)/STM32F0xx_StdPeriph_Driver/inc -CFLAGS += -include$(STD_PERIPH_LIB)/stm32f0xx_conf.h +CFLAGS += -I inc -I $(STD_PERIPH_LIB) -I $(STD_PERIPH_LIB)/CMSIS/Device/ST/STM32F0xx/Include +CFLAGS += -I $(STD_PERIPH_LIB)/CMSIS/Include -I $(STD_PERIPH_LIB)/STM32F0xx_StdPeriph_Driver/inc +CFLAGS += -include $(STD_PERIPH_LIB)/stm32f0xx_conf.h SRCS += Device/startup_stm32f0xx.s # add startup file to build +# need if you want to build with -DUSE_CMSIS +#SRCS += stm32f0_discovery.c +#SRCS += stm32f0_discovery.c stm32f0xx_it.c + OBJS = $(SRCS:.c=.o) ################################################### @@ -50,15 +62,23 @@ lib: proj: $(PROJ_NAME).elf $(PROJ_NAME).elf: $(SRCS) - $(CC) $(CFLAGS) $^ -o $@ -L$(STD_PERIPH_LIB) -lstm32f0 + $(CC) $(CFLAGS) $^ -o $@ -L$(STD_PERIPH_LIB) -lstm32f0 -L$(LDSCRIPT_INC) -Tstm32f0.ld $(OBJCOPY) -O ihex $(PROJ_NAME).elf $(PROJ_NAME).hex $(OBJCOPY) -O binary $(PROJ_NAME).elf $(PROJ_NAME).bin + $(OBJDUMP) -St $(PROJ_NAME).elf >$(PROJ_NAME).lst + $(SIZE) $(PROJ_NAME).elf program: $(PROJ_NAME).bin openocd -f $(OPENOCD_BOARD_DIR)/stm32f0discovery.cfg -f $(OPENOCD_PROC_FILE) -c "stm_flash `pwd`/$(PROJ_NAME).bin" -c shutdown clean: + find ./ -name '*~' | xargs rm -f rm -f *.o rm -f $(PROJ_NAME).elf rm -f $(PROJ_NAME).hex rm -f $(PROJ_NAME).bin + rm -f $(PROJ_NAME).map + rm -f $(PROJ_NAME).lst + +reallyclean: clean + $(MAKE) -C $(STD_PERIPH_LIB) clean