mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 09:09:19 +02:00
+ startup code copies initialized data now from flash to ram
git-svn-id: trunk@13295 -
This commit is contained in:
parent
0806434647
commit
797f51ea2d
@ -425,6 +425,12 @@ unit lpc21x4;
|
|||||||
b .Lhalt
|
b .Lhalt
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
_data: record end; external name '_data';
|
||||||
|
_edata: record end; external name '_edata';
|
||||||
|
_etext: record end; external name '_etext';
|
||||||
|
_bss_start: record end; external name '_bss_start';
|
||||||
|
_bss_end: record end; external name '_bss_end';
|
||||||
|
|
||||||
procedure _FPC_start; assembler; nostackframe;
|
procedure _FPC_start; assembler; nostackframe;
|
||||||
label
|
label
|
||||||
@ -526,20 +532,37 @@ unit lpc21x4;
|
|||||||
ldr r0,.L6
|
ldr r0,.L6
|
||||||
str r1,[r0]
|
str r1,[r0]
|
||||||
|
|
||||||
|
// copy initialized data from flash to ram
|
||||||
|
ldr r1,.L_etext
|
||||||
|
ldr r2,.L_data
|
||||||
|
ldr r3,.L_edata
|
||||||
|
.Lcopyloop:
|
||||||
|
cmp r2,r3
|
||||||
|
ldr r0,[r1],#4
|
||||||
|
str r0,[r2],#4
|
||||||
|
bls .Lcopyloop
|
||||||
|
|
||||||
// clear onboard ram
|
// clear onboard ram
|
||||||
mov r1,#0x1000
|
ldr r1,.L_bss_start
|
||||||
ldr r2,.LRAMStart
|
ldr r2,.L_bss_end
|
||||||
mov r0,#0
|
mov r0,#0
|
||||||
.Lzeroloop:
|
.Lzeroloop:
|
||||||
str r0,[r2]
|
cmp r1,r2
|
||||||
subs r1,r1,#1
|
str r0,[r1],#4
|
||||||
add r2,r2,#4
|
bls .Lzeroloop
|
||||||
bne .Lzeroloop
|
|
||||||
|
|
||||||
bl PASCALMAIN
|
bl PASCALMAIN
|
||||||
bl _FPC_haltproc
|
bl _FPC_haltproc
|
||||||
.LRAMStart:
|
.L_bss_start:
|
||||||
.long 0x40000000
|
.long _bss_start
|
||||||
|
.L_bss_end:
|
||||||
|
.long _bss_end
|
||||||
|
.L_etext:
|
||||||
|
.long _etext
|
||||||
|
.L_data:
|
||||||
|
.long _data
|
||||||
|
.L_edata:
|
||||||
|
.long _edata
|
||||||
.LDefaultHandlerAddr:
|
.LDefaultHandlerAddr:
|
||||||
.long .LDefaultHandler
|
.long .LDefaultHandler
|
||||||
// default irq handler just returns
|
// default irq handler just returns
|
||||||
|
Loading…
Reference in New Issue
Block a user