调试2440 RAM拷贝至SDRAM遇到的问题
调试2440 RAM拷贝至SDRAM遇到的问题
汇编代码主要是初始化一些寄存器,关狗,初始化时钟,初始化存储管理器以便访问内存,然后将SoC上4k RAM数据拷贝至SDRAM,然后在SRAM里面运行,由于代码未正常跑起来,于是使用JLinkExe来调试。JLinkExe指定了一个命令文件: JLinkExe -commandfile ./cmd.jlink ,cmd.jlink文件内容如下:
r
loadbin /home/thomas/learn/armasm/addresses/main.bin 0x0
setbp 0x0 a s
setpc 0x0
运行至内存拷贝代码时发现了问题:
copy_steppingstone2sdram:
ldr r0,=0x30000000 @sdram start addr
ldr r1,=(0x30000000+*) @steppingstone length + sdram start addr
mov r2,#0x0 @steppingstone start addr
copy_cycle:
ldr r3,[r2],#
str r3,[r0],#
cmp r0,r1
bne copy_cycle
mov pc,lr
代码反复分析,没发现问题,但是诡异的是:单步至第六行汇编指令时,按道理r3里面值应该是我的main.bin文件的前4个字节,输入:regs 查看各寄存器值,发现r3居然是0xDEEEDEEE,继续下一个字节的拷贝,这下r3的值又正常了。于是怀疑难道是flash这个点坏了?但是 flash不是有坏块标识机制吗?然后进一步确认下,使用命令:mem32 0x0 1,发现输出值又是对的,并不是0xDEEEDEEE。突然觉得0xDEEEDEEE这个值比较有特点,于是直接百度这个值,这下搜到了ARM官方文档,Using EmbeddedICE,这下才明白怎么回事了。主要是由于的cmd.jlink文件里面设置了一个软件断点。一般断点分为2种,1.软件断点 2.硬件断点。
1.硬件断点
硬件断点通过使用一个被称为EmbeddedICE的宏单元来监视写往地址线上的数据,如果地址匹配上则停止执行。这个宏单元是可以配置的,配置为breakpoint或者watchpoint,它会占据这个硬件单元,一般一个芯片上的EmbeddedICE宏单元数量不会太多,比如ARMv5的ARM9只有2个。也就是说至多设置2个硬件断点,如果要设置第三个,那么必须覆盖其中一个。
2.软件断点
软件断点也是通过使用EmbeddedICE宏单元来监测取指时指令是否符合一个特殊的bit-pattern,位模式,就是说取出的指令是否是个特定值,或者指令某几个位是否匹配上。这个bit-pattern会预先存储到下软件断点的位置,也就是说把在内存中哪个位置的值替换为这个bit-pattern,而原来这个位置的指令会被暂存到调试器的存储单元中。因此自修改代码,或者位于ROM中的代码是不能使用这种断点的。ROM中的很好理解,下软件断点必须往里面写bit-pattern,而ROM只读,显然不行了,自修改代码可能出现代码拷贝的动作,从源地址拷贝至目标地址,如果这个时候你在源地址某处下个软件断点,那么你拷贝到目的地址的这条指令变成了bit-paterrn了。
我遇到的问题正是由于在零地址下了个软件断点导致。软件断点个数是没限制的,所有的软件断点占据一个EmbeddedICE宏单元,也就是说对于只有2个宏单元的ARM9,你下过软件断点后就只能下一个硬件断点了。
调试2440 RAM拷贝至SDRAM遇到的问题的更多相关文章
- RAM,SRAM,DRAM,SDRAM,DDR RAM,ROM,PROM,EPROM,EEPROM,NAND FLASH,NOR FLASH的区别
RAM:由字面意思就可以理解,SDRAM SRAM DRAM(下面蓝色字体的这几种)都可以统称RAM,random access memory(随机存取存储器)的缩写,下面是51hei.com为大家整 ...
- Jlink 软件断点和硬件断点
调试2440 RAM拷贝至SDRAM遇到的问题 汇编代码主要是初始化一些寄存器,关狗,初始化时钟,初始化存储管理器以便访问内存,然后将SoC上4k RAM数据拷贝至SDRAM,然后在SRAM里面运行, ...
- RAM, SDRAM ,ROM, NAND FLASH, NOR FLASH
在看上面2440的内存映射的时候,对其中的有些名字,不是完全太懂,所以到网上找了相关的信息. 对于mini2440来说,SDRAM,即内存,程序运行时的地方.选择连接SDRAM的为bank6. 1)S ...
- 新手学习ARM,对片内ram、SDRAM、NOR FLASH和NAND FLASH启动这几个概念的理解
片内的ram用来存储启动代码,在2440初始化sdram之前,代码就在片内ram中运行.片内ram装载的是norflash中的内容,即u-boot. uboot放在norflash里,nandflas ...
- 原来程序是这样从NandFlash拷贝并跳转到SDRAM的
重新看了一下FL2440的BootLoader,终于把程序是怎样从Nandflash拷贝并跳转到SDRAM的过程弄清楚了,在这边做一下笔记.先上张图: 1. 当S3C2440被配置成从Nand Fla ...
- 将ADS1.2的工程迁移到KEIL上-基于2440
裸机程序应该是一个很好的选择 1. 不拷贝启动代码,因为我们用自己的启动代码 2. 建立工程目录分级,建立完成后如下所示 拷贝相应代码到对应目录中 Option中拷贝 Core中拷贝 建立 ...
- 【转】S3C2440与SDRAM NorFlash NandFlash连线分析
一.SDRAM(HY57V561620F)连线分析 1. S3C2440 有27根地址线ADDR[26:0],8根片选信号ngcs0-ngcs7,对应bank0-bank7,当访问bankx 的地址 ...
- 裸板驱动总结(makefile+lds链接脚本+裸板调试)
在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...
- arm裸板驱动总结(makefile+lds链接脚本+裸板调试)
在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...
随机推荐
- java基础盲点梳理
类的基本成员才有默认值 finalize()并非析构,Java中没有析构,使用finalize()通常在于跨语言调用情景:比如使用C进行malloc内存分配以后,要在finalize()方法中进行fr ...
- activiti工作流的web流程设计器整合视频教程
本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...
- IOS安全测试
1.本地存储安全 配置文件 缓存 数据库 测试数据 证书数据 2.网络通信安全 http明文通信 https证书认证 敏感参数弱加密 加签/验签策略 外接第三方SDK 外发不明数据 3.源代码安全 日 ...
- Autodesk 产品开发培训开始报名-8月26~28-武汉– Revit, Vault, Autodesk Viewer, Navisworks
为了帮助Autodesk中国地区的二次开发人员有机会系统地了解与学习Autodesk 在BIM解决方案中的旗舰产品 Revit以及Navisworks等产品的最新开发技术,并有机会与Autodesk ...
- 用(*.frm *.MYD *.MYI)文件恢复MySql数据库
保存下来以防以后遇到 今天还原mysql数据库时,看到那个data文件夹下好几个文件,还没有.sql文件,没有见过,总结下.Data文件夹里面包括:数据库名文件夹,文件夹里包括,*.frm,*.MYI ...
- windows 8安装wp8之后鼠标没反应了
笔记本是windows 8 系统,昨天安装了windows phone 8.0 SDK 之后,发现无线鼠标没反应了,但是触摸屏鼠标可以正常移动!真是奇怪,旁边同学也是安装了这个sdk,但没出什么问题! ...
- 一次对MKMapView的性能优化
一次对MKMapView的性能优化 前言 最近做的项目主要是LBS这块 主打成员定位功能 我们的UI设计是这样的 乍一看上去是挺好挺美观的 不同的人会显示不同的头像 可是当人扎堆的时候 问题就来了 当 ...
- 安装docker后,VMware网络无法访问了,VMware重置网络设置
1.vmware虚拟机处于关闭状态 2.vmware程序->edit(编辑)-->左下角 "Restore Default"恢复默认设置 [恢复]完成后 ...
- JavaScript Patterns 7.1 Singleton
7.1 Singleton The idea of the singleton pattern is to have only one instance of a specific class. Th ...
- go sync.Mutex 设计思想与演化过程 (一)
go语言在云计算时代将会如日中天,还抱着.NET不放的人将会被淘汰.学习go语言和.NET完全不一样,它有非常简单的runtime 和 类库.最好的办法就是将整个源代码读一遍,这是我见过最简洁的系统类 ...