Renamed generic_stm32f103rxx and generic_stm32f103zxx to remove th e xx at the end to match changes to boards.txt

This commit is contained in:
Roger Clark 2015-05-06 03:02:10 +10:00
parent 30946d8a1c
commit 13e27c1dc5
35 changed files with 1388 additions and 1388 deletions

View File

@ -1,220 +1,220 @@
/* /*
* Linker script for libmaple. * Linker script for libmaple.
* *
* Original author "lanchon" from ST forums, with modifications by LeafLabs. * Original author "lanchon" from ST forums, with modifications by LeafLabs.
*/ */
OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
/* /*
* Configure other libraries we want in the link. * Configure other libraries we want in the link.
* *
* libgcc, libc, and libm are common across supported toolchains. * libgcc, libc, and libm are common across supported toolchains.
* However, some toolchains require additional archives which aren't * However, some toolchains require additional archives which aren't
* present everywhere (e.g. ARM's gcc-arm-embedded releases). * present everywhere (e.g. ARM's gcc-arm-embedded releases).
* *
* To hack around this, we let the build system specify additional * To hack around this, we let the build system specify additional
* archives by putting the right extra_libs.inc (in a directory under * archives by putting the right extra_libs.inc (in a directory under
* toolchains/) in our search path. * toolchains/) in our search path.
*/ */
GROUP(libgcc.a libc.a libm.a) GROUP(libgcc.a libc.a libm.a)
INCLUDE extra_libs.inc INCLUDE extra_libs.inc
/* /*
* These force the linker to search for vector table symbols. * These force the linker to search for vector table symbols.
* *
* These symbols vary by STM32 family (and also within families). * These symbols vary by STM32 family (and also within families).
* It's up to the build system to configure the link's search path * It's up to the build system to configure the link's search path
* properly for the target MCU. * properly for the target MCU.
*/ */
INCLUDE vector_symbols.inc INCLUDE vector_symbols.inc
/* STM32 vector table. */ /* STM32 vector table. */
EXTERN(__stm32_vector_table) EXTERN(__stm32_vector_table)
/* C runtime initialization function. */ /* C runtime initialization function. */
EXTERN(start_c) EXTERN(start_c)
/* main entry point */ /* main entry point */
EXTERN(main) EXTERN(main)
/* Initial stack pointer value. */ /* Initial stack pointer value. */
EXTERN(__msp_init) EXTERN(__msp_init)
PROVIDE(__msp_init = ORIGIN(ram) + LENGTH(ram)); PROVIDE(__msp_init = ORIGIN(ram) + LENGTH(ram));
/* Reset vector and chip reset entry point */ /* Reset vector and chip reset entry point */
EXTERN(__start__) EXTERN(__start__)
ENTRY(__start__) ENTRY(__start__)
PROVIDE(__exc_reset = __start__); PROVIDE(__exc_reset = __start__);
/* Heap boundaries, for libmaple */ /* Heap boundaries, for libmaple */
EXTERN(_lm_heap_start); EXTERN(_lm_heap_start);
EXTERN(_lm_heap_end); EXTERN(_lm_heap_end);
SECTIONS SECTIONS
{ {
.text : .text :
{ {
__text_start__ = .; __text_start__ = .;
/* /*
* STM32 vector table. Leave this here. Yes, really. * STM32 vector table. Leave this here. Yes, really.
*/ */
*(.stm32.interrupt_vector) *(.stm32.interrupt_vector)
/* /*
* Program code and vague linking * Program code and vague linking
*/ */
*(.text .text.* .gnu.linkonce.t.*) *(.text .text.* .gnu.linkonce.t.*)
*(.plt) *(.plt)
*(.gnu.warning) *(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.glue_7t) *(.glue_7) *(.vfp11_veneer)
*(.ARM.extab* .gnu.linkonce.armextab.*) *(.ARM.extab* .gnu.linkonce.armextab.*)
*(.gcc_except_table) *(.gcc_except_table)
*(.eh_frame_hdr) *(.eh_frame_hdr)
*(.eh_frame) *(.eh_frame)
. = ALIGN(4); . = ALIGN(4);
KEEP(*(.init)) KEEP(*(.init))
. = ALIGN(4); . = ALIGN(4);
__preinit_array_start = .; __preinit_array_start = .;
KEEP (*(.preinit_array)) KEEP (*(.preinit_array))
__preinit_array_end = .; __preinit_array_end = .;
. = ALIGN(4); . = ALIGN(4);
__init_array_start = .; __init_array_start = .;
KEEP (*(SORT(.init_array.*))) KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array)) KEEP (*(.init_array))
__init_array_end = .; __init_array_end = .;
. = ALIGN(0x4); . = ALIGN(0x4);
KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*))) KEEP (*(SORT(.ctors.*)))
KEEP (*crtend.o(.ctors)) KEEP (*crtend.o(.ctors))
. = ALIGN(4); . = ALIGN(4);
KEEP(*(.fini)) KEEP(*(.fini))
. = ALIGN(4); . = ALIGN(4);
__fini_array_start = .; __fini_array_start = .;
KEEP (*(.fini_array)) KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*))) KEEP (*(SORT(.fini_array.*)))
__fini_array_end = .; __fini_array_end = .;
KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*))) KEEP (*(SORT(.dtors.*)))
KEEP (*crtend.o(.dtors)) KEEP (*crtend.o(.dtors))
} > REGION_TEXT } > REGION_TEXT
/* /*
* End of text * End of text
*/ */
.text.align : .text.align :
{ {
. = ALIGN(8); . = ALIGN(8);
__text_end__ = .; __text_end__ = .;
} > REGION_TEXT } > REGION_TEXT
/* /*
* .ARM.exidx exception unwinding; mandated by ARM's C++ ABI * .ARM.exidx exception unwinding; mandated by ARM's C++ ABI
*/ */
__exidx_start = .; __exidx_start = .;
.ARM.exidx : .ARM.exidx :
{ {
*(.ARM.exidx* .gnu.linkonce.armexidx.*) *(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > REGION_RODATA } > REGION_RODATA
__exidx_end = .; __exidx_end = .;
/* /*
* .data * .data
*/ */
.data : .data :
{ {
__data_start__ = .; __data_start__ = .;
LONG(0) LONG(0)
. = ALIGN(8); . = ALIGN(8);
*(.got.plt) *(.got) *(.got.plt) *(.got)
*(.data .data.* .gnu.linkonce.d.*) *(.data .data.* .gnu.linkonce.d.*)
. = ALIGN(8); . = ALIGN(8);
__data_end__ = .; __data_end__ = .;
} > REGION_DATA AT> REGION_RODATA } > REGION_DATA AT> REGION_RODATA
/* /*
* Read-only data * Read-only data
*/ */
.rodata : .rodata :
{ {
*(.rodata .rodata.* .gnu.linkonce.r.*) *(.rodata .rodata.* .gnu.linkonce.r.*)
/* .USER_FLASH: We allow users to allocate into Flash here */ /* .USER_FLASH: We allow users to allocate into Flash here */
*(.USER_FLASH) *(.USER_FLASH)
/* ROM image configuration; for C startup */ /* ROM image configuration; for C startup */
. = ALIGN(4); . = ALIGN(4);
_lm_rom_img_cfgp = .; _lm_rom_img_cfgp = .;
LONG(LOADADDR(.data)); LONG(LOADADDR(.data));
/* /*
* Heap: Linker scripts may choose a custom heap by overriding * Heap: Linker scripts may choose a custom heap by overriding
* _lm_heap_start and _lm_heap_end. Otherwise, the heap is in * _lm_heap_start and _lm_heap_end. Otherwise, the heap is in
* internal SRAM, beginning after .bss, and growing towards * internal SRAM, beginning after .bss, and growing towards
* the stack. * the stack.
* *
* I'm shoving these here naively; there's probably a cleaner way * I'm shoving these here naively; there's probably a cleaner way
* to go about this. [mbolivar] * to go about this. [mbolivar]
*/ */
_lm_heap_start = DEFINED(_lm_heap_start) ? _lm_heap_start : _end; _lm_heap_start = DEFINED(_lm_heap_start) ? _lm_heap_start : _end;
_lm_heap_end = DEFINED(_lm_heap_end) ? _lm_heap_end : __msp_init; _lm_heap_end = DEFINED(_lm_heap_end) ? _lm_heap_end : __msp_init;
} > REGION_RODATA } > REGION_RODATA
/* /*
* .bss * .bss
*/ */
.bss : .bss :
{ {
. = ALIGN(8); . = ALIGN(8);
__bss_start__ = .; __bss_start__ = .;
*(.bss .bss.* .gnu.linkonce.b.*) *(.bss .bss.* .gnu.linkonce.b.*)
*(COMMON) *(COMMON)
. = ALIGN (8); . = ALIGN (8);
__bss_end__ = .; __bss_end__ = .;
_end = __bss_end__; _end = __bss_end__;
} > REGION_BSS } > REGION_BSS
/* /*
* Debugging sections * Debugging sections
*/ */
.stab 0 (NOLOAD) : { *(.stab) } .stab 0 (NOLOAD) : { *(.stab) }
.stabstr 0 (NOLOAD) : { *(.stabstr) } .stabstr 0 (NOLOAD) : { *(.stabstr) }
/* DWARF debug sections. /* DWARF debug sections.
* Symbols in the DWARF debugging sections are relative to the beginning * Symbols in the DWARF debugging sections are relative to the beginning
* of the section so we begin them at 0. */ * of the section so we begin them at 0. */
/* DWARF 1 */ /* DWARF 1 */
.debug 0 : { *(.debug) } .debug 0 : { *(.debug) }
.line 0 : { *(.line) } .line 0 : { *(.line) }
/* GNU DWARF 1 extensions */ /* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) } .debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */ /* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) } .debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) } .debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */ /* DWARF 2 */
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) } .debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) } .debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) } .debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) } .debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) } .debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) } .debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */ /* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) } .debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) } .debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) } .debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) } .debug_varnames 0 : { *(.debug_varnames) }
.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) } .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
.ARM.attributes 0 : { KEEP (*(.ARM.attributes)) } .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) }
/DISCARD/ : { *(.note.GNU-stack) } /DISCARD/ : { *(.note.GNU-stack) }
} }

View File

@ -1,7 +1,7 @@
/* /*
* Extra archives needed by ARM's GCC ARM Embedded arm-none-eabi- * Extra archives needed by ARM's GCC ARM Embedded arm-none-eabi-
* releases (https://launchpad.net/gcc-arm-embedded/). * releases (https://launchpad.net/gcc-arm-embedded/).
*/ */
/* This is for the provided newlib. */ /* This is for the provided newlib. */
GROUP(libnosys.a) GROUP(libnosys.a)

