@@ -44,21 +44,29 @@ defined in linker script */
44
44
. word _sbss
45
45
/ * end address for the .bss section. defined in linker script * /
46
46
. word _ebss
47
-
48
- . section .text.Reset_Handler
49
- .weak Reset_Handler
50
- .type Reset_Handler , %function
51
- Reset_Handler:
52
- ldr r0 , =_estack
53
- mov sp , r0 / * set stack pointer * /
54
-
55
- / * Copy the data segment initializers from flash to SRAM * /
56
- ldr r0 , =_sdata
57
- ldr r1 , =_edata
58
- ldr r2 , =_sidata
47
+ / * start address for the .MB_MEM2 section. defined in linker script * /
48
+ . word _sMB_MEM2
49
+ / * end address for the .MB_MEM2 section. defined in linker script * /
50
+ . word _eMB_MEM2
51
+
52
+ / * INIT_BSS macro is used to fill the specified region [ start : end ] with zeros * /
53
+ .macro INIT_BSS start , end
54
+ ldr r0 , =\start
55
+ ldr r1 , =\end
59
56
movs r3 , # 0
60
- b LoopCopyDataInit
57
+ bl LoopFillZerobss
58
+ .endm
59
+
60
+ / * INIT_DATA macro is used to copy data in the region [ start : end ] starting from 'src' * /
61
+ .macro INIT_DATA start , end , src
62
+ ldr r0 , =\start
63
+ ldr r1 , =\end
64
+ ldr r2 , =\src
65
+ movs r3 , # 0
66
+ bl LoopCopyDataInit
67
+ .endm
61
68
69
+ . section .text.data_initializers
62
70
CopyDataInit:
63
71
ldr r4 , [ r2 , r3 ]
64
72
str r4 , [ r0 , r3 ]
@@ -67,21 +75,31 @@ CopyDataInit:
67
75
LoopCopyDataInit:
68
76
adds r4 , r0 , r3
69
77
cmp r4 , r1
70
- bcc CopyDataInit
71
-
72
- / * Zero fill the bss segment. * /
73
- ldr r2 , =_sbss
74
- ldr r4 , =_ebss
75
- movs r3 , # 0
76
- b LoopFillZerobss
78
+ bcc CopyDataInit
79
+ bx lr
77
80
78
81
FillZerobss:
79
- str r3 , [ r2 ]
80
- adds r2 , r2 , # 4
82
+ str r3 , [ r0 ]
83
+ adds r0 , r0 , # 4
81
84
82
85
LoopFillZerobss:
83
- cmp r2 , r4
86
+ cmp r0 , r1
84
87
bcc FillZerobss
88
+ bx lr
89
+
90
+ . section .text.Reset_Handler
91
+ .weak Reset_Handler
92
+ .type Reset_Handler , %function
93
+ Reset_Handler:
94
+ ldr r0 , =_estack
95
+ mov sp , r0 / * set stack pointer * /
96
+
97
+ / * Copy the data segment initializers from flash to SRAM * /
98
+ INIT_DATA _sdata , _edata , _sidata
99
+
100
+ / * Zero fill the bss segments. * /
101
+ INIT_BSS _sbss , _ebss
102
+ INIT_BSS _sMB_MEM2 , _eMB_MEM2
85
103
86
104
/ * Call the clock system intitialization function. * /
87
105
bl SystemInit
0 commit comments