aboutsummaryrefslogtreecommitdiff
path: root/init_high.cpp
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2015-12-18 23:06:46 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2015-12-18 23:06:46 +0100
commit6d27f1755b782340d1c55c3f8f01a193514a3607 (patch)
tree40751b5d17d54ab69b2aaa44715d3889306a54b8 /init_high.cpp
parent62766425fe3a552440228c78f13a2c1dd62e228b (diff)
downloadstm32f103-playground-6d27f1755b782340d1c55c3f8f01a193514a3607.tar.gz
stm32f103-playground-6d27f1755b782340d1c55c3f8f01a193514a3607.tar.bz2
stm32f103-playground-6d27f1755b782340d1c55c3f8f01a193514a3607.tar.xz
stm32f103-playground-6d27f1755b782340d1c55c3f8f01a193514a3607.zip
o Splitting out init from main.
Diffstat (limited to 'init_high.cpp')
-rw-r--r--init_high.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/init_high.cpp b/init_high.cpp
new file mode 100644
index 0000000..235a649
--- /dev/null
+++ b/init_high.cpp
@@ -0,0 +1,27 @@
+#include <stdint.h>
+
+extern uint32_t _copy_data_load, _copy_data_store, _copy_data_store_end;
+extern uint32_t _bss_start, _bss_end;
+
+extern int main();
+extern "C" int init_high();
+
+int init_high() {
+ // Copy data from flash to ram
+ uint32_t *src = &_copy_data_load;
+ uint32_t *dest = &_copy_data_store;
+ uint32_t *end = &_copy_data_store_end;
+
+ while (dest <= end) {
+ *dest++ = *src++;
+ }
+
+ // Clear the BSS segment
+ dest = &_bss_start;
+ end = &_bss_end;
+ while (dest <= end) {
+ *dest++ = 0;
+ }
+
+ return main();
+}