View File

@ -1,26 +1,26 @@
/* /*
* libmaple linker script for "Flash" builds. * libmaple linker script for "Flash" builds.
* *
* A Flash build puts .text (and .rodata) in Flash, and * A Flash build puts .text (and .rodata) in Flash, and
* .data/.bss/heap (of course) in SRAM, but offsets the sections by * .data/.bss/heap (of course) in SRAM, but offsets the sections by
* enough space to store the Maple bootloader, which lives in low * enough space to store the Maple bootloader, which lives in low
* Flash and uses low memory. * Flash and uses low memory.
*/ */
/* /*
* This pulls in the appropriate MEMORY declaration from the right * This pulls in the appropriate MEMORY declaration from the right
* subdirectory of stm32/mem/ (the environment must call ld with the * subdirectory of stm32/mem/ (the environment must call ld with the
* right include directory flags to make this happen). Boards can also * right include directory flags to make this happen). Boards can also
* use this file to use any of libmaple's memory-related hooks (like * use this file to use any of libmaple's memory-related hooks (like
* where the heap should live). * where the heap should live).
*/ */
INCLUDE mem-flash.inc INCLUDE mem-flash.inc
/* Provide memory region aliases for common.inc */ /* Provide memory region aliases for common.inc */
REGION_ALIAS("REGION_TEXT", rom); REGION_ALIAS("REGION_TEXT", rom);
REGION_ALIAS("REGION_DATA", ram); REGION_ALIAS("REGION_DATA", ram);
REGION_ALIAS("REGION_BSS", ram); REGION_ALIAS("REGION_BSS", ram);
REGION_ALIAS("REGION_RODATA", rom); REGION_ALIAS("REGION_RODATA", rom);
/* Let common.inc handle the real work. */ /* Let common.inc handle the real work. */
INCLUDE common.inc INCLUDE common.inc

View File

@ -1,31 +1,31 @@
/* /*
* libmaple linker script for "JTAG" builds. * libmaple linker script for "JTAG" builds.
* *
* A "JTAG" build puts .text (and .rodata) in Flash, and * A "JTAG" build puts .text (and .rodata) in Flash, and
* .data/.bss/heap (of course) in SRAM, but links starting at the * .data/.bss/heap (of course) in SRAM, but links starting at the
* Flash and SRAM starting addresses (0x08000000 and 0x20000000 * Flash and SRAM starting addresses (0x08000000 and 0x20000000
* respectively). This will wipe out a Maple bootloader if there's one * respectively). This will wipe out a Maple bootloader if there's one
* on the board, so only use this if you know what you're doing. * on the board, so only use this if you know what you're doing.
* *
* Of course, a "JTAG" build is perfectly usable for upload over SWD, * Of course, a "JTAG" build is perfectly usable for upload over SWD,
* the system memory bootloader, etc. The name is just a historical * the system memory bootloader, etc. The name is just a historical
* artifact. * artifact.
*/ */
/* /*
* This pulls in the appropriate MEMORY declaration from the right * This pulls in the appropriate MEMORY declaration from the right
* subdirectory of stm32/mem/ (the environment must call ld with the * subdirectory of stm32/mem/ (the environment must call ld with the
* right include directory flags to make this happen). Boards can also * right include directory flags to make this happen). Boards can also
* use this file to use any of libmaple's memory-related hooks (like * use this file to use any of libmaple's memory-related hooks (like
* where the heap should live). * where the heap should live).
*/ */
INCLUDE mem-jtag.inc INCLUDE mem-jtag.inc
/* Provide memory region aliases for common.inc */ /* Provide memory region aliases for common.inc */
REGION_ALIAS("REGION_TEXT", rom); REGION_ALIAS("REGION_TEXT", rom);
REGION_ALIAS("REGION_DATA", ram); REGION_ALIAS("REGION_DATA", ram);
REGION_ALIAS("REGION_BSS", ram); REGION_ALIAS("REGION_BSS", ram);
REGION_ALIAS("REGION_RODATA", rom); REGION_ALIAS("REGION_RODATA", rom);
/* Let common.inc handle the real work. */ /* Let common.inc handle the real work. */
INCLUDE common.inc INCLUDE common.inc

View File

@ -1,5 +1,5 @@
MEMORY MEMORY
{ {
ram (rwx) : ORIGIN = 0x20000C00, LENGTH = 61K ram (rwx) : ORIGIN = 0x20000C00, LENGTH = 61K
rom (rx) : ORIGIN = 0x08005000, LENGTH = 492K rom (rx) : ORIGIN = 0x08005000, LENGTH = 492K
} }

View File

@ -1,5 +1,5 @@
MEMORY MEMORY
{ {
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
rom (rx) : ORIGIN = 0x08000000, LENGTH = 512K rom (rx) : ORIGIN = 0x08000000, LENGTH = 512K
} }

View File

@ -1,5 +1,5 @@
MEMORY MEMORY
{ {
ram (rwx) : ORIGIN = 0x20000C00, LENGTH = 61K ram (rwx) : ORIGIN = 0x20000C00, LENGTH = 61K
rom (rx) : ORIGIN = 0x08005000, LENGTH = 0K rom (rx) : ORIGIN = 0x08005000, LENGTH = 0K
} }

View File

