企业资质

厦门渤格电气技术有限公司

普通会员8
|
企业等级:普通会员
经营模式:
所在地区:福建 厦门
联系卖家:
手机号码:
公司官网:shop432522607.taobao.com
企业地址:
企业概况

厦门渤格电气技术有限公司是一家专业提供工业自动化领域的备件服务商,产品品种齐全、价格合理,公司实力雄厚,重信用、守合同、保证产品质量,以多品种经营特色和薄利多销的原则,赢得了广大客户的信任。 我们主营PLC可编程控制器模块,DCS卡件,ESD系统卡件,振动监测系统卡件,汽轮机控制系......

381-643196-5、381-643196-5

产品编号:623641032                    更新时间:2019-05-20
价格: 来电议定
厦门渤格电气技术有限公司

厦门渤格电气技术有限公司

  • 主营业务:AB,ABB,GE,本特利,福克斯波罗,霍尼韦尔,英维斯,西...
  • 公司官网:shop432522607.taobao.com
  • 公司地址:

联系人名片:

联系时务必告知是在"产品网"看到的

产品详情

APPLIED 381-643196-5

  在嵌入式系统中,映像文件都是存储在Flash存储器等一些非易失性器件中的,而在运行时,映像文件中的RW段必须重新装载到可渎写的RAM中。这就涉及到映像文件的加载时域和运行时域:加载时域就是指映像文件烧入nash中的状态,也就是映像文件运行之前的地址;运行时域是指映像文件执行时的状态,针对本文提到的NandFlash启动方式可以这么理解加载时域与运行时域:加载时域的起始地址从(映射后的内部SRAM处)000000000开始,运行时域的地址从033f00000开始。由于加载时域与运行时域的地址不同,从加载时域到运行时域的转换要由系统引导程序完成,所以VIVI必须进行数据和代码的拷贝及程序跳转工作,以完成从加载时域到运行时域的转换。
    VIVI的拷贝首先要确定拷贝的起始地址和目标地址,还要确定要拷贝多少代码。在此笔者对所搬运代码量进行了改进,下面是改进前的代码:
    <l>ldrr0,=VIVI_RAM_base
    <2>movrl,#Ox0
    <3>movr2,#020000
    <4>blnand_read_ll
    其中:第<1>行:获取VIVI在RAM中的基地址VIVI_RAM_base,也是运行时域的首地址。第<2>行:获取VIVI映像在Flash中的起始地址OxO。第<3>行:获取拷贝的代码量020000。第<4>行:跳转到nand_read_ll函数,它是用C语言写的拷贝函数(略)。此时寄存器rO,rl,r2是传递给函数nand_read_ll的三个参数。
    程序这样设计的缺点是不论VIVI映像有多大,它都会拷贝128KB的代码量,这样造成时间及空间的浪费或者拷贝不完整,为此笔者对上述代码进行改进:
    [1]ldrr0,=VIVI_RAM_base
    [2]ldrr2,=vivi_end
    [3]subr2,r2,r0
    [4]movr2,r2,lsr#9
    [5]movr2,r2,lsr#9
    [6]addr2,r2,#0200
    [7]movr1,#OxO
    [8]blnand_read_ll
    代码中用到了外部变量vivi_end,它是在链接脚本文件中定义的,是VIVI映像运行时域的末地址,在此代码中使用前要用如下语句进行声明:
    .externvivi_end
    其中:第[l]、[7]、[8]行的解释分别与未改进前的第<l>、<2>、<4>行。第[2]行:获取VIVI映像运行时域的末地址。第[3]行:获取拷贝的真实代码量。第[4],[5],[6]行:上文论述到NandFlash是按页进行读写的,本文用到的NandFlash每页有(512+16)Byte,实际用于存储映像文件的是每页的前512Byte。所以需要对上述“真实代码量”进行调整,把它调整为整数页大小,它的大小必须是页对齐的。首先把它的低9位调整为0,即是把代码量不足512Byte的部分清零,然后再加1页(page)大小(Ox200)以保证VlVI数据的完整性,这就是第[4],[5],[6]行的作用。对此代码进行改进后,拷贝的代码量更接近实际的代码量,拷贝的冗余代码量不会达到1页(page)的大小。对于其它类型的NandFlash可以根据页的大小进行类似的改进。
    3.3程序的跳转
    针对本文所论及的系统,当系统加电或复位后,首先NandFlash中的前4KB由硬件拷贝到位于040000000处的大小为4KB的内部SRAM中,然后此SRAM被映射到BankO处(Ox00000000)。PC从000000000处取指令执行。当遇到B或BL等跳转指令时,它会跳到当前地址加上一个偏移量的位置,它们属于相对跳转,它们的跳转范围是±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的链接脚本上,使程序设计更合理。
 
