关于ADS编程器调试时,出现cause:underfinedstanding instructionn 的问题

2440ADS工程配置和AXD调试需要注意的问题
在用jlink-v8仿真ADS编译的程序报错:
Processor ARM79_0 raised an exception.Cause: Prefetch abort
开始是默认设置R0
base为0X0(这是对应内部RAM的地址,只有4K),编译后的.axf文件小的话还可以运行,但是如果编译后的.axf文件太大的话,就应该设置R0
base为0x(对应外部SDRAM的起始地址),调试的时候就直接下载到外部内存中运行。。。
后来又出现这样的错误:
ARM79_0 raised an exception.Cause: Undefined
instruction。
解决办法:
初始化SDRAM,初始化SARAM的代码如下
0x4AxFFFFFFFF 32
0x4A0007FF 32
0xx000055AA 32
0x4Cx00FFFFFF 32
0xx0007FFFC 32
0xx008E0459 32
把上面的代码粘贴带记事本中,并把名字重命名为一个2400.ini的配置文件放在调试文件.axf同目录下。启动CodeWarrior并编译链接后按调试后,按Alt +
L快捷键弹出AXD命令窗口,输入ob(obey)2440.ini执行,这个你可以不这样只有你调试文件前执行了初始化文件2440.ini。执行后选择file下的重新装载当前文件,就可以调试了。
但是我放在了.axf同样的目录下不行,出现File Error:Failed to open C:\Program
Files\ARM\ADSv1_2\BIN\2440.ini,然后我就把这个2440.ini文件放到了报错说的找不到的那个目录C:\Program
Files\ARM\ADSv1_2\BIN\中,然后就可以了。
目前的解决办法是
1,每次DEBUG前要是给板子复位就可以调试,进入到C要是不DEBUG前不复位,就会进入反汇编里面
2,每次DEBUG前要初始化SDRAM,具体初始化方法如下:
要把映像文件加载到SDRAM中,除了要正确设置好映像文件的RO段基地址外(对于一个加载时域和运行时域相同的映像文件来说,RO段基地址实际上就是该映像文件在存储空间的起始地址),更关键的是要对SDRAM进行初始化。因为在上电时,SDRAM是没有被初始化的,所谓初始化SDRAM,就是要设置处理器的SDRAM空间以及读写SDRAM的时序参数,因而SDRAM在初始化之前是不能进行读写操作的。
启动AXD时自动初始化SDRAM:将初始化SDRAM的命令序列保存为一个name.txt文本文件(代码如下),然后在AXD的主窗口下选择菜单Options-&Configure
Interface...,在Session File一页中选择“Run Configuration
Script”,将该name.txt文本文件作为一个脚本加进来,确定。这样以后每次启动AXD时,就会自动运行该脚本来完成对SDRAM的初始化。
解决:在AXD中的Options-&configure
processor选项卡中去掉
semihosting
功能,即不要勾选semihosting。
总结一下: CodeWarrior设置,这里是最重要的步骤,打开CodeWarrior,选择Edit菜单,打开DebugRel
Settings,第一个Target Settings
&& Post-linker
选择ARM fromELF,第二个设置Language
Settings-&ARM
Assembler(ARM汇编器)选择对应的ARM板型号,fl2440对应ARM920T,相应的设置好C编译器,如果要用到C++同样要设置好。第三个设置的地方Linker-&ARM
这个比较关键,开始我一直没设置好的地方就是这里,因为手册上还是看别人的设置都没有说到,我一个人弄了好几天。好了说重点,ARM
Linker中选择Output在RO
Base下选择地址0x不同的ARM板可能不同,手册上应该会给出,这个地址就是SDRAM的开始地址。然后选择Options选项在Image entry
中输入0x,继续选择Layout选项,在Object/Symbol中输入你的初始化目标文件,2440init.o在旁边的Section中输入Init,最好Listings选项,这个应该可以不用,不过我没试验,先填一下落,在Listings-&Image
map前打上勾,List
file中填一个txt文件,如list.txt,到这里这个大选择就弄好了,继续下面的,ARM
fromELF中Output
format中选择输出文件格式,选择Plain
binary可执行的二进制文件,注意下面Output file
name要自己写一个.bin文件,如led.bin。如果这里不写文件名将找不到bin文件。现在CodeWarrior就设置好了。
以上是遇到的一些问题,汇总在这。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。ARM嵌入式(45)
ARM汇编(14)
artical from:&
在AXD下用MULTI-ICE调试storlink,出现cause:Undefined instruction,一按GO就出现Processor&FA5 raise&an&exception&.cause:Undefined&instruction&
目前的解决办法是
1,每次DEBUG前要是给板子复位就可以调试,进入到C要是不DEBUG前不复位,就会进入反汇编里面
2,每次DEBUG前要初始化SDRAM,具体初始化方法如下:
要把映像文件加载到SDRAM中,除了要正确设置好映像文件的RO段基地址外(对于一个加载时域和运行时域相同的映像文件来说,RO段基地址实际上就是该映像文件在存储空间的起始地址),更关键的是要对SDRAM进行初始化。因为在上电时,SDRAM是没有被初始化的,所谓初始化SDRAM,就是要设置处理器的SDRAM空间以及读写SDRAM的时序参数,因而SDRAM在初始化之前是不能进行读写操作的。
启动AXD时自动初始化SDRAM:将初始化SDRAM的命令序列保存为一个name.txt文本文件(代码如下),然后在AXD的主窗口下选择菜单Options-&Configure Interface...,在Session File一页中选择“Run Configuration Script”,将该name.txt文本文件作为一个脚本加进来,确定。这样以后每次启动AXD时,就会自动运行该脚本来完成对SDRAM的初始化。
在设置ADS的编译环境的时候要设置RO Base 如果这一项填0x,表示把裸机程序烧写到Nand Flash 的0地址处,这样会把原先的系统给擦除掉。
如果这一项填0x的话,对应的ouput选项中Image entry point 也要是0x,表示把裸机程序烧写到SDRAM中运行,掉电后就没有了,而此时原先的系统还在(友善之臂的手册4.1章节教的方法就是烧写到SDRAM中运行的)。
烧写到Nand Flash的0x是不会有错误提示的。而烧写到SDRAM就出现以下提示,或者即使没出现也不能在AXD调试窗口进行下载,运行(包括单步运行)。
我总共遇到的提示:
1、software interrupt (SWI) 0xffffff occured in ARM mode @ address 0x2FAE0000
2、processor ARM79_0 raised an exception
&& Cause:Undefined instruction
3、无法添加C:\Documents and Settings\第四空间\default-1-2-0-0.ses
在ADS执行make后,点击debug按钮,
提示:不能添加C:\Documents and Settings\第四空间\default-1-2-0-0.ses
原因:是有中文名。我原来的账户名是第四空间。后来改了可这个文件还是存在。
所以,我把default-1-2-0-0.ses文件放到Documents and Settings目录下了。后来,关掉当前AXD,重新点击ADS下debug按钮的时候弹出个对话框,选择好这个文件即可。(这个是针对我而言的,如果您的计算机帐户不是中文应该不会出现这个问题)
在AXD点击运行后,
提示: software interrupt (SWI) 0xffffff occured in ARM mode @ address 0x2FAE0000&&(这个解决的办法主要参考网上的方案)
原因:是没有初始化SDRAM
ADS 项目属性设置:
-ro-base = 0x
Init Section: 2440init.o Init
AXD下需要加载一个SDRAM初始化文件。(在1提示解决的前提下)
AXD下--&Option-&Config Interface-&session file-&run configuration script.
编辑一个初始化文件保存为.txt文件(名字不取中文即可,我也没试过取中文得不得),
写好后存放到Jlink-V8的安装目录JLinkARM_V408k下(路径中最好也不要有中文),文本内容如下:
Setmem 0xx
Setmem 0x4AxFFFFFFFF 32
Setmem 0x4A0007FF 32
Setmem 0xx
Setmem 0xx000055AA 32
Setmem 0x4Cx
Setmem 0x4Cx00FFFFFF 32
Setmem 0x4Cx
Setmem 0x4Cx
Setmem 0xx
Setmem 0xx
Setmem 0xx
Setmem 0xx
Setmem 0xx
Setmem 0xx
Setmem 0xx0007FFFC 32
Setmem 0xx
Setmem 0xx
Setmem 0xx008E0459 32
Setmem 0xx
Setmem 0xx
Setmem 0xx
编写存放好该文本后按上述方法添加即可。到此我困惑的问题也得到了解决。
在此要感谢给我帮助的朋友和帖子。希望我的这个总结能帮到你的忙。
要注意的是如果这次配置好了,有一次使用的文件的路径中有中文,那么下一次就得冲洗加载这些文件。
所以工程不要放在有中文的目录下。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:531272次
积分:5643
积分:5643
排名:第3687名
原创:51篇
转载:184篇
评论:79条
(2)(5)(1)(6)(3)(17)(3)(1)(1)(3)(1)(3)(1)(10)(1)(1)(1)(5)(2)(10)(4)(10)(7)(9)(4)(2)(2)(3)(7)(12)(36)(17)(1)(7)(9)(6)(9)(16)3066人阅读
S3C2440--裸机(20)
关于ads的license
装了ads的license以后,
可以打开AXD调试环境
但打开ads的环境时总是报错
错误信息如下:&
no such feather exists
feather:&win32_CWIDE_Limited
license path: D:\Program Files\ARM\ADSv1_2\license.dat
FLEXLm error: -5,357
ADS license 解决!
现在才知道,原来ADS有两个license.一个是CodeWarrior IDE界面的license,在\Program Files\ADSv1_2目录下,另外一个是ADS编译器的license,在\Program Files\ADSv1_2\licenses目录下.前者安装完ADS时就有了不用自己添加.后者则是通过License Installation Wizard,将破解的license添加进去就行了.
如果前者没了将安装盘根目录下的license.dat拷贝过去就行了,后者没了则通过License Installation Wizard将Crack目录下的license.dat导进去就行了
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:849853次
积分:10989
积分:10989
排名:第1113名
原创:298篇
评论:160条
文章:15篇
阅读:7822
文章:13篇
阅读:31035
阅读:6772
(17)(2)(1)(1)(1)(2)(4)(6)(22)(3)(1)(7)(10)(9)(1)(4)(1)(4)(1)(4)(14)(30)(27)(5)(40)(15)(11)(11)(6)(16)(7)(5)(10)(4)(1)(4)

我要回帖

更多关于 work instruction 的文章

 

随机推荐