@ -1,25 +1,25 @@
/* /*
* libmaple linker script for RAM builds. * libmaple linker script for RAM builds.
* *
* A Flash build puts .text, .rodata, and .data/.bss/heap (of course) * A Flash build puts .text, .rodata, and .data/.bss/heap (of course)
* in SRAM, but offsets the sections by enough space to store the * in SRAM, but offsets the sections by enough space to store the
* Maple bootloader, which uses low memory. * Maple bootloader, which uses low memory.
*/ */
/* /*
* This pulls in the appropriate MEMORY declaration from the right * This pulls in the appropriate MEMORY declaration from the right
* subdirectory of stm32/mem/ (the environment must call ld with the * subdirectory of stm32/mem/ (the environment must call ld with the
* right include directory flags to make this happen). Boards can also * right include directory flags to make this happen). Boards can also
* use this file to use any of libmaple's memory-related hooks (like * use this file to use any of libmaple's memory-related hooks (like
* where the heap should live). * where the heap should live).
*/ */
INCLUDE mem-ram.inc INCLUDE mem-ram.inc
/* Provide memory region aliases for common.inc */ /* Provide memory region aliases for common.inc */
REGION_ALIAS("REGION_TEXT", ram); REGION_ALIAS("REGION_TEXT", ram);
REGION_ALIAS("REGION_DATA", ram); REGION_ALIAS("REGION_DATA", ram);
REGION_ALIAS("REGION_BSS", ram); REGION_ALIAS("REGION_BSS", ram);
REGION_ALIAS("REGION_RODATA", ram); REGION_ALIAS("REGION_RODATA", ram);
/* Let common.inc handle the real work. */ /* Let common.inc handle the real work. */
INCLUDE common.inc INCLUDE common.inc

View File

@ -1,78 +1,78 @@
EXTERN(__msp_init) EXTERN(__msp_init)
EXTERN(__exc_reset) EXTERN(__exc_reset)
EXTERN(__exc_nmi) EXTERN(__exc_nmi)
EXTERN(__exc_hardfault) EXTERN(__exc_hardfault)
EXTERN(__exc_memmanage) EXTERN(__exc_memmanage)
EXTERN(__exc_busfault) EXTERN(__exc_busfault)
EXTERN(__exc_usagefault) EXTERN(__exc_usagefault)
EXTERN(__stm32reservedexception7) EXTERN(__stm32reservedexception7)
EXTERN(__stm32reservedexception8) EXTERN(__stm32reservedexception8)
EXTERN(__stm32reservedexception9) EXTERN(__stm32reservedexception9)
EXTERN(__stm32reservedexception10) EXTERN(__stm32reservedexception10)
EXTERN(__exc_svc) EXTERN(__exc_svc)
EXTERN(__exc_debug_monitor) EXTERN(__exc_debug_monitor)
EXTERN(__stm32reservedexception13) EXTERN(__stm32reservedexception13)
EXTERN(__exc_pendsv) EXTERN(__exc_pendsv)
EXTERN(__exc_systick) EXTERN(__exc_systick)
EXTERN(__irq_wwdg) EXTERN(__irq_wwdg)
EXTERN(__irq_pvd) EXTERN(__irq_pvd)
EXTERN(__irq_tamper) EXTERN(__irq_tamper)
EXTERN(__irq_rtc) EXTERN(__irq_rtc)
EXTERN(__irq_flash) EXTERN(__irq_flash)
EXTERN(__irq_rcc) EXTERN(__irq_rcc)
EXTERN(__irq_exti0) EXTERN(__irq_exti0)
EXTERN(__irq_exti1) EXTERN(__irq_exti1)
EXTERN(__irq_exti2) EXTERN(__irq_exti2)
EXTERN(__irq_exti3) EXTERN(__irq_exti3)
EXTERN(__irq_exti4) EXTERN(__irq_exti4)
EXTERN(__irq_dma1_channel1) EXTERN(__irq_dma1_channel1)
EXTERN(__irq_dma1_channel2) EXTERN(__irq_dma1_channel2)
EXTERN(__irq_dma1_channel3) EXTERN(__irq_dma1_channel3)
EXTERN(__irq_dma1_channel4) EXTERN(__irq_dma1_channel4)
EXTERN(__irq_dma1_channel5) EXTERN(__irq_dma1_channel5)
EXTERN(__irq_dma1_channel6) EXTERN(__irq_dma1_channel6)
EXTERN(__irq_dma1_channel7) EXTERN(__irq_dma1_channel7)
EXTERN(__irq_adc) EXTERN(__irq_adc)
EXTERN(__irq_usb_hp_can_tx) EXTERN(__irq_usb_hp_can_tx)
EXTERN(__irq_usb_lp_can_rx0) EXTERN(__irq_usb_lp_can_rx0)
EXTERN(__irq_can_rx1) EXTERN(__irq_can_rx1)
EXTERN(__irq_can_sce) EXTERN(__irq_can_sce)
EXTERN(__irq_exti9_5) EXTERN(__irq_exti9_5)
EXTERN(__irq_tim1_brk) EXTERN(__irq_tim1_brk)
EXTERN(__irq_tim1_up) EXTERN(__irq_tim1_up)
EXTERN(__irq_tim1_trg_com) EXTERN(__irq_tim1_trg_com)
EXTERN(__irq_tim1_cc) EXTERN(__irq_tim1_cc)
EXTERN(__irq_tim2) EXTERN(__irq_tim2)
EXTERN(__irq_tim3) EXTERN(__irq_tim3)
EXTERN(__irq_tim4) EXTERN(__irq_tim4)
EXTERN(__irq_i2c1_ev) EXTERN(__irq_i2c1_ev)
EXTERN(__irq_i2c1_er) EXTERN(__irq_i2c1_er)
EXTERN(__irq_i2c2_ev) EXTERN(__irq_i2c2_ev)
EXTERN(__irq_i2c2_er) EXTERN(__irq_i2c2_er)
EXTERN(__irq_spi1) EXTERN(__irq_spi1)
EXTERN(__irq_spi2) EXTERN(__irq_spi2)
EXTERN(__irq_usart1) EXTERN(__irq_usart1)
EXTERN(__irq_usart2) EXTERN(__irq_usart2)
EXTERN(__irq_usart3) EXTERN(__irq_usart3)
EXTERN(__irq_exti15_10) EXTERN(__irq_exti15_10)
EXTERN(__irq_rtcalarm) EXTERN(__irq_rtcalarm)
EXTERN(__irq_usbwakeup) EXTERN(__irq_usbwakeup)
EXTERN(__irq_tim8_brk) EXTERN(__irq_tim8_brk)
EXTERN(__irq_tim8_up) EXTERN(__irq_tim8_up)
EXTERN(__irq_tim8_trg_com) EXTERN(__irq_tim8_trg_com)
EXTERN(__irq_tim8_cc) EXTERN(__irq_tim8_cc)
EXTERN(__irq_adc3) EXTERN(__irq_adc3)
EXTERN(__irq_fsmc) EXTERN(__irq_fsmc)
EXTERN(__irq_sdio) EXTERN(__irq_sdio)
EXTERN(__irq_tim5) EXTERN(__irq_tim5)
EXTERN(__irq_spi3) EXTERN(__irq_spi3)
EXTERN(__irq_uart4) EXTERN(__irq_uart4)
EXTERN(__irq_uart5) EXTERN(__irq_uart5)
EXTERN(__irq_tim6) EXTERN(__irq_tim6)
EXTERN(__irq_tim7) EXTERN(__irq_tim7)
EXTERN(__irq_dma2_channel1) EXTERN(__irq_dma2_channel1)
EXTERN(__irq_dma2_channel2) EXTERN(__irq_dma2_channel2)
EXTERN(__irq_dma2_channel3) EXTERN(__irq_dma2_channel3)
EXTERN(__irq_dma2_channel4_5) EXTERN(__irq_dma2_channel4_5)

View File

@ -1,2 +1,2 @@
// API compatibility // API compatibility
#include "variant.h" #include "variant.h"

View File