ABB PM645A
ABB 200-APB12
ABB 200-IT8
ABB CI810A
ABB CI810V2
ABB DFM02
ABB RAIO-01
ABB TU830
ABB DSDO131
ABB DSDO115
ABB DSAX452
ABB CI627
200-BPN 492897301
200-C1485G 492897601
200-CICN 492897801
200-CIE 492897701
200-PSMG 492898801
3BSC950019R1 TK520V030
3BSC950055R1 TK576V050
3BSC950056R1 TK576V115
3BSC950073R27
3BSC950098R1
3BSE016239R1 PM510V08
3BSE016240R1 PM510V16
AI620 3BHT300005R1
AI625 3BHT300036R1
AX670 3BSE000566R1
CI520V1 3BSE012869R1
CI522 3BSE012790R1
CI522A 3BSE018283R1
CI526 3BSE006085R1
CI532V02 3BSE003827R1
CI532V04 3BSE003829R1
CI540 3BSE001077R1
CI560 3BUC98002R0001
CI570 3BSE001440R1
CI610 3BHT300003R1
CI615K01 3BSE000756R1
CI630 3BSE011000R1
CI630K02 3BSE011002R1
CI670 3BHT300017R1
CI810B 3BSE020520R1
CI820-2 3BSE013202A1
CS512 3BUR980009R1
CS513 3BSE000435R1
CS513K02 3BSE004773R1
CS513K04 3BSE055760R1
DI621 3BHT300012R1
DO610 3BHT00006R1
DO630 3BHT300007R1
DSAI133 57120001-PS
DSAI110 57120001-DP
DSAI130 57120001-P
DSAI145 5712001-HA
DSAI146 3BSE007949R1
DSAI155 57120001-HZ
DSAI155A 3BSE014162R1
DSAO110 57120001-AT
DSAO130 57120001-FG
DSAO120 57120001-EY
DSAO120A 3BSE018293R1
DSBC172 57310001-KD/5
DSBC173 57310001-KH
DSBC173A 3BSE005883R1
DSCS140 57520001-EV
DSDI110A 57160001-AAA
DSDO120 57160001-AK
DSDO110 57160001-K
DSDP150 57160001-GF
DSDX180 3BSE003859R1
DSDX180A 3BSE018297R1
DSDX452 5716075-P
DSPC452 57310303-A
DSPU131 3BSE000355R1
DSRF199 3BSE019299R1
DSRF185 3BSE004382R1
DSRF186 3BSE004383R1
DSRF187 3BSE004985R1
DSRF187A 3BSE014452R1
DSSR170 48990001-PC
DSSS171 3BSE005003R1
DSTA001 57120001-PX
DSTA001B 3BSE018316R1
DSTA002B 3BSE018317R1
DSTA131 57120001-CV
DSTAN013 3BNP000177R1
DSTA002P 3BSE018331R1
DSTC406 57520001-DX/1
DSTC452 5751017-A/2
DSTD108 57160001-ABD
DSTD190 3BSE004723R1
DSTD197 3BSE004726R1
DSTX180 3BUR980025R1
GJR5250000R0353 07KR91B
GJR5251000R0303 07KP90
GJR5251063P1
GJR5251400R3202 07DC91
GJR5251500R1101 07MK92
GJR5252100R0101 07KT94
CI860 3BSE032444R1 CI860K01
AI835 3BSE008520R1 AI835A
1SBP260052R1001 ICMK14N1
1SNA645524R2300 OBROC
200-IA8 S200-IA8
200-IE8 490176097 S200-IE8
200-TB3T 490176065
200C-IB10xOB6P 492960133
200C-IB16 492933501
200C-IE8 492933801
200C-OB16P 492933701
3BDH000032R1 FI830F
3BSC950192R1 TK850V007
GJR5252300R0101 07AC91
GJR5252400R0101 07DI92
GJR5252800R0100 07KT95 
GJR5252800R0200 07KT95
GJR5253000R0160 07KT97C
GJR5253000R0200 07KT97
GJR5253000R0262 07KT97B
GJR5253000R0268 07KT97B
GJR5253000R0275 07KT97B
GJR5253000R0278 07KT97B
GJR5253100R0160 07KT98E2
IH530EN 3BSE001248R1
IH532EN 3BSE018795R1
IH540DE 3BSE003210R1
IH540EN 3BSE001252R1
IH570 3BSE001253R1
IH580 3BSC640001R1
ISAP212000R0001 TU516 TU516A
PM150V08 3BSE003641R1
PM253V01 492943601
PM510 3BSE000270R1
PM510V08 3BSE008373R1
PM510V16 3BSE008358R1
PM511V08 3BSE011180R1
PM511V16 3BSE011181R1
PM632 3BSE005831R1
3BSE022255R1
3BSE022256R1
3BSE022257R1
3BSE049768R1
AI210 492953101
AI801 3BSE020512R1
AI810 3BSE008516R1
AI820 3BSE008544R1
AI830 3BSE008518R1
AI830A 3BSE040662R1
AI845 3BSE023675R1
AI890 3BSC690071R1
AI895 3BSC690087R1
AM811F 3BDH000050R1
AO801 3BSE020514R1
AO810 3BSE008522R1
AO810V2 3BSE038415R1
AO820 3BSE008546R1
AO845 3BSE023676R1
AO845A 3BSE045584R1
AO890 3BSC690072R1
AO895 3BSC690087R1
CI801 3BSE022366R1
CI810V1 3BSE008584R1
CI820 3BSE013200R1
CI820-1 3BSE013201A1
CI820V1 3BSE025255R1
CI830 3BSE013252R1
CI840 3BSE022457R1
CI840A 3BSE041882R1
CI854 3BSE025347R1
CI854A 3BSE030221R1
CI854AK01 3BSE030220R1
DI210 492953401
DI801 3BSE020508R1

厦门渤格电气技术有限公司电话:传真:联系人:

地址:主营产品:AB,ABB,GE,本特利,福克斯波罗,霍尼韦尔,英维斯,西...

Copyright © 2025 版权所有: 产品网店铺主体:厦门渤格电气技术有限公司

免责声明:以上所展示的信息由企业自行提供,内容的真实性、准确性和合法性由发布企业负责。产品网对此不承担任何保证责任。