7 #define MEM_SIZE 0x00010000
8 #define MEM_OFFSET 0x20000000
10 uint32_t get_msp(void);
14 uint32_t tmp = *MCU_ID;
15 cputs("# ROBSYS 0.1 LOADING...\n");
16 cputs("# DEVICE ID: ");
19 cputs("HIGH DENSITY\n");
25 uart_puts("# REVISION: ");
28 cputs("REVISION A\n");
31 cputs("REVISION Z\n");
34 cputs("REVISION 1/2/3/X/Y\n");
40 extern char _endofbss;
42 uint32_t current_stack = get_msp();
43 uint32_t stack_usage = (MEM_OFFSET + MEM_SIZE) - current_stack;
44 uint32_t data_bss = &_endofbss - MEM_OFFSET;
45 uint32_t mem_free = MEM_SIZE - stack_usage - data_bss;
47 cputs("# TOTAL MEMORY: ");
50 cputs("# FREE MEMORY: ");
53 cputs("# STACK USAGE: ");
54 addrtohex(stack_usage);
59 /* Get the master stack pointer's position
60 * Here we use a so-called naked function,
61 * that doesn't automatically push and pop */
63 uint32_t get_msp(void) __attribute__( ( naked ) );
64 uint32_t get_msp(void)
67 __asm__ volatile ("mrs %0, msp\n\t"
69 "bx lr \n\t" : "=r" (msp) );