@ -1,13 +1,13 @@
#ifndef _VARIANT_ARDUINO_STM32_ #ifndef _VARIANT_ARDUINO_STM32_
#define _VARIANT_ARDUINO_STM32_ #define _VARIANT_ARDUINO_STM32_
#define digitalPinToPort(P) ( PIN_MAP[P].gpio_device ) #define digitalPinToPort(P) ( PIN_MAP[P].gpio_device )
#define digitalPinToBitMask(P) ( BIT(PIN_MAP[P].gpio_bit) ) #define digitalPinToBitMask(P) ( BIT(PIN_MAP[P].gpio_bit) )
#define portOutputRegister(port) ( &(port->regs->ODR) ) #define portOutputRegister(port) ( &(port->regs->ODR) )
#define portInputRegister(port) ( &(port->regs->IDR) ) #define portInputRegister(port) ( &(port->regs->IDR) )
#define portSetRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->BSRR) ) #define portSetRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->BSRR) )
#define portClearRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->BRR) ) #define portClearRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->BRR) )
#define portConfigRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->CRL) ) #define portConfigRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->CRL) )
#endif /* _VARIANT_ARDUINO_STM32_ */ #endif /* _VARIANT_ARDUINO_STM32_ */

View File

@ -1,57 +1,57 @@
/****************************************************************************** /******************************************************************************
* The MIT License * The MIT License
* *
* Copyright (c) 2011 LeafLabs, LLC. * Copyright (c) 2011 LeafLabs, LLC.
* *
* Permission is hereby granted, free of charge, to any person * Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation * obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without * files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy, * restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies * modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is * of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be * The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software. * included in all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE. * SOFTWARE.
*****************************************************************************/ *****************************************************************************/
/* /*
* This file is a modified version of a file obtained from * This file is a modified version of a file obtained from
* CodeSourcery Inc. (now part of Mentor Graphics Corp.), in which the * CodeSourcery Inc. (now part of Mentor Graphics Corp.), in which the
* following text appeared: * following text appeared:
* *
* The authors hereby grant permission to use, copy, modify, distribute, * The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided * and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this * that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement, * notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses. * license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors * Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that * and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where * the new terms are clearly indicated on the first page of each file where
* they apply. * they apply.
*/ */
.text .text
.code 16 .code 16
.thumb_func .thumb_func
.globl __start__ .globl __start__
.type __start__, %function .type __start__, %function
__start__: __start__:
.fnstart .fnstart
ldr r1,=__msp_init ldr r1,=__msp_init
mov sp,r1 mov sp,r1
ldr r1,=start_c ldr r1,=start_c
bx r1 bx r1
.pool .pool
.cantunwind .cantunwind
.fnend .fnend

View File

@ -1,95 +1,95 @@
/****************************************************************************** /******************************************************************************
* The MIT License * The MIT License
* *
* Copyright (c) 2011 LeafLabs, LLC. * Copyright (c) 2011 LeafLabs, LLC.
* *
* Permission is hereby granted, free of charge, to any person * Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation * obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without * files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy, * restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies * modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is * of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be * The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software. * included in all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE. * SOFTWARE.
*****************************************************************************/ *****************************************************************************/
/* /*
* This file is a modified version of a file obtained from * This file is a modified version of a file obtained from
* CodeSourcery Inc. (now part of Mentor Graphics Corp.), in which the * CodeSourcery Inc. (now part of Mentor Graphics Corp.), in which the
* following text appeared: * following text appeared:
* *
* Copyright (c) 2006, 2007 CodeSourcery Inc * Copyright (c) 2006, 2007 CodeSourcery Inc
* *
* The authors hereby grant permission to use, copy, modify, distribute, * The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided * and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this * that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement, * notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses. * license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors * Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that * and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where * the new terms are clearly indicated on the first page of each file where
* they apply. * they apply.
*/ */
#include <stddef.h> #include <stddef.h>
extern void __libc_init_array(void); extern void __libc_init_array(void);
extern int main(int, char**, char**); extern int main(int, char**, char**);
extern void exit(int) __attribute__((noreturn, weak)); extern void exit(int) __attribute__((noreturn, weak));
/* The linker must ensure that these are at least 4-byte aligned. */ /* The linker must ensure that these are at least 4-byte aligned. */
extern char __data_start__, __data_end__; extern char __data_start__, __data_end__;
extern char __bss_start__, __bss_end__; extern char __bss_start__, __bss_end__;
struct rom_img_cfg { struct rom_img_cfg {
int *img_start; int *img_start;
}; };
extern char _lm_rom_img_cfgp; extern char _lm_rom_img_cfgp;
void __attribute__((noreturn)) start_c(void) { void __attribute__((noreturn)) start_c(void) {
struct rom_img_cfg *img_cfg = (struct rom_img_cfg*)&_lm_rom_img_cfgp; struct rom_img_cfg *img_cfg = (struct rom_img_cfg*)&_lm_rom_img_cfgp;
int *src = img_cfg->img_start; int *src = img_cfg->img_start;
int *dst = (int*)&__data_start__; int *dst = (int*)&__data_start__;
int exit_code; int exit_code;
/* Initialize .data, if necessary. */ /* Initialize .data, if necessary. */
if (src != dst) { if (src != dst) {
int *end = (int*)&__data_end__; int *end = (int*)&__data_end__;
while (dst < end) { while (dst < end) {
*dst++ = *src++; *dst++ = *src++;
} }
} }
/* Zero .bss. */ /* Zero .bss. */
dst = (int*)&__bss_start__; dst = (int*)&__bss_start__;
while (dst < (int*)&__bss_end__) { while (dst < (int*)&__bss_end__) {
*dst++ = 0; *dst++ = 0;
} }
/* Run initializers. */ /* Run initializers. */
__libc_init_array(); __libc_init_array();
/* Jump to main. */ /* Jump to main. */
exit_code = main(0, 0, 0); exit_code = main(0, 0, 0);
if (exit) { if (exit) {
exit(exit_code); exit(exit_code);
} }
/* If exit is NULL, make sure we don't return. */ /* If exit is NULL, make sure we don't return. */
for (;;) for (;;)
continue; continue;
} }

View File

