cortexelf-v1: Use new memory map to access all flash and ram. Add fat.
authorKeith Packard <keithp@keithp.com>
Sun, 2 Apr 2017 22:40:03 +0000 (15:40 -0700)
committerKeith Packard <keithp@keithp.com>
Sun, 2 Apr 2017 22:40:03 +0000 (15:40 -0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
src/cortexelf-v1/Makefile
src/cortexelf-v1/ao_cortexelf.c
src/stm/altos-512.ld [new file with mode: 0644]

index c74b0cceaa03f89d2adaa4ead056e3791bd43785..02ef817e1718485deb36dd0c00ae3492b881332d 100644 (file)
@@ -4,6 +4,7 @@
 #
 
 include ../stm/Makefile.defs
+LDFLAGS=-L../stm -Wl,-Taltos-512.ld
 
 INC = \
        ao.h \
@@ -61,6 +62,8 @@ ALTOS_SRC = \
        ao_ps2.c \
        ao_console.c \
        ao_sdcard.c \
+       ao_bufio.c \
+       ao_fat.c \
        $(PROFILE) \
        $(SAMPLE_PROFILE) \
        $(STACK_GUARD)
@@ -80,7 +83,7 @@ OBJ=$(SRC:.c=.o)
 
 all: $(PROG) $(HEX)
 
-$(PROG): Makefile $(OBJ) altos.ld
+$(PROG): Makefile $(OBJ) altos-512.ld
        $(call quiet,CC) $(LDFLAGS) $(CFLAGS) -o $(PROG) $(OBJ) $(LIBS)
 
 ../altitude-pa.h: make-altitude-pa
index 67062c85bee05723e3787bf5369a3e56496eb8df..0c6852d96a88c2f98cde2889cda268773c7fd1f5 100644 (file)
@@ -26,6 +26,7 @@
 #include <ao_vga.h>
 #include <ao_console.h>
 #include <ao_sdcard.h>
+#include <ao_fat.h>
 
 struct ao_task ball_task;
 
@@ -207,6 +208,7 @@ main(void)
        ao_exti_init();
 
        ao_sdcard_init();
+       ao_fat_init();
 
        ao_ps2_init();
        ao_vga_init();
diff --git a/src/stm/altos-512.ld b/src/stm/altos-512.ld
new file mode 100644 (file)
index 0000000..78c4168
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright © 2017 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+MEMORY {
+       rom (rx) : ORIGIN = 0x08001000, LENGTH = 508K
+       ram (!w) : ORIGIN = 0x20000000, LENGTH = 81408
+       stack (!w) : ORIGIN = 0x20013e00, LENGTH = 512
+}
+
+INCLUDE registers.ld
+
+EXTERN (stm_interrupt_vector)
+
+SECTIONS {
+       /*
+        * Rom contents
+        */
+
+       .text ORIGIN(rom) : {
+               __text_start__ = .;
+               *(.interrupt)   /* Interrupt vectors */
+
+               . = ORIGIN(rom) + 0x100;
+
+
+               /* Ick. What I want is to specify the
+                * addresses of some global constants so
+                * that I can find them across versions
+                * of the application. I can't figure out
+                * how to make gnu ld do that, so instead
+                * we just load the two files that include
+                * these defines in the right order here and
+                * expect things to 'just work'. Don't change
+                * the contents of those files, ok?
+                */
+               ao_romconfig.o(.romconfig*)
+               ao_product.o(.romconfig*)
+               *(.text*)       /* Executable code */
+               *(.rodata*)     /* Constants */
+
+       } > rom
+
+       .ARM.exidx : {
+               *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+       } > rom
+       __text_end__ = .;
+
+       /* Boot data which must live at the start of ram so that
+        * the application and bootloader share the same addresses.
+        * This must be all uninitialized data
+        */
+       .boot (NOLOAD) : {
+               __boot_start__ = .;
+               *(.boot)
+               . = ALIGN(4);
+               __boot_end__ = .;
+       } >ram
+
+       /* Data -- relocated to RAM, but written to ROM
+        */
+       .data : {
+               __data_start__ = .;
+               *(.data)        /* initialized data */
+               . = ALIGN(4);
+               __data_end__ = .;
+       } >ram AT>rom
+
+       .bss : {
+               __bss_start__ = .;
+               *(.bss)
+               *(COMMON)
+               . = ALIGN(4);
+               __bss_end__ = .;
+       } >ram
+
+       PROVIDE(end = .);
+
+       PROVIDE(__stack__ = ORIGIN(stack) + LENGTH(stack));
+}
+
+ENTRY(start);
+
+