diff --git a/test/Makefile b/test/Makefile new file mode 100644 index 0000000..b925f8c --- /dev/null +++ b/test/Makefile @@ -0,0 +1,29 @@ +CC=arm-none-eabi-gcc +OBJCOPY=arm-none-eabi-objcopy + +LDS=test.lds + +OPTI=-O0 +CFLAGS= $(OPTI) -g -gdwarf-2 -mthumb -fno-builtin -mcpu=cortex-m4 -Wall -std=c99 -ffunction-sections -fdata-sections -mabi=aapcs -fno-unroll-loops -ffast-math -ftree-vectorize -fverbose-asm +LDFLAGS=-nostartfiles -Wl,-gc-sections -T$(LDS) -L. --specs=nano.specs + +all: test.bin + +test.o: test.c + $(CC) $(CFLAGS) -c test.o test.c + +test.elf: test.o test.lds + $(CC) $(LDFLAGS) test.o -o test.elf + +test.bin: test.elf + $(OBJCOPY) -O binary -S test.elf test.bin + +debug: test.bin + st-flash write test.bin 0x8000000 + st-util + +run: test.bin + st-flash write test.bin 0x8000000 + +clean: + $(RM) test.o test.elf test.bin diff --git a/test/test.c b/test/test.c new file mode 100644 index 0000000..4a93f03 --- /dev/null +++ b/test/test.c @@ -0,0 +1,144 @@ +#include + +int default_handler(void) +{ + while(1); + return 0; +} + +int reset_handler(void) +{ + while(1); + return 0; +} + +uint32_t vector_table[128] __attribute__((section(".isr_vector"))) = { + (uint32_t) default_handler, + (uint32_t) reset_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler, + (uint32_t) default_handler +}; diff --git a/test/test.lds b/test/test.lds new file mode 100644 index 0000000..4bc04e6 --- /dev/null +++ b/test/test.lds @@ -0,0 +1,49 @@ +MEMORY +{ + FLASH (rx): ORIGIN = 0x8000000, LENGTH = 512K + RAM (rwx): ORIGIN = 0x20000000, LENGTH = 96K +} + +ENTRY(reset_handler) + +SECTIONS +{ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) + . = ORIGIN(FLASH) + 512; + } > FLASH + + .text : + { + *(.text) + . = ALIGN(4); + _etext = .; + } > FLASH + + .data : + { + _sdata = .; + *(.data*) + _edata = .; + . = ALIGN(4); + } > RAM AT>FLASH + + .bss : + { + __bss_start__ = .; + *(.bss) + __bss_end__ = .; + } > RAM + + /DISCARD/ : + { + *(.ARM.exidx*) + } + PROVIDE(_heap = __bss_end__); + PROVIDE(_heap_end = _stack - _stack_size); + PROVIDE(_stack_size = 1024); + PROVIDE(_stack = ORIGIN(RAM) + LENGTH(RAM)); +} +