@ -1,176 +1,176 @@
/****************************************************************************** /******************************************************************************
* The MIT License * The MIT License
* *
* Copyright (c) 2010 Perry Hung. * Copyright (c) 2010 Perry Hung.
* Copyright (c) 2011, 2012 LeafLabs, LLC. * Copyright (c) 2011, 2012 LeafLabs, LLC.
* *
* Permission is hereby granted, free of charge, to any person * Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation * obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without * files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy, * restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies * modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is * of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be * The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software. * included in all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE. * SOFTWARE.
*****************************************************************************/ *****************************************************************************/
/** /**
* @file wirish/syscalls.c * @file wirish/syscalls.c
* @brief newlib stubs * @brief newlib stubs
* *
* Low level system routines used by newlib for basic I/O and memory * Low level system routines used by newlib for basic I/O and memory
* allocation. You can override most of these. * allocation. You can override most of these.
*/ */
#include <libmaple/libmaple.h> #include <libmaple/libmaple.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <errno.h> #include <errno.h>
#include <stddef.h> #include <stddef.h>
/* If CONFIG_HEAP_START (or CONFIG_HEAP_END) isn't defined, then /* If CONFIG_HEAP_START (or CONFIG_HEAP_END) isn't defined, then
* assume _lm_heap_start (resp. _lm_heap_end) is appropriately set by * assume _lm_heap_start (resp. _lm_heap_end) is appropriately set by
* the linker */ * the linker */
#ifndef CONFIG_HEAP_START #ifndef CONFIG_HEAP_START
extern char _lm_heap_start; extern char _lm_heap_start;
#define CONFIG_HEAP_START ((void *)&_lm_heap_start) #define CONFIG_HEAP_START ((void *)&_lm_heap_start)
#endif #endif
#ifndef CONFIG_HEAP_END #ifndef CONFIG_HEAP_END
extern char _lm_heap_end; extern char _lm_heap_end;
#define CONFIG_HEAP_END ((void *)&_lm_heap_end) #define CONFIG_HEAP_END ((void *)&_lm_heap_end)
#endif #endif
/* /*
* _sbrk -- Increment the program break. * _sbrk -- Increment the program break.
* *
* Get incr bytes more RAM (for use by the heap). malloc() and * Get incr bytes more RAM (for use by the heap). malloc() and
* friends call this function behind the scenes. * friends call this function behind the scenes.
*/ */
void *_sbrk(int incr) { void *_sbrk(int incr) {
static void * pbreak = NULL; /* current program break */ static void * pbreak = NULL; /* current program break */
void * ret; void * ret;
if (pbreak == NULL) { if (pbreak == NULL) {
pbreak = CONFIG_HEAP_START; pbreak = CONFIG_HEAP_START;
} }
if ((CONFIG_HEAP_END - pbreak < incr) || if ((CONFIG_HEAP_END - pbreak < incr) ||
(pbreak - CONFIG_HEAP_START < -incr)) { (pbreak - CONFIG_HEAP_START < -incr)) {
errno = ENOMEM; errno = ENOMEM;
return (void *)-1; return (void *)-1;
} }
ret = pbreak; ret = pbreak;
pbreak += incr; pbreak += incr;
return ret; return ret;
} }
__weak int _open(const char *path, int flags, ...) { __weak int _open(const char *path, int flags, ...) {
return 1; return 1;
} }
__weak int _close(int fd) { __weak int _close(int fd) {
return 0; return 0;
} }
__weak int _fstat(int fd, struct stat *st) { __weak int _fstat(int fd, struct stat *st) {
st->st_mode = S_IFCHR; st->st_mode = S_IFCHR;
return 0; return 0;
} }
__weak int _isatty(int fd) { __weak int _isatty(int fd) {
return 1; return 1;
} }
__weak int isatty(int fd) { __weak int isatty(int fd) {
return 1; return 1;
} }
__weak int _lseek(int fd, off_t pos, int whence) { __weak int _lseek(int fd, off_t pos, int whence) {
return -1; return -1;
} }
__weak unsigned char getch(void) { __weak unsigned char getch(void) {
return 0; return 0;
} }
__weak int _read(int fd, char *buf, size_t cnt) { __weak int _read(int fd, char *buf, size_t cnt) {
*buf = getch(); *buf = getch();
return 1; return 1;
} }
__weak void putch(unsigned char c) { __weak void putch(unsigned char c) {
} }
__weak void cgets(char *s, int bufsize) { __weak void cgets(char *s, int bufsize) {
char *p; char *p;
int c; int c;
int i; int i;
for (i = 0; i < bufsize; i++) { for (i = 0; i < bufsize; i++) {
*(s+i) = 0; *(s+i) = 0;
} }
// memset(s, 0, bufsize); // memset(s, 0, bufsize);
p = s; p = s;
for (p = s; p < s + bufsize-1;) { for (p = s; p < s + bufsize-1;) {
c = getch(); c = getch();
switch (c) { switch (c) {
case '\r' : case '\r' :
case '\n' : case '\n' :
putch('\r'); putch('\r');
putch('\n'); putch('\n');
*p = '\n'; *p = '\n';
return; return;
case '\b' : case '\b' :
if (p > s) { if (p > s) {
*p-- = 0; *p-- = 0;
putch('\b'); putch('\b');
putch(' '); putch(' ');
putch('\b'); putch('\b');
} }
break; break;
default : default :
putch(c); putch(c);
*p++ = c; *p++ = c;
break; break;
} }
} }
return; return;
} }
__weak int _write(int fd, const char *buf, size_t cnt) { __weak int _write(int fd, const char *buf, size_t cnt) {
int i; int i;
for (i = 0; i < cnt; i++) for (i = 0; i < cnt; i++)
putch(buf[i]); putch(buf[i]);
return cnt; return cnt;
} }
/* Override fgets() in newlib with a version that does line editing */ /* Override fgets() in newlib with a version that does line editing */
__weak char *fgets(char *s, int bufsize, void *f) { __weak char *fgets(char *s, int bufsize, void *f) {
cgets(s, bufsize); cgets(s, bufsize);
return s; return s;
} }
__weak void _exit(int exitcode) { __weak void _exit(int exitcode) {
while (1) while (1)
; ;
} }

View File

