ARM 映象

上拉电阻下拉电阻的总结zz

http://blog.sina.com.cn/s/blog_4ab4a532010006qp.html

 

RO代表代码区;RW代表可读写区(预先被初始化的数据和预先被清零的数据);ZI预先被清零的数据区(未初始化)。预先被初始化的数据定位在代码区之后;预先被清零的数据区定位在预先被初始化的数据区之后。
该部分程序功能:先判断当前是在RAM中运行还是在FLASH中运行,如果在FLASH中运行先把FLASH中的预先赋值的RW段数据和未负值的ZI段数据都搬到RAM区中,再把ZI段数据清零;如果程序就是在RAM中运行,则直接把ZI段数据清零。


 .extern       Image_RO_Limit               /* ROM区中数据段的起始地址*/
 .extern       Image_RW_Base               /* RW段起始地址 */          
 .extern       Image_ZI_Base                /* ZI段的起始地址*/             
 .extern       Image_ZI_Limit               /* ZI段的结束地址加1 */                 

  ldr         r0, =Image_RO_Limit      /* 取ROM区中数据段的首地址 */
  ldr         r1, =Image_RW_Base  /* 取RAM区中RW段的目标首地址*/
  ldr         r3, =Image_ZI_Base           /*取RAM区中ZI段的首地址 */
  cmp         r0, r1                 /* 比较ROM区中数据段首地址和RAM区中RW段目标首地址*/
  beq         NoRW                                   /*相等代表当前是在RAM中运行*/

LoopRw:        cmp         r1, r3                  /*不相等则和RAM区中ZI段的目标地址比较*/

 ldrcc       r2, [r0], #4  /*如果r1<r3,则把r0地址上的数据读出到r2中,然后r0=r0+4*/
 strcc       r2, [r1], #4  /*如果r1<r3,则把r2内数据写入道r1地址中,然后r1=r1+4*/
 bcc         LoopRw   /*如果r1<r3,则跳转到LoopRw 继续执行*/

NoRW:         ldr           r1, =Image_ZI_Limit          /* 取ZI段的结束地址 */
 mov         r2, #0                                /*将r2赋0*/
LoopZI:         cmp         r3, r1                  /* 将ZI段清零*/
 strcc        r2, [r3], #4   /*如果r3<r1,将r2内容写入到r3地址单元中,然后r3=r3+1*/
 bcc         LoopZI         /*如果r3<r1(即C=0),则跳转到LoopZI */

  .extern  Main                                        /*声明外部变量*/
 B        Main                                      /*t跳转到用户的主程序入口*/

还有一点需要注意:|Image$$RO$$Limit|:表示RO区末地址后面的地址,即RW数据源的起始地址 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值