GE IS210DTCIH1A(IS200DTCIH1A)
IS210DTCIH1A(IS200DTCIH1A)
IS210DTCIH1A(IS200DTCIH1A)
针对本文所论及的系统,当系统加电或复位后,首先NandFlash中的前4KB由硬件拷贝到位于040000000处的大小为4KB的内部SRAM中,然后此SRAM被映射到BankO处(Ox00000000)。PC从000000000处取指令执行。当遇到B或BL等跳转指令时,它会跳到当前地址加上一个偏移量的位置,它们属于相对跳转,它们的跳转范围是&plu***n;32MB,这使得B或BL指令不依赖于代码的存储位置,此时这些地址为加载时域的地址。在嵌入式系统中,还有一种实现长跳转的方式,就是使用ldr指令,它町以实现程序的***跳转,跳转范围为4G空间。
VIVI中实现程序跳转的代码为:
@jumptorain
<l>ldrr1.=on_the_ram
<2>addpc,r1,#O
<3>1:blb@infiniteloop
<4>on_the_ram:
上文提到了加载时域与运行时域的概念,此时第<1>行获取的on_the_ram的地址就是运行时域的地址,此地址由上述链接脚本文件决定,第<2>行跳转到SDRAM中的on_the_ram处。
为了进一步深入说明程序的跳转,可以利用VIVI的反汇编文件来查看上述代码的反汇编情况。现分别给出此段代码***时域和运行时域的存储布局。
***时域此段代码在内部SRAM中的存储布局为:
<1>000000dc:e59f1278ldrrl,[pc,#278];035c
<2>000000eO:e281f000addpc,rl,#0
<3>000000e4:eafffffebOxe4
<4>000000e8<on_the_ram>:
...
<5>00000358:000055aaandeqr5,rO,r10,lsr#ll
<6>0000035c:33f000e8mvnccsrO.#240
运行时域此段代码被拷贝到SDRAM中的存储布局:
[1]33fOOOdc:e59f1278ldrr1,[pc,#278]
[2]133f000eO:e281f000addpc,rl,#0
[3]133mooe4:eaffffffebOxe4
[4]33fOOOe8<on_the_ram>:
...
[5]33f00358:000055aaandeqr5,rO,r10,lsr#11
[6]33f0035c:33fOOOe8mvnccsrO,#240
系统加电或复位从基地址000000000运行到上述代码的第<1>行时,r1获得地址00000035c处的值,从第<6>行知道此地址处的值为33f000e8,运行到第<2>行处,进行跳转,由于此时程序映像已经拷贝到SDRAM中,程序就跳到了运行时域此段代码的第[4]行处断续执行下面的程序,从而实现了程序从SRAM到SDRAM的跳转。
4结语
BootLoader的设计是嵌入式系统中的重要环节,它为系统的正常启动完成了一系列的初始化工作,设计一个简单***功能强大的BootLoader是嵌入式系统设计中一项重要工作。
本文的创新点:<l>深入研究和分析了VIVI如何实现自己拷贝以及拷贝后如何实现程序的跳转,并给出了原理性和实验性的说明;<2>对程序进行了改进,主要体现在拷贝的代码量上及VIVI的链接脚本上,使程序设计更合理。
oyopuc PC3JG-P
BLACK BOX LMC211AE-MM
51403422-150
51309276-150
51304362-150
51304754-150
80363972-150
80363975-100
80363969-150
51402573-150
51403645-100
51304511-100
51401583-100
51403519-160
Keba Ketop C50 D01 Vx
UN 0942a-P V3 HEIR 444632 R3
HEIR444632R0003 UN0942a-P
UT 4642a ***302398R121
***302398R0121 UT4642a 太平洋安防网
UT 4810a-E
***302 391 R121
SCHENCK FLB400
GE SR469-P5-HI-A20
AB 1771-IAN/A
PROSOFT MVI56-GSC
SR469-P5-HI-A20
ABB MPRC 086349-001
PRO-FACE 3580801
XPIQ F8-G2B3B6
Celerity IFC-125C 0190-28862
MKS 622A01TBE
AMAT 0010-45649
MKS D27D01TCEC0B5
MVI69-MNET
57***91
16413-1-3
16267-1-2
TC-CCR013
CP-9200SH/SVA
CP-9200SH/CPU
Microset US 809 I/O Board 000191952
RAA-002H-BB06C-BD3
FOXBORO P0926JM
KJ2003X1BB1 VE3006
Allen-Bradley 4100-S214-PRAL
Allen Bradley 900337-01 A01
Keyence UD-300
Philips PM2525 PM2525/223
Metermaster MM200
Hewlett Packard 4935A
Ortec 456H High
HP 651B
Force Sparc CPU-2CE CPU
AWA F242A
Servex FE6S20-D3
1775-S5
Astro VG-823
Adtech Spirent SX/12
690A13TRA
KOLLMORGEN P70360-SDN
ABB 3HAB8101-8 DSQC346G
AE Sekidenko OR4000T
Dynax AT200-LP
Kuka KPS-600/20-REL
1756-L55M22
Keba Ketop C50 D01 Vx
1784-KTCX15B
ProSoft MVI56-PDPMV1
MDX61B0005-5A3-4-0T
TRENTON SBC 92-006090-XXX
P-HA-RPS-32000000
PHARPS32200000
1734-EPAC
JZRCR-NPP01-1
JANCD-NCP01
6DD1683-0BE0
6DD1682-0BF0
6DD1683-0BB00
6DD1682-0BB1
6DD1683-0BB0
6DD1683-0CD0
6DD1682-0CD0
6DD1682-0BE0
6DD1683-0BE0
6DD1682-0BB0
6DD1683-0BB0
6DD2920-0AB0
6DD2920-0AD0
6DD2920-0AC0
6DD2920-0AB0
6DD2920-0XD01
siemens 6EW1890-2AC
AB 1747-SDN/B
KEBA CU313A
GENERIC 26D023003
MODICON 140NOM21100
Schneider 140CRA93100
Trenton 92-006090-XXX
5202-MNET-MCM4
honeywell TC-OAH061
6DR2100-5
6DR2800-8R
FOXBORO P0922YU
Tachibana TVME3001
6DD1681-0EK1
6DD1607-0AA1
E5AK-AA2
RMS-TSG-TZ-C
RMS-TSIG-TZ-C
3HNE 00313-1
DSQC346G 3HAB8101-8
3HAC023195-001
PEACOCK COM5 V2
3BSE000270R1
PM510
PM253V01
3BSE008373R1
PM510V08
3BSE008358R1
PM510V16
6DD1683-0CC0
TC-CCN014
Edwa*** D37420000
QCI-34N-1-E-01
469-P5-HI-A20
Allen Bradley 56AMXN
模拟量板卡 395316-01-4 Bristol Babcock
模拟量板卡 392547-01-5
FBM04
6DD1641-0AC0
PEACOCK COM5V2
DKC01.3-100-7-FW
P0914XQ FBM214
P0916BX FBM214
56AMXN/B
3BSE003641R1
PM150V08
Honeywell LCNP4M
51403776-100
siemens 6EW1890-2AC
MVI69-ADM
LAUER PCS 095 .P
2711-K6C5
1560-PDP1
DAI05
P70360-SDN
RMS-TSIG-TZ-CP
Kollmorgen IC22030A1P1
TRICONEX 3511
TRICONEX 3625
TRICONEX 3805E
TRICONEX 3503E
TRICONEX 3700A
TRICONEX 8312
TRICONEX TCM4351B
TRICONEX MP3008
DSSS171
DSDI 120