@ -1,220 +1,220 @@
/* /*
* Linker script for libmaple. * Linker script for libmaple.
* *
* Original author "lanchon" from ST forums, with modifications by LeafLabs. * Original author "lanchon" from ST forums, with modifications by LeafLabs.
*/ */
OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
/* /*
* Configure other libraries we want in the link. * Configure other libraries we want in the link.
* *
* libgcc, libc, and libm are common across supported toolchains. * libgcc, libc, and libm are common across supported toolchains.
* However, some toolchains require additional archives which aren't * However, some toolchains require additional archives which aren't
* present everywhere (e.g. ARM's gcc-arm-embedded releases). * present everywhere (e.g. ARM's gcc-arm-embedded releases).
* *
* To hack around this, we let the build system specify additional * To hack around this, we let the build system specify additional
* archives by putting the right extra_libs.inc (in a directory under * archives by putting the right extra_libs.inc (in a directory under
* toolchains/) in our search path. * toolchains/) in our search path.
*/ */
GROUP(libgcc.a libc.a libm.a) GROUP(libgcc.a libc.a libm.a)
INCLUDE extra_libs.inc INCLUDE extra_libs.inc
/* /*
* These force the linker to search for vector table symbols. * These force the linker to search for vector table symbols.
* *
* These symbols vary by STM32 family (and also within families). * These symbols vary by STM32 family (and also within families).
* It's up to the build system to configure the link's search path * It's up to the build system to configure the link's search path
* properly for the target MCU. * properly for the target MCU.
*/ */
INCLUDE vector_symbols.inc INCLUDE vector_symbols.inc
/* STM32 vector table. */ /* STM32 vector table. */
EXTERN(__stm32_vector_table) EXTERN(__stm32_vector_table)
/* C runtime initialization function. */ /* C runtime initialization function. */
EXTERN(start_c) EXTERN(start_c)
/* main entry point */ /* main entry point */
EXTERN(main) EXTERN(main)
/* Initial stack pointer value. */ /* Initial stack pointer value. */
EXTERN(__msp_init) EXTERN(__msp_init)
PROVIDE(__msp_init = ORIGIN(ram) + LENGTH(ram)); PROVIDE(__msp_init = ORIGIN(ram) + LENGTH(ram));
/* Reset vector and chip reset entry point */ /* Reset vector and chip reset entry point */
EXTERN(__start__) EXTERN(__start__)
ENTRY(__start__) ENTRY(__start__)
PROVIDE(__exc_reset = __start__); PROVIDE(__exc_reset = __start__);
/* Heap boundaries, for libmaple */ /* Heap boundaries, for libmaple */
EXTERN(_lm_heap_start); EXTERN(_lm_heap_start);
EXTERN(_lm_heap_end); EXTERN(_lm_heap_end);
SECTIONS SECTIONS
{ {
.text : .text :
{ {
__text_start__ = .; __text_start__ = .;
/* /*
* STM32 vector table. Leave this here. Yes, really. * STM32 vector table. Leave this here. Yes, really.
*/ */
*(.stm32.interrupt_vector) *(.stm32.interrupt_vector)
/* /*
* Program code and vague linking * Program code and vague linking
*/ */
*(.text .text.* .gnu.linkonce.t.*) *(.text .text.* .gnu.linkonce.t.*)
*(.plt) *(.plt)
*(.gnu.warning) *(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.glue_7t) *(.glue_7) *(.vfp11_veneer)
*(.ARM.extab* .gnu.linkonce.armextab.*) *(.ARM.extab* .gnu.linkonce.armextab.*)
*(.gcc_except_table) *(.gcc_except_table)
*(.eh_frame_hdr) *(.eh_frame_hdr)
*(.eh_frame) *(.eh_frame)
. = ALIGN(4); . = ALIGN(4);
KEEP(*(.init)) KEEP(*(.init))
. = ALIGN(4); . = ALIGN(4);
__preinit_array_start = .; __preinit_array_start = .;
KEEP (*(.preinit_array)) KEEP (*(.preinit_array))
__preinit_array_end = .; __preinit_array_end = .;
. = ALIGN(4); . = ALIGN(4);
__init_array_start = .; __init_array_start = .;
KEEP (*(SORT(.init_array.*))) KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array)) KEEP (*(.init_array))
__init_array_end = .; __init_array_end = .;
. = ALIGN(0x4); . = ALIGN(0x4);
KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*))) KEEP (*(SORT(.ctors.*)))
KEEP (*crtend.o(.ctors)) KEEP (*crtend.o(.ctors))
. = ALIGN(4); . = ALIGN(4);
KEEP(*(.fini)) KEEP(*(.fini))
. = ALIGN(4); . = ALIGN(4);
__fini_array_start = .; __fini_array_start = .;
KEEP (*(.fini_array)) KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*))) KEEP (*(SORT(.fini_array.*)))
__fini_array_end = .; __fini_array_end = .;
KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*))) KEEP (*(SORT(.dtors.*)))
KEEP (*crtend.o(.dtors)) KEEP (*crtend.o(.dtors))
} > REGION_TEXT } > REGION_TEXT
/* /*
* End of text * End of text
*/ */
.text.align : .text.align :
{ {
. = ALIGN(8); . = ALIGN(8);
__text_end__ = .; __text_end__ = .;
} > REGION_TEXT } > REGION_TEXT
/* /*
* .ARM.exidx exception unwinding; mandated by ARM's C++ ABI * .ARM.exidx exception unwinding; mandated by ARM's C++ ABI
*/ */
__exidx_start = .; __exidx_start = .;
.ARM.exidx : .ARM.exidx :
{ {
*(.ARM.exidx* .gnu.linkonce.armexidx.*) *(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > REGION_RODATA } > REGION_RODATA
__exidx_end = .; __exidx_end = .;
/* /*
* .data * .data
*/ */
.data : .data :
{ {
__data_start__ = .; __data_start__ = .;
LONG(0) LONG(0)
. = ALIGN(8); . = ALIGN(8);
*(.got.plt) *(.got) *(.got.plt) *(.got)
*(.data .data.* .gnu.linkonce.d.*) *(.data .data.* .gnu.linkonce.d.*)
. = ALIGN(8); . = ALIGN(8);
__data_end__ = .; __data_end__ = .;
} > REGION_DATA AT> REGION_RODATA } > REGION_DATA AT> REGION_RODATA
/* /*
* Read-only data * Read-only data
*/ */
.rodata : .rodata :
{ {
*(.rodata .rodata.* .gnu.linkonce.r.*) *(.rodata .rodata.* .gnu.linkonce.r.*)
/* .USER_FLASH: We allow users to allocate into Flash here */ /* .USER_FLASH: We allow users to allocate into Flash here */
*(.USER_FLASH) *(.USER_FLASH)
/* ROM image configuration; for C startup */ /* ROM image configuration; for C startup */
. = ALIGN(4); . = ALIGN(4);
_lm_rom_img_cfgp = .; _lm_rom_img_cfgp = .;
LONG(LOADADDR(.data)); LONG(LOADADDR(.data));
/* /*
* Heap: Linker scripts may choose a custom heap by overriding * Heap: Linker scripts may choose a custom heap by overriding
* _lm_heap_start and _lm_heap_end. Otherwise, the heap is in * _lm_heap_start and _lm_heap_end. Otherwise, the heap is in
* internal SRAM, beginning after .bss, and growing towards * internal SRAM, beginning after .bss, and growing towards
* the stack. * the stack.
* *
* I'm shoving these here naively; there's probably a cleaner way * I'm shoving these here naively; there's probably a cleaner way
* to go about this. [mbolivar] * to go about this. [mbolivar]
*/ */
_lm_heap_start = DEFINED(_lm_heap_start) ? _lm_heap_start : _end; _lm_heap_start = DEFINED(_lm_heap_start) ? _lm_heap_start : _end;
_lm_heap_end = DEFINED(_lm_heap_end) ? _lm_heap_end : __msp_init; _lm_heap_end = DEFINED(_lm_heap_end) ? _lm_heap_end : __msp_init;
} > REGION_RODATA } > REGION_RODATA
/* /*
* .bss * .bss
*/ */
.bss : .bss :
{ {
. = ALIGN(8); . = ALIGN(8);
__bss_start__ = .; __bss_start__ = .;
*(.bss .bss.* .gnu.linkonce.b.*) *(.bss .bss.* .gnu.linkonce.b.*)
*(COMMON) *(COMMON)
. = ALIGN (8); . = ALIGN (8);
__bss_end__ = .; __bss_end__ = .;
_end = __bss_end__; _end = __bss_end__;
} > REGION_BSS } > REGION_BSS
/* /*
* Debugging sections * Debugging sections
*/ */
.stab 0 (NOLOAD) : { *(.stab) } .stab 0 (NOLOAD) : { *(.stab) }
.stabstr 0 (NOLOAD) : { *(.stabstr) } .stabstr 0 (NOLOAD) : { *(.stabstr) }
/* DWARF debug sections. /* DWARF debug sections.
* Symbols in the DWARF debugging sections are relative to the beginning * Symbols in the DWARF debugging sections are relative to the beginning
* of the section so we begin them at 0. */ * of the section so we begin them at 0. */
/* DWARF 1 */ /* DWARF 1 */
.debug 0 : { *(.debug) } .debug 0 : { *(.debug) }
.line 0 : { *(.line) } .line 0 : { *(.line) }
/* GNU DWARF 1 extensions */ /* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) } .debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */ /* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) } .debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) } .debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */ /* DWARF 2 */
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) } .debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) } .debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) } .debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) } .debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) } .debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) } .debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */ /* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) } .debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) } .debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) } .debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) } .debug_varnames 0 : { *(.debug_varnames) }
.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) } .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
.ARM.attributes 0 : { KEEP (*(.ARM.attributes)) } .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) }
/DISCARD/ : { *(.note.GNU-stack) } /DISCARD/ : { *(.note.GNU-stack) }
} }

View File

@ -1,7 +1,7 @@
/* /*
* Extra archives needed by ARM's GCC ARM Embedded arm-none-eabi- * Extra archives needed by ARM's GCC ARM Embedded arm-none-eabi-
* releases (https://launchpad.net/gcc-arm-embedded/). * releases (https://launchpad.net/gcc-arm-embedded/).
*/ */
/* This is for the provided newlib. */ /* This is for the provided newlib. */
GROUP(libnosys.a) GROUP(libnosys.a)

View File

