summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/startup.c50
-rw-r--r--src/test_program.c8
2 files changed, 58 insertions, 0 deletions
diff --git a/src/startup.c b/src/startup.c
new file mode 100644
index 0000000..b71a805
--- /dev/null
+++ b/src/startup.c
@@ -0,0 +1,50 @@
+
+
+#define STACK_TOP 0x20005000
+
+
+extern unsigned int _BSS_START;
+extern unsigned int _BSS_END;
+extern unsigned int _DATA_ROM_START;
+extern unsigned int _DATA_RAM_START;
+extern unsigned int _DATA_RAM_END;
+
+void startup();
+void main();
+
+// Define the vector table
+unsigned int * myvectors[2]
+__attribute__ ((section("vectors")))= {
+ (unsigned int *) STACK_TOP, // stack pointer
+ (unsigned int *) startup // code entry point
+};
+
+void startup()
+{
+ /* Set memory in bss segment to zeros */
+ unsigned int * bss_start_p = &_BSS_START;
+ unsigned int * bss_end_p = &_BSS_END;
+
+ while(bss_start_p != bss_end_p)
+ {
+ *bss_start_p = 0;
+ bss_start_p++;
+ }
+
+ /* Copy memory in data segment from its position
+ * in the flash image to its position in the
+ * read/write memory */
+ unsigned int * data_rom_start_p = &_DATA_ROM_START;
+ unsigned int * data_ram_start_p = &_DATA_RAM_START;
+ unsigned int * data_ram_end_p = &_DATA_RAM_END;
+
+ while(data_ram_start_p != data_ram_end_p)
+ {
+ *data_ram_start_p = *data_rom_start_p;
+ data_ram_start_p++;
+ data_rom_start_p++;
+ }
+
+ /* Now we are ready to start the main function */
+ main();
+}
diff --git a/src/test_program.c b/src/test_program.c
new file mode 100644
index 0000000..80f569b
--- /dev/null
+++ b/src/test_program.c
@@ -0,0 +1,8 @@
+static const int a = 7;
+static int b = 8;
+static int sum;
+
+void main()
+{
+ sum = a + b;
+}