@ -1,78 +1,78 @@
EXTERN(__msp_init) EXTERN(__msp_init)
EXTERN(__exc_reset) EXTERN(__exc_reset)
EXTERN(__exc_nmi) EXTERN(__exc_nmi)
EXTERN(__exc_hardfault) EXTERN(__exc_hardfault)
EXTERN(__exc_memmanage) EXTERN(__exc_memmanage)
EXTERN(__exc_busfault) EXTERN(__exc_busfault)
EXTERN(__exc_usagefault) EXTERN(__exc_usagefault)
EXTERN(__stm32reservedexception7) EXTERN(__stm32reservedexception7)
EXTERN(__stm32reservedexception8) EXTERN(__stm32reservedexception8)
EXTERN(__stm32reservedexception9) EXTERN(__stm32reservedexception9)
EXTERN(__stm32reservedexception10) EXTERN(__stm32reservedexception10)
EXTERN(__exc_svc) EXTERN(__exc_svc)
EXTERN(__exc_debug_monitor) EXTERN(__exc_debug_monitor)
EXTERN(__stm32reservedexception13) EXTERN(__stm32reservedexception13)
EXTERN(__exc_pendsv) EXTERN(__exc_pendsv)
EXTERN(__exc_systick) EXTERN(__exc_systick)
EXTERN(__irq_wwdg) EXTERN(__irq_wwdg)
EXTERN(__irq_pvd) EXTERN(__irq_pvd)
EXTERN(__irq_tamper) EXTERN(__irq_tamper)
EXTERN(__irq_rtc) EXTERN(__irq_rtc)
EXTERN(__irq_flash) EXTERN(__irq_flash)
EXTERN(__irq_rcc) EXTERN(__irq_rcc)
EXTERN(__irq_exti0) EXTERN(__irq_exti0)
EXTERN(__irq_exti1) EXTERN(__irq_exti1)
EXTERN(__irq_exti2) EXTERN(__irq_exti2)
EXTERN(__irq_exti3) EXTERN(__irq_exti3)
EXTERN(__irq_exti4) EXTERN(__irq_exti4)
EXTERN(__irq_dma1_channel1) EXTERN(__irq_dma1_channel1)
EXTERN(__irq_dma1_channel2) EXTERN(__irq_dma1_channel2)
EXTERN(__irq_dma1_channel3) EXTERN(__irq_dma1_channel3)
EXTERN(__irq_dma1_channel4) EXTERN(__irq_dma1_channel4)
EXTERN(__irq_dma1_channel5) EXTERN(__irq_dma1_channel5)
EXTERN(__irq_dma1_channel6) EXTERN(__irq_dma1_channel6)
EXTERN(__irq_dma1_channel7) EXTERN(__irq_dma1_channel7)
EXTERN(__irq_adc) EXTERN(__irq_adc)
EXTERN(__irq_usb_hp_can_tx) EXTERN(__irq_usb_hp_can_tx)
EXTERN(__irq_usb_lp_can_rx0) EXTERN(__irq_usb_lp_can_rx0)
EXTERN(__irq_can_rx1) EXTERN(__irq_can_rx1)
EXTERN(__irq_can_sce) EXTERN(__irq_can_sce)
EXTERN(__irq_exti9_5) EXTERN(__irq_exti9_5)
EXTERN(__irq_tim1_brk) EXTERN(__irq_tim1_brk)
EXTERN(__irq_tim1_up) EXTERN(__irq_tim1_up)
EXTERN(__irq_tim1_trg_com) EXTERN(__irq_tim1_trg_com)
EXTERN(__irq_tim1_cc) EXTERN(__irq_tim1_cc)
EXTERN(__irq_tim2) EXTERN(__irq_tim2)
EXTERN(__irq_tim3) EXTERN(__irq_tim3)
EXTERN(__irq_tim4) EXTERN(__irq_tim4)
EXTERN(__irq_i2c1_ev) EXTERN(__irq_i2c1_ev)
EXTERN(__irq_i2c1_er) EXTERN(__irq_i2c1_er)
EXTERN(__irq_i2c2_ev) EXTERN(__irq_i2c2_ev)
EXTERN(__irq_i2c2_er) EXTERN(__irq_i2c2_er)
EXTERN(__irq_spi1) EXTERN(__irq_spi1)
EXTERN(__irq_spi2) EXTERN(__irq_spi2)
EXTERN(__irq_usart1) EXTERN(__irq_usart1)
EXTERN(__irq_usart2) EXTERN(__irq_usart2)
EXTERN(__irq_usart3) EXTERN(__irq_usart3)
EXTERN(__irq_exti15_10) EXTERN(__irq_exti15_10)
EXTERN(__irq_rtcalarm) EXTERN(__irq_rtcalarm)
EXTERN(__irq_usbwakeup) EXTERN(__irq_usbwakeup)
EXTERN(__irq_tim8_brk) EXTERN(__irq_tim8_brk)
EXTERN(__irq_tim8_up) EXTERN(__irq_tim8_up)
EXTERN(__irq_tim8_trg_com) EXTERN(__irq_tim8_trg_com)
EXTERN(__irq_tim8_cc) EXTERN(__irq_tim8_cc)
EXTERN(__irq_adc3) EXTERN(__irq_adc3)
EXTERN(__irq_fsmc) EXTERN(__irq_fsmc)
EXTERN(__irq_sdio) EXTERN(__irq_sdio)
EXTERN(__irq_tim5) EXTERN(__irq_tim5)
EXTERN(__irq_spi3) EXTERN(__irq_spi3)
EXTERN(__irq_uart4) EXTERN(__irq_uart4)
EXTERN(__irq_uart5) EXTERN(__irq_uart5)
EXTERN(__irq_tim6) EXTERN(__irq_tim6)
EXTERN(__irq_tim7) EXTERN(__irq_tim7)
EXTERN(__irq_dma2_channel1) EXTERN(__irq_dma2_channel1)
EXTERN(__irq_dma2_channel2) EXTERN(__irq_dma2_channel2)
EXTERN(__irq_dma2_channel3) EXTERN(__irq_dma2_channel3)
EXTERN(__irq_dma2_channel4_5) EXTERN(__irq_dma2_channel4_5)

View File

@ -1,2 +1,2 @@
// API compatibility // API compatibility
#include "variant.h" #include "variant.h"

View File

@ -1,13 +1,13 @@
#ifndef _VARIANT_ARDUINO_STM32_ #ifndef _VARIANT_ARDUINO_STM32_
#define _VARIANT_ARDUINO_STM32_ #define _VARIANT_ARDUINO_STM32_
#define digitalPinToPort(P) ( PIN_MAP[P].gpio_device ) #define digitalPinToPort(P) ( PIN_MAP[P].gpio_device )
#define digitalPinToBitMask(P) ( BIT(PIN_MAP[P].gpio_bit) ) #define digitalPinToBitMask(P) ( BIT(PIN_MAP[P].gpio_bit) )
#define portOutputRegister(port) ( &(port->regs->ODR) ) #define portOutputRegister(port) ( &(port->regs->ODR) )
#define portInputRegister(port) ( &(port->regs->IDR) ) #define portInputRegister(port) ( &(port->regs->IDR) )
#define portSetRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->BSRR) ) #define portSetRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->BSRR) )
#define portClearRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->BRR) ) #define portClearRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->BRR) )
#define portConfigRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->CRL) ) #define portConfigRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->CRL) )
#endif /* _VARIANT_ARDUINO_STM32_ */ #endif /* _VARIANT_ARDUINO_STM32_ */

View File

@ -1,57 +1,57 @@
/****************************************************************************** /******************************************************************************
* The MIT License * The MIT License
* *
* Copyright (c) 2011 LeafLabs, LLC. * Copyright (c) 2011 LeafLabs, LLC.
* *
* Permission is hereby granted, free of charge, to any person * Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation * obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without * files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy, * restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies * modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is * of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be * The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software. * included in all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE. * SOFTWARE.
*****************************************************************************/ *****************************************************************************/
/* /*
* This file is a modified version of a file obtained from * This file is a modified version of a file obtained from
* CodeSourcery Inc. (now part of Mentor Graphics Corp.), in which the * CodeSourcery Inc. (now part of Mentor Graphics Corp.), in which the
* following text appeared: * following text appeared:
* *
* The authors hereby grant permission to use, copy, modify, distribute, * The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided * and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this * that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement, * notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses. * license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors * Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that * and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where * the new terms are clearly indicated on the first page of each file where
* they apply. * they apply.
*/ */
.text .text
.code 16 .code 16
.thumb_func .thumb_func
.globl __start__ .globl __start__
.type __start__, %function .type __start__, %function
__start__: __start__:
.fnstart .fnstart
ldr r1,=__msp_init ldr r1,=__msp_init
mov sp,r1 mov sp,r1
ldr r1,=start_c ldr r1,=start_c
bx r1 bx r1
.pool .pool
.cantunwind .cantunwind
.fnend .fnend

View File

@ -1,95 +1,95 @@
/****************************************************************************** /******************************************************************************
* The MIT License * The MIT License
* *
* Copyright (c) 2011 LeafLabs, LLC. * Copyright (c) 2011 LeafLabs, LLC.
* *
* Permission is hereby granted, free of charge, to any person * Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation * obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without * files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy, * restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies * modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is * of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be * The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software. * included in all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE. * SOFTWARE.
*****************************************************************************/ *****************************************************************************/
/* /*
* This file is a modified version of a file obtained from * This file is a modified version of a file obtained from
* CodeSourcery Inc. (now part of Mentor Graphics Corp.), in which the * CodeSourcery Inc. (now part of Mentor Graphics Corp.), in which the
* following text appeared: * following text appeared:
* *
* Copyright (c) 2006, 2007 CodeSourcery Inc * Copyright (c) 2006, 2007 CodeSourcery Inc
* *
* The authors hereby grant permission to use, copy, modify, distribute, * The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided * and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this * that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement, * notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses. * license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors * Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that * and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where * the new terms are clearly indicated on the first page of each file where
* they apply. * they apply.
*/ */
#include <stddef.h> #include <stddef.h>
extern void __libc_init_array(void); extern void __libc_init_array(void);
extern int main(int, char**, char**); extern int main(int, char**, char**);
extern void exit(int) __attribute__((noreturn, weak)); extern void exit(int) __attribute__((noreturn, weak));
/* The linker must ensure that these are at least 4-byte aligned. */ /* The linker must ensure that these are at least 4-byte aligned. */
extern char __data_start__, __data_end__; extern char __data_start__, __data_end__;
extern char __bss_start__, __bss_end__; extern char __bss_start__, __bss_end__;
struct rom_img_cfg { struct rom_img_cfg {
int *img_start; int *img_start;
}; };
extern char _lm_rom_img_cfgp; extern char _lm_rom_img_cfgp;
void __attribute__((noreturn)) start_c(void) { void __attribute__((noreturn)) start_c(void) {
struct rom_img_cfg *img_cfg = (struct rom_img_cfg*)&_lm_rom_img_cfgp; struct rom_img_cfg *img_cfg = (struct rom_img_cfg*)&_lm_rom_img_cfgp;
int *src = img_cfg->img_start; int *src = img_cfg->img_start;
int *dst = (int*)&__data_start__; int *dst = (int*)&__data_start__;
int exit_code; int exit_code;
/* Initialize .data, if necessary. */ /* Initialize .data, if necessary. */
if (src != dst) { if (src != dst) {
int *end = (int*)&__data_end__; int *end = (int*)&__data_end__;
while (dst < end) { while (dst < end) {
*dst++ = *src++; *dst++ = *src++;
} }
} }
/* Zero .bss. */ /* Zero .bss. */
dst = (int*)&__bss_start__; dst = (int*)&__bss_start__;
while (dst < (int*)&__bss_end__) { while (dst < (int*)&__bss_end__) {
*dst++ = 0; *dst++ = 0;
} }
/* Run initializers. */ /* Run initializers. */
__libc_init_array(); __libc_init_array();
/* Jump to main. */ /* Jump to main. */
exit_code = main(0, 0, 0); exit_code = main(0, 0, 0);
if (exit) { if (exit) {
exit(exit_code); exit(exit_code);
} }
/* If exit is NULL, make sure we don't return. */ /* If exit is NULL, make sure we don't return. */
for (;;) for (;;)
continue; continue;
} }

View File

@ -1,176 +1,176 @@
/****************************************************************************** /******************************************************************************
* The MIT License * The MIT License
* *
* Copyright (c) 2010 Perry Hung. * Copyright (c) 2010 Perry Hung.
* Copyright (c) 2011, 2012 LeafLabs, LLC. * Copyright (c) 2011, 2012 LeafLabs, LLC.
* *
* Permission is hereby granted, free of charge, to any person * Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation * obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without * files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy, * restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies * modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is * of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be * The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software. * included in all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE. * SOFTWARE.
*****************************************************************************/ *****************************************************************************/
/** /**
* @file wirish/syscalls.c * @file wirish/syscalls.c
* @brief newlib stubs * @brief newlib stubs
* *
* Low level system routines used by newlib for basic I/O and memory * Low level system routines used by newlib for basic I/O and memory
* allocation. You can override most of these. * allocation. You can override most of these.
*/ */
#include <libmaple/libmaple.h> #include <libmaple/libmaple.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <errno.h> #include <errno.h>
#include <stddef.h> #include <stddef.h>
/* If CONFIG_HEAP_START (or CONFIG_HEAP_END) isn't defined, then /* If CONFIG_HEAP_START (or CONFIG_HEAP_END) isn't defined, then
* assume _lm_heap_start (resp. _lm_heap_end) is appropriately set by * assume _lm_heap_start (resp. _lm_heap_end) is appropriately set by
* the linker */ * the linker */
#ifndef CONFIG_HEAP_START #ifndef CONFIG_HEAP_START
extern char _lm_heap_start; extern char _lm_heap_start;
#define CONFIG_HEAP_START ((void *)&_lm_heap_start) #define CONFIG_HEAP_START ((void *)&_lm_heap_start)
#endif #endif
#ifndef CONFIG_HEAP_END #ifndef CONFIG_HEAP_END
extern char _lm_heap_end; extern char _lm_heap_end;
#define CONFIG_HEAP_END ((void *)&_lm_heap_end) #define CONFIG_HEAP_END ((void *)&_lm_heap_end)
#endif #endif
/* /*
* _sbrk -- Increment the program break. * _sbrk -- Increment the program break.
* *
* Get incr bytes more RAM (for use by the heap). malloc() and * Get incr bytes more RAM (for use by the heap). malloc() and
* friends call this function behind the scenes. * friends call this function behind the scenes.
*/ */
void *_sbrk(int incr) { void *_sbrk(int incr) {
static void * pbreak = NULL; /* current program break */ static void * pbreak = NULL; /* current program break */
void * ret; void * ret;
if (pbreak == NULL) { if (pbreak == NULL) {
pbreak = CONFIG_HEAP_START; pbreak = CONFIG_HEAP_START;
} }
if ((CONFIG_HEAP_END - pbreak < incr) || if ((CONFIG_HEAP_END - pbreak < incr) ||
(pbreak - CONFIG_HEAP_START < -incr)) { (pbreak - CONFIG_HEAP_START < -incr)) {
errno = ENOMEM; errno = ENOMEM;
return (void *)-1; return (void *)-1;
} }
ret = pbreak; ret = pbreak;
pbreak += incr; pbreak += incr;
return ret; return ret;
} }
__weak int _open(const char *path, int flags, ...) { __weak int _open(const char *path, int flags, ...) {
return 1; return 1;
} }
__weak int _close(int fd) { __weak int _close(int fd) {
return 0; return 0;
} }
__weak int _fstat(int fd, struct stat *st) { __weak int _fstat(int fd, struct stat *st) {
st->st_mode = S_IFCHR; st->st_mode = S_IFCHR;
return 0; return 0;
} }
__weak int _isatty(int fd) { __weak int _isatty(int fd) {
return 1; return 1;
} }
__weak int isatty(int fd) { __weak int isatty(int fd) {
return 1; return 1;
} }
__weak int _lseek(int fd, off_t pos, int whence) { __weak int _lseek(int fd, off_t pos, int whence) {
return -1; return -1;
} }
__weak unsigned char getch(void) { __weak unsigned char getch(void) {
return 0; return 0;
} }
__weak int _read(int fd, char *buf, size_t cnt) { __weak int _read(int fd, char *buf, size_t cnt) {
*buf = getch(); *buf = getch();
return 1; return 1;
} }
__weak void putch(unsigned char c) { __weak void putch(unsigned char c) {
} }
__weak void cgets(char *s, int bufsize) { __weak void cgets(char *s, int bufsize) {
char *p; char *p;
int c; int c;
int i; int i;
for (i = 0; i < bufsize; i++) { for (i = 0; i < bufsize; i++) {
*(s+i) = 0; *(s+i) = 0;
} }
// memset(s, 0, bufsize); // memset(s, 0, bufsize);
p = s; p = s;
for (p = s; p < s + bufsize-1;) { for (p = s; p < s + bufsize-1;) {
c = getch(); c = getch();
switch (c) { switch (c) {
case '\r' : case '\r' :
case '\n' : case '\n' :
putch('\r'); putch('\r');
putch('\n'); putch('\n');
*p = '\n'; *p = '\n';
return; return;
case '\b' : case '\b' :
if (p > s) { if (p > s) {
*p-- = 0; *p-- = 0;
putch('\b'); putch('\b');
putch(' '); putch(' ');
putch('\b'); putch('\b');
} }
break; break;
default : default :
putch(c); putch(c);
*p++ = c; *p++ = c;
break; break;
} }
} }
return; return;
} }
__weak int _write(int fd, const char *buf, size_t cnt) { __weak int _write(int fd, const char *buf, size_t cnt) {
int i; int i;
for (i = 0; i < cnt; i++) for (i = 0; i < cnt; i++)
putch(buf[i]); putch(buf[i]);
return cnt; return cnt;
} }
/* Override fgets() in newlib with a version that does line editing */ /* Override fgets() in newlib with a version that does line editing */
__weak char *fgets(char *s, int bufsize, void *f) { __weak char *fgets(char *s, int bufsize, void *f) {
cgets(s, bufsize); cgets(s, bufsize);
return s; return s;
} }
__weak void _exit(int exitcode) { __weak void _exit(int exitcode) {
while (1) while (1)
; ;
} }