登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

这里立一个擂台,为你解答ADS的问题.

作者:jekete 栏目:ARM技术
这里立一个擂台,为你解答ADS的问题.
本人为大家解答ADS的问题,有问题可以提.
??????????????????????????????????

2楼: >>参与讨论
bairg521
太好了,好人啊,帮我解答一个问题吧,感激不尽
我在option.s定义了:_ISR_STARTADDRESS   EQU   0xc7fff00
在44b0x.h中定义了:
    #define pISR_EINT0    (*(unsigned *)(_ISR_STARTADDRESS+0x84))
程序中用到:pISR_EINT0=(unsigned)Eint0lsr;
Eint0lsr()是我的中断服务程序,变异时报错
Error:C2456E:undeclared NAME,iventing 'extern int _ISR_STARTADDRESS'

而且只要用了pISR_EINT0一类的变量都会出现这个错误
能帮我解释一下这是什么错误吗?感激不尽啊!!

3楼: >>参与讨论
weilan920
求助,ADS编程问题
刚开始学习ADS,不知道为什么我敲进去的程序编译的时候总是出现:“UNKNOWN opcode”错误提示,请问是什么原因?

4楼: >>参与讨论
jekete
关于“UNKNOWN opcode”错误
请你付上你的代码,有可能是代码或环境错误。

5楼: >>参与讨论
centimetre
ee
1,c头文件里面不能识别汇编里面的宏定义,需要在c头文件里面再定义一边
2,汇编指令有错,或者格式错误,例如汇编指令前面没有空格

6楼: >>参与讨论
ketp
在进入main之前编译器自动生成什么?
好象是自动生成了RW数据搬运代码,但我看到的好多启动代码都自己搬运RW数据?

7楼: >>参与讨论
centimetre
自己搬或者系统自动搬都可以
 
8楼: >>参与讨论
jackwu1780
先谢谢楼主,再问个问题
在ADS里面,函数中的变量,包括全局的变量和局部的变量,是怎么样分配实际空间的呢?

9楼: >>参与讨论
jekete
关于变量
函数的变量(全局和局部)一般占用数据栈。因此注意,注意数据栈指针的设置。

10楼: >>参与讨论
寻找资料
在ADS1.2下,如何让它能编译ARM c++语言
请教各位个问题,在ADS1.2下,如何让它能编译ARM c++语言.我在设置语言栏处设置了ARM C++ compiler,也选了ISO STANDARD c++,但是查看预处理宏定义,没看见有__cplusplus的预定义.所以,有个模板,它死活不认识.又ARM手册上,说可以支持模板的.所以,请教如何配置,让ADS1.2编译C++

11楼: >>参与讨论
ketp
Region$$Table ?
Erro : L620E: Section Region$$Table cannot be assigned to a non-root region.
Erro : L620E: Section Region$$Table cannot be assigned to a non-root region.
====================================================================
请问以上警告是怎么回事,2个table是什么table。
我将anon$$obj.o (+RO)放在root region后不再警告,但不知道具体原因。

12楼: >>参与讨论
jekete
答复“在ADS1.2下,如何让它能编译ARM c++”
估计是设置不对,应该在工程项目中加入你的C++文件。并使 这个工程项目为当前工程项目。

13楼: >>参与讨论
jekete
答复“ketp”
关于“Region$$Table ”
   可能是在scatter描述文件中,没有为某些文件指派地址。

14楼: >>参与讨论
ketp
这是scatter。anon$$obj是编译器自动生成的
ROM_LOAD 0x80000000
{
    ROM_EXEC 0x80000000
    {
        Startup.o (vectors, +First)
        anon$$obj.o (+RO);//没有这句就有以上erro。
    }
    
    ROM_EXEC1 0x80019000
    {
        main.o (+RO)
        * (+RO)
    }
    
    ERAM +0
    {
        * (+RW,+ZI)
    }

    HEAP +0 UNINIT
    {
        Startup.o (Heap)
    }

    HEAP_BOTTOM 0x80080000 UNINIT
    {
        Startup.o (HeapTop)
    }
    
    IRAM 0x40000000;//内部ram放堆栈
    {
        Startup.o (MyStacks)
    }

    STACKS_BOTTOM +0 UNINIT
    {
        Startup.o (StackBottom)
    }

    STACKS 0x40004000 UNINIT
    {
        Startup.o (Stacks)
    }
}



* - 本贴最后修改时间:2006-11-2 18:40:35 修改者:ketp

15楼: >>参与讨论
liangjingxin
请问一个很久还没解决的问题。
请问这句警告是什么意思,是因为什么产生的,如何解决?Warning:L6329W:D:\****\scat_b.scf(LINE 42, col 13) Pattern *(RW) ONLY matches removed unused sections.

16楼: >>参与讨论
jekete
答复“请问一个很久还没解决的问题”
Warning:L6329W:D:\****\scat_b.scf(LINE 42, col 13) Pattern *(RW) ONLY matches removed unused sections.
    
     只匹配了已经删除的没有用的段!这些段的属性是RW。
     在ADS中EDIT/DEBUG SETTINGS/ARM LINKER/OPTIONS的设置面板中
有一些Remove unused sevtion设置不正确,如果程序不大,不删除这些没用
的段。
     


17楼: >>参与讨论
jekete
答复“KETP”
ROM_EXEC 0x80000000
    {
        Startup.o (vectors, +First)
        anon$$obj.o (+RO);//没有这句就有以上erro
系统认为,除了 Startup.o以外,还应该把另外的R0指派到0X80000000以下,但你没有指定这些文件,所以出错。
不要希望系统自动生成理想的代码,在略复杂的(多于3个段)时,应该使用Scatter文件完成地址分配。 

18楼: >>参与讨论
ketp
谢谢。我的问题在以下网址有解答。
http://hi.baidu.com/fanzier/blog/item/1cdab338be0463c2d462252c.html

anon$$obj.o是包含Region$$Table和Region$$Table的c库代码。




19楼: >>参与讨论
hqgboy
在ADS中用C编程..ARM和THUMB混合编程时,中断部分如何编程?
 
20楼: >>参与讨论
jekete
中断
1,在THUMB状态下发生中断 ,进入中断后自动切换到ARM状态,从中断返回时 执行一条返回指令,自动返回到THUMB状态。
2,中断后自动进入ARM状态。
3,一般在中断中使用THUMB时,必须使用指令进行切换。

21楼: >>参与讨论
liangjingxin
感谢jekete,问题解决了。
 
22楼: >>参与讨论
liangjingxin
再问jekete一个问题。
为什么程序大就得删除没有用的段呢?不是每个段都用上了吗?这样做有什么意义有什么用呢?

23楼: >>参与讨论
lml2525
arm調試
我是用ads1.2 配合h-jtag 加wigger 來做的調試,現在出現個問題就是在SDRAM調試程序的時候有時候在那裡卡住,像等待中斷一下,就一直停在一條指令。有說是SDRAM要初始化,那我要怎麼做,望各位指教。謝謝!

24楼: >>参与讨论
hqgboy
谢谢...是不是C就没法混合编程了..只能用汇编.
因为我在设置混合编程后,用__IRQ.编译报错...

25楼: >>参与讨论
jekete
答复“liangjingxin”
没有用的段是没有使用的段,除了占用空间外没有其它用处,程序越大没有用的段可能越多。

26楼: >>参与讨论
jekete
答复“hqgboy”
C可以和ARM汇编、THUMB混合编程,可能设置不对。

27楼: >>参与讨论
jekete
答复“lml2525”
我没有明白你什么问题,要吧问题表达清楚。

28楼: >>参与讨论
liyuanhua
请问楼主 timer 中断
我的程序开了很多中断 timer 中断,串口中断,iic中断 等等,在程序全速执行的时候,所有的中断正常,程序工作没问题,但是如果我设置了一个断点,程序在断点处break后,再继续执行程序,timer就不会产生中断了,(在timer中断程序处设置断点,永远也运行不到断点处,程序中与timer有关的部分也不运行了),而其它的中断正常,不知道怎么回事,望答复,非常感谢!!!

29楼: >>参与讨论
daikunjuan
ADS编译问题
如何看ro,rw,heap 等各个段的大小
我编译出现的错误是:Entry  point(0x80000000)lies outside the image
这个该怎么改啊

30楼: >>参与讨论
zhm2002
程序定位问题
最近开始学习arm编程,编了一个小程序.用仿真器仿真运行可以.
硬件平台是WINBONDW90N740,软件用ads
程序主要有两个,一个初始化文件init.s,一个主程序main.c
编译后发现init.s的汇编程序地址位置在main.c后面.axd load image后pc指针是指在init.s位置的,所以程序运行也正常.
我现在想要编一个能脱机运行的程序,就是bootload,初始化和下载程序想放在init.s文件中,但是如果编译后init.s地址在main.c程序后的话,脱机应该肯定不行.所以求助:如何使init.s编译后地址位于0x0处.(目前仿真是RO=0x8000)
(用entery point没用,好像ads默认main.c所在的程序就是首地址似的)
此外还想再问一个问题.若脱机运行的话,单板上电后,W90N740的程序空间会自动将btcs上挂的FLASH作为0x0吗? 

31楼: >>参与讨论
lml2525
調試
在载入.axf文件之前要初始化寄存器。 這個初始化寄存器到底怎麼做?

32楼: >>参与讨论
wangkj
这么好的帖子不加精,斑竹可以辞职了。
 
33楼: >>参与讨论
jekete
答复“lml2525”
在加载“axf文件之前要初始化寄存器”,为什么要初始化积存器?哪里提到过要初始化积存器?

34楼: >>参与讨论
jekete
答复“zhm2002”
程序定位,使用scatter是非常必要的,请使用scatter描述文件。但W90N740我不熟悉。

35楼: >>参与讨论
jekete
答复“liyuanhua”
你可以在断点处检查“timer 中断”的状态,可能已经中断了?可能现在的断点影响了“timer 中断”?


我的程序开了很多中断 timer 中断,串口中断,iic中断 等等,在程序全速执行的时候,所有的中断正常,程序工作没问题,但是如果我设置了一个断点,程序在断点处break后,再继续执行程序

36楼: >>参与讨论
jekete
答复“daikunjuan”
在列表文件种列举了各段的的长度(包括RO、RW、PI),你文件的入口不在影象文件的范围内,注意必须是入口点在影象文件的范围内。     

ADS编译问题

如何看ro,rw,heap 等各个段的大小
我编译出现的错误是:Entry  point(0x80000000)lies outside the image
这个该怎么改啊




37楼: >>参与讨论
hqgboy
请问在哪儿设置呢?谢谢...
 
38楼: >>参与讨论
jekete
答“请问在哪儿设置呢?谢谢”
什么错误,说的详细一点。

39楼: >>参与讨论
jekete



40楼: >>参与讨论
littlefool
scatter load
您好;
   一个FLASH中是否可以将image划分成不同的几段,利用
scatter load下载到不同的地址空间中?是否可以实现?
如可以实现?如何实现?多谢.

41楼: >>参与讨论
叶强
111
请问下RO,RW,ZI的具体意思是什么啊?我才学ARM

42楼: >>参与讨论
jekete
答复“littlefool”
,一个FLASH当然可以划分成不同的几段,在scatter 中分为几个加载域就可以了。


一个FLASH中是否可以将image划分成不同的几段,利用
scatter load下载到不同的地址空间中?是否可以实现?
如可以实现?如何实现?多谢

43楼: >>参与讨论
littlefool
多谢
多谢指导

44楼: >>参与讨论
jekete
答复“littlefool”
可以吧一个FLASH划分成不同的几个区,利用
scatter 文件,把不同的文件加载到不同的加载域。


 

45楼: >>参与讨论
jekete
答复“叶强”
RO是“只读代码”,RW是“可读可写数据”,ZI是“初始化为0 的数据”     

46楼: >>参与讨论
zliang2004
请教C语言实验发现的编译不通过问题
你好,我在ADS中调试C语言程序发现UNKNOWN opcode,下面有图,请指教,谢谢

47楼: >>参与讨论
jekete
答复“zliang2004”
所有的句子都不能通过编译,所有的句子都对,请把test7.s改成test7. c就可以了。
    以后不要粗心大意。

48楼: >>参与讨论
叶强
谢谢
谢谢!我还想问下那里可以下ADS1。2的中文数据手册,新手上路太多问题了

49楼: >>参与讨论
mikezhong
我在编译时,出现如下的一个错误,找了很久不知道是什么问题!
下面框内是ADS编译后的信息,总是说在D:/myARM下找不到这个文件,我的D盘下根本没有myARM的文件夹,请问是什么原因,如何解决?谢谢
/////////////////////////////////////////////////////////////////////
Error   : (Fatal) L6002U: Could not open file D:\myARM\44B0X_codes\FS44B0II_Board_Codes\FS44B0XII_V3_LCDTP_Test\FS44B0XII_V3_C57_Test_Data\Interrupt_Hex\ObjectCode\Slib.o.

Not enough information to list the image sizes and/or totals.

Finished: 1 information, 0 warning, 0 error and 1 fatal error messages.
////////////////////////////////////////////////////////////////////


50楼: >>参与讨论
jekete
答复“mikezhong”
    仔细清理文件夹,你的文件夹层数太深,ADS搜索比较困难,请减少文件夹的深度,如果需要,可以为ADS指定搜索路径。
    

51楼: >>参与讨论
jekete
答复叶强
我也步清楚哪里有中文ADS,推荐《ARM开发工具ADS原理与应用》

52楼: >>参与讨论
allenone
为什么我做的lib工程生成的.a文件特别大,而且加不进工程?
 
53楼: >>参与讨论
daikunjuan
AXD 不能下载映象文件是什么问题
AXD 不能下载映象文件是什么问题,出现如下错误:

RDI Warning 00254: Unimplemented RDI message
我自己做的板子,请问是哪里的原因,先谢谢各位了


54楼: >>参与讨论
jekete
答复“allenone”
叙述的不清楚。如果你生成的文件扩展名是a,就必须在文件映射中声明这种文件类型。

55楼: >>参与讨论
jekete
答复“daikunjuan”
RDI——remote debug interface
问题是:调试器和目标板没有连接上。



AXD 不能下载映象文件是什么问题,出现如下错误:

RDI Warning 00254: Unimplemented RDI message
我自己做的板子,请问是哪里的原因,先谢谢各位

56楼: >>参与讨论
daikunjuan
调试器和目标板没有连接上
先谢谢楼主了
调试器和目标板没有连接上,要从哪里找原因呢,我的硬件电路测试是没有问题的

57楼: >>参与讨论
jekete
答复“daikunjuan ”
这个很难说了,主要:
    1,AXD设置是否正确?
    2,连接线是否正确?
    3,目标板JTAG口是否正确?
    4,目标板的复位、电源、是否正确?

58楼: >>参与讨论
daikunjuan
JTAG问题解决了,但。。。。
现在可以识别JTAG了,但是下载映象文件,总是running在Startup.s文件,跳不到main函数,是什么原因呢

59楼: >>参与讨论
mikezhong
调试时,不按程序执行,而是函数的顺序执行.
To:jekete

你好,谢谢你的回复,我在同一个目标建立一个简单的工程程序没有此问题,如果是文件太深这个应该也会有这个问题啊.

另外,我在AXD调试时,按运行跳到MAIN中开始的第一个断点处,开始跟踪,发现只能单步,不能进入函数内部,同时如果进行死XUN环后,单步调试乱跳,,跳到其它函数中顺序执行.如果一个文件中有5个函数,它依次执行,不管程序调用返回,乱了,这是什么原因.?

60楼: >>参与讨论
daikunjuan
不能单步运行
请问,程序不能单步运行,一运行就跑到反汇编指令,是什么原因

61楼: >>参与讨论
jekete
答复“daikunjuan”
遇到这种情况,可以关闭AXD,重新打开,重新加载。有可能是设置问题:右键单击程序,会弹出一个菜单,重新设置stopping mode 模式,不要设置在disassebly模式。

62楼: >>参与讨论
jekete
答复“mikezhong”
    程序当然按照函数(输入段)的顺序执行,因此你必须指定函数(输入段)的顺序,正确的方法是使用scatter描述文件分配地址。
    按照程序执行是简单程序或处雪者的合理想象,对于复杂程序是不能实现的,例如一个循环程序或从后面跳到前面的程序?

63楼: >>参与讨论
wangkj
lz高人
 
64楼: >>参与讨论
jekete



65楼: >>参与讨论
paullin
关于ADS中编译指针数组出错.
谁知道在ADS1.2中如何定义指针数组呀?
我这样定义
uint8 * const TEST[]={"aa","bb"};
结果编译后有如下错误
Error   : C3028E: '=': implicit cast of pointer to non-equal pointer
HardWare.c LINE 6  


66楼: >>参与讨论
paullin
指针数组编译出错问题
谁知道在ADS1.2中如何定义指针数组呀?
我这样定义
uint8 * const TEST[]={"aa","bb"};
结果编译后有如下错误
Error   : C3028E: '=': implicit cast of pointer to non-equal pointer
HardWare.c LINE 6  


67楼: >>参与讨论
magic2858
MAKE 之后main不正常
在生成的make file中,我看到_main虽然属于RO段,但它前面的标识并不是Text,而是*!!!,请问是为什么?

68楼: >>参与讨论
jackwu1780
问大哥一个变量的问题
请问大哥,对于程序变量的分配,我的理解是这样的,不知道是不是对的,请大哥指点一二。
基于MCU,在程序编译的时候,编译程序会把芯片的RAM空间分成两个区,一个是系统堆栈区,用于存放程序中的局部变量;一个用来存放程序中的全局变量。在程序中的全局变量,分配在第二个RAM区域中。程序中的全局变量在编译的时候,都有固定的RAM地址,在程序运行的时候,直接访问就可以了;而局部变量分配的是一个相对于堆栈顶指针的偏移地址,在函数被执行时,系统把调用这个函数的程序现场存入堆栈中,运行的这个函数的局部变量就会使用偏移地址+堆栈栈顶地址;在函数返回以后,堆栈就会弹出,这样局部变量的空间就可以被重新利用了,是不是这样?

如果我理解不对,请问大哥在什么书可以找到相应答案,谢谢

69楼: >>参与讨论
thymomn
问题请教
大家好!本人最近在弄JTAG调试,目标板是ARM7TDMI的核,平台是ADS1.2+MULTI ICE 2.2.6。现在问题是,在调试MULTI ICE自带的实例代码时可以调试,但调试我们自己的代码时(代码有28M)总是在loading image时失败,MULTI ICE的BUSY 指示等狂闪一段时间后熄灭,然后AXD弹出 “000436,硬件接口超时”的错误,我看了很多网上说明,不知道和系统起来后的RO,RW,ZI的区域有关,请有经验的高人指点指点,谢谢!


70楼: >>参与讨论
magic2858
问个ADS中__main跳转的问题
jekete 您好,有个问题困扰好多天,请帮忙看看:

在ARM初始化完成后,进行向主函数跳转的过程中。我使用ADS提供的库函数__main来跳转,它可以实现代码的拷贝,ZI段的初始化,然后_main通过调用_rt_entry完成stach,heap的初始化。这种跳转在仿真器上仿真,系统工作正常(RO_base=0x30100000,RW_base=0x32000000)。程序通过_main跳转到主函数然后正常执行程序。
但将代码加载域重新分配后(RO_base=0x0,RW_base=0x30000000)生成.bin文件,烧写到NorFlash上,重新上电后系统无法进入主函数。我们通过在代码中加亮灯程序的方法进行定位,程序出错的地方如下:

__value_in_regs struct __initial_stackheap
__user_initial_stackheap(unsigned R0, unsigned SP, unsigned R2, unsigned SL)
{
struct __initial_stackheap config;

config.heap_base =0x33200000; //(unsigned int) &Image$$ER_RW$$Limit;

config.stack_base =SP;//0x33ff5800; //0x33f00000;//

ledon(); //亮灯程序
return config; //返回函数
}
main()
{
……
}
程序在进入堆栈初始化程序中,执行到“亮灯程序”之后跑飞的,但是没有进入主函数main()。
如果用ldr pc, =main进行跳转,程序可以进入主函数,但是由于没有对堆栈以及用到的C库函数进行初始化,所以主函数里面的程序无法正常工作。
目前的问题是:一定要实现对堆栈的初始化,并给主函数返回堆栈地址。初始化C库函数。只有这样才能保证后面的函数在用到C库函数的时候执行正确。
请问使用__main跳转,在硬件仿真中都可以通过,下载到FLASH中就跑飞的原因是什么?该如何解决? 

71楼: >>参与讨论
thymomn
问个JTAG的基础问题
jekete 您好!
请问个基础问题:ADS 调试LOAD IMAGE究竟有什么用?调试时是调试目标板上FLASH的程序还是LOAD的IMAGE?

72楼: >>参与讨论
jekete
答复“thymomn”
自己做一个短小的程序,先实验一下。

73楼: >>参与讨论
jekete
答复“thymomn”
要看你把目标文件加载到哪里,主要是分析目标文件的加载地址和执行地址。


jekete 您好!
请问个基础问题:ADS 调试LOAD IMAGE究竟有什么用?调试时是调试目标板上FLASH的程序还是LOAD的IMAGE?

74楼: >>参与讨论
thymomn
答复jekete
jekete 您好!
答复一:要看你把目标文件加载到哪里,主要是分析目标文件的加载地址和执行地址。
以下是我的SCATTER文件,SCATTER空间是按照SDRAM来进行分配的,我实在不懂load image和调试FLASH上的程序有什么关系?还是我们调试的根本就不是FLASH上的程序而是调试load的axf文件?请指点,谢谢!
答复二:
自己做一个短小的程序,先实验一下。
我试了MULTI ICE自带的dhry例子,可以调试,能明显看到ICE的工作状态在变化。

ROM_LOAD 0x0 0xe00000
{
    ;// Total EXEC AREA size is 0xd00000.
    ;// Segment EXEC AREA to several parts to avoid relocation VALUE out of range.
    ROM_EXEC1 +0 0x400000
    {
        init.o (Init, +First)
        * (+RO)
    }
    RAM_RW 0x00d00000  0x6F0000
    {
        * (+RW)
        * (+ZI)
    }
    SYS_STACK 0x013F0000 0x10000
    {
        mem_cfg.o (SYS_STACK_AREA)
    }
    RAM_DCAM 0x01400000    0x5d4d00
    {
        mem_cfg.o (YUVExtBuf)
    }
}


75楼: >>参与讨论
jekete
答复“magic2858”
1,是否可以使用仿真器调试?
2,改动RO_base=0x30100000之后,是否改动image entry point?
3,从00到堆栈33200000已经超过了32M的距离,对于有些用法可能存在困难, 比如跳转语句可能有问题。
4,其它不详。

76楼: >>参与讨论
jekete
答复“thymomn”
概念是混乱的,你所调试的,是你“load image”的目标文件,如果这个文件加载到“FLASH”上,你所调试的就是“FLASH”上目标代码,如果你加载到SDRAM上,你所调试的就是SDRAM上的代码。
先弄清楚基本概念,你的SCATTER文件有明显的错误,第一段加载到ROM_EXEC1 +0 0x400000,结束在E00000+400000=1200000,第二段怎么加载到0x00d00000?  



我实在不懂load image和调试FLASH上的程序有什么关系?还是我们调试的根本就不是FLASH上的程序而是调试load的axf文件?请指点,谢谢!


77楼: >>参与讨论
jekete
答复“jackwu1780‘
说的基本正确。


请问大哥,对于程序变量的分配,我的理解是这样的,不知道是不是对的,请大哥指点一二。
基于MCU,在程序编译的时候,编译程序会把芯片的RAM空间分成两个区,一个是系统堆栈区,用于存放程序中的局部变量;一个用来存放程序中的全局变量。在程序中的全局变量,分配在第二个RAM区域中。程序中的全局变量在编译的时候,都有固定的RAM地址,在程序运行的时候,直接访问就可以了;而局部变量分配的是一个相对于堆栈顶指针的偏移地址,在函数被执行时,系统把调用这个函数的程序现场存入堆栈中,运行的这个函数的局部变量就会使用偏移地址+堆栈栈顶地址;在函数返回以后,堆栈就会弹出,这样局部变量的空间就可以被重新利用了,是不是这样?


78楼: >>参与讨论
jekete
答复“thymomn”
以上看错了,你的SCATTER没有错误。

79楼: >>参与讨论
thymomn
谢谢jekete
jekete,非常感谢你的详细解答,但我怎么知道在load image时,是加载到SDRAM还是FLASH呢?还有如果*.axf文件大于SDRAM的size,那不是不能在SDRAM里调试?问的罗索点,请您能指点,谢谢!

80楼: >>参与讨论
jekete
答复“thymomn
   你还是没有明白!你把文件加载到OOOO地址,你的系统中,0000地址是什么存储器?如果”*.axf文件大于SDRAM的size“,那么,连正确加载都不能实现,还能够调试吗?



非常感谢你的详细解答,但我怎么知道在load image时,是加载到SDRAM还是FLASH呢?还有如果*.axf文件大于SDRAM的size,那不是不能在SDRAM里调试?问的罗索点,请您能指点,谢谢!




81楼: >>参与讨论
thymomn
谢谢jekete
谢谢jekete,知道您的意思,非常感谢!

82楼: >>参与讨论
jekete
答疑!答疑!
欢迎光临本楼主的另一个答疑点!!!!!!!!!!!!!!
http://www.mcu51.net/bbs/read.php?tid-775.html
欢迎光临本楼主的另一个答疑点!!!!!!!!!!!!!!
http://www.mcu51.net/bbs/read.php?tid-775.html
欢迎光临本楼主的另一个答疑点!!!!!!!!!!!!!!
http://www.mcu51.net/bbs/read.php?tid-775.html

83楼: >>参与讨论
magic2858
请问jekete
谢谢您的回复,根据您上次的回复
1,是否可以使用仿真器调试?
2,改动RO_base=0x30100000之后,是否改动image entry point?
3,从00到堆栈33200000已经超过了32M的距离,对于有些用法可能存在困难, 比如跳转语句可能有问题。
4,其它不详。

1:程序在仿真器上工作正常
2:改RO_base=0x30100000为RO_base=0x0之后,image entry point自动为0X0
3:这个问题对于使用B __main进行的跳转也有影响吗?程序是通过__main进行堆栈初始化以及库函数初始化后才跳转到主函数的
程序下载如FLASH中工作不正常的原因我怀疑是函数重定向的问题,您有什么见解呢?

84楼: >>参与讨论
Sea_Heart
也问几个问题,关于axd
1.单步调试时,有时候寄存器的值和全速运行时的不一样.这是怎么回事,例如,我调nand FLASH,去检测id时,数据结果本来应该是7ce6a5c0,但单步调试时可能顺序会乱,比如变成e6a5c07c.
2.要重新从代码起始点开始调试,只能reload image来做吗?这样是不是又重新下载了一次代码到SDRAMFLASH,它是否可以不用重新下载,直接回到代码头部运行?

85楼: >>参与讨论
jekete
答复magic2858
    终于明白你把程序下载到FLASH中去了,看来FLASH是内部FLASH
可能的问题是:仿真器是否有写入FLASH的能力?是否支持FLASH写入?

86楼: >>参与讨论
jekete
答复Sea_Heart
1,这个问题不好解答,但是可能不会影响调试。使用JTAG调试,因为是边界扫描和串行传送数据,不稳定的仿真器可能有错误数据。
2,只能reload image来做,是又重新下载了一次代码到SDRAMFLASH。有的工具有复位功能。



1.单步调试时,有时候寄存器的值和全速运行时的不一样.这是怎么回事,例如,我调nand FLASH,去检测id时,数据结果本来应该是7ce6a5c0,但单步调试时可能顺序会乱,比如变成e6a5c07c.
2.要重新从代码起始点开始调试,只能reload image来做吗?这样是不是又重新下载了一次代码到SDRAMFLASH,它是否可以不用重新下载,直接回到代码头部运行?


87楼: >>参与讨论
magic2858
magic2858答复jekete
谢谢jekete。我是在ADS中生成二进制文件后,用sjf2410专门的烧写工具写到板子上的norflash中去的。
我的目的是想让程序脱离PC机和仿真环境工作。
在仿真环境下设计好的项目,烧写到板子上的norflash中去就工作不正常。
在代码搬运和跳转都没有问题的情况下,您看这种情况与函数重定向有关吗?

88楼: >>参与讨论
jekete
答复“magic2858
如果使用仿真器和脱离仿真器所使用的地址相同,不存在重定位问题。如果不同可能有这个问题。
仔细检查最小系统是否存在问题。

89楼: >>参与讨论
magic2858
答复jekete
感谢!
仿真器是在SDRAM中运行,RO_base=0x30100000,RW_base=0x32000000
脱离仿真器后在实际电路中运行,将代码下载到FLASH中。此时的RO_base=0x0,RW_base=0x32000000。两种情况唯一的不同点就在这里。
我使用__use_no_semihosting_swi选项,查出还有3个函数处于semihosting状态。现正想办法对其重定向,关键是不知道这些函数的结构,您知道怎么确定吗?

90楼: >>参与讨论
jekete

自治州

91楼: >>参与讨论
祈祷之龙
请教AXD下的调试怎么不能进step in
就是step in 的效果是和step一样的,进不了函数.以前不是这样的.而且程序也没按照预先的走,请教怎么回事?

92楼: >>参与讨论
qljqlj
还是不能单步调试的问题
刚开始下载进去时,出现"NO disassembly could be read at the requested address."不能调试,一按"GO ",就出现上面的的对话框后,来重新乱试了,不知道,怎么可以按"GO ",就可以跑了,但是还是不能单步调试,并且停止后,还是出现上面的 对话框,请问,怎么回事

93楼: >>参与讨论
bl20020825
问一下
我对ADS中的那个只读段位置无关(ropi)、读写段的位置无关(rwpi)等等未理解,位置无关到底是啥子意思哦?望指点!谢谢

94楼: >>参与讨论
anyusb
呵呵.
 
95楼: >>参与讨论
uisffer
关于scatter文件的问题
scatter文件

CODE:
ROM_LOAD 0x7F000000
{
  ROM +0
  {
    init.o (Init, +First)
    anon$$obj.o
    __main.o(!!!)
;     __main.o(+RO)     ; copy code
;     *(Region$$Table)   ; RO/RW addresses to copy
;     *(ZISection$$Table)   ; ZI addresses to copy
    sh.o
    dhcp.o
;     inflate.o
;     infblock.o
;     infcodes.o
;     inftrees.o
    uprintf.o
    * (+RO)
    
  }
  RAM 0x0
  {
    vectors.o(Vect, +First)
    flash.o
    bib.o
    image.o
    TftpServer.o
    NetKernel.o
    PacketDriver.o
    xmodem.o
    * (+RW, +ZI)
  }

}
[Copy to clipboard]

编译警告
Warning : L6314W: .\Src\scat_c.scf(LINE 39, col 9) No section matches pattern dhcp.*o(RO).
scat_c.scf LINE 39   

Warning : L6314W: .\Src\scat_c.scf(LINE 50, col 3) No section matches pattern TftpServer.*o(RO).
scat_c.scf LINE 50   

Warning : L6314W: .\Src\scat_c.scf(LINE 51, col 3) No section matches pattern NetKernel.*o(RO).
scat_c.scf LINE 51   

Warning : L6314W: .\Src\scat_c.scf(LINE 52, col 9) No section matches pattern PacketDriver.*o(RO).
scat_c.scf LINE 52   

出现警告的几个目标文件是子工程里的,编译父工程时子工程的这些文件已全部编译,为什么找不到匹配的section?父工程还有其它子工程,不存在这个问题,如目标文件flash.o,bib.o,image.o。

请问出现警告的原因是什么?

96楼: >>参与讨论
uisffer
专家不在?
另外在http://www.mcu51.net/bbs/read.php?tid-775.html发的帖子
专家不在啊?
是不是专家比较忙?

97楼: >>参与讨论
jekete
答复" uisffer "
关于子工程:可能的问题是:
    1, 子工程的属性是否设置正确?
    2,子工程是否被使用过?如果没有使用使用过,可能已被删除?
    3,子工程必须是一个完整的段?

98楼: >>参与讨论
jekete
答复bl20020825
位置无关就是编译器可以安排任意的地址.

99楼: >>参与讨论
jekete
答复qljqlj
你的代码没有写入到所希望的存储器中去!

100楼: >>参与讨论
jekete
答复祈祷之龙
如下:
1,打开程序
2,右键单击,弹出一个级连菜单,
3,单击"stpping mode",打开一个子菜单
3,选择合适的调试方式.

101楼: >>参与讨论
jekete
楼主告示
对ADS的有关问题,请阅读
<ARM开发工具ADS原理与应用>这本书

102楼: >>参与讨论
wangkj
这本书有没有电子版的或者哪里有卖的
 
103楼: >>参与讨论
js_wawayu
anon$$obj.o (+RO)
这个文件里含有entry point所以它的load address必须和execute address一致,这个可以看看ads的帮助文件

104楼: >>参与讨论
js_wawayu
在进入main之前编译器自动生成什么?
main函数是自己定义的,编译器还有一个__main入口,这里面进行代码搬移以及标准库的初始化工作,最后跳转到main,当然也可以自己写代码完成代码的搬移,然后直接跳转到main,不走__main

105楼: >>参与讨论
treeslu
2410 进一次任务后就跑飞的问题
正像上次那位ZLG-ARM 所讲,将semiHosting 去掉就好了,但当时俺不知道所谓的semihosting 在那里,是啥,病急乱投医,被我撞上了,去年调EasyARM时,是没有做这个动作的;不知当时是否默认取消semihosting,
    查了一下资料,当需要通过嵌入式调试工具调用标准的C库函数时,需要semihosting来辅助完成。

问题:
   1,为什么不取消"semihosting"会造成进一次Uart0Task后就跑飞了,而且停不下来?
   2,为什么每次了解到AxD都需要/Configure Processor/中Clear All "Vector Catche" 和取消"semihosting",而不能操作一次后,保存记录?

附加问题:
   3,从ADS编译好后,连接到AxD时,会出现一警告对话框“The session file'C:\Documents and Settings\...\default-1-2-0-0.ses'could not be loaded。” 然后“OK”,“Configure Target”再连一次就好了?

106楼: >>参与讨论
hewn
问个关于JTAG的问题
我的ARM开发板通过JTAG连接到笔记本电脑时,AXD总是提示DBE Warning 00041:An unspecified Debug Toolbox Call Failed.设置都没问题,我在办公室的台式机上试就没问题。更改并口的工作模式也不行,请问如何解决这个问题。谢谢!

107楼: >>参与讨论
treeslu
请帮忙解答,问题解决不知道为啥
俺最近ADS中调UCOS,遇到下面三个问题

   查了一下资料,当需要通过嵌入式调试工具调用标准的C库函数时,需要semihosting来辅助完成。

   1,为什么不取消"semihosting"会造成进一次Uart0Task后就跑飞了,而且停不下来?

   2,为什么每次连接到AxD都需要/Configure Processor/中Clear All "Vector Catche" 和取消"semihosting",而不能操作一次后,保存记录?


   3,从ADS编译好后,连接到AxD时,会出现一警告对话框“The session file'C:\Documents and Settings\...\default-1-2-0-0.ses'could not be loaded。” 然后“OK”,“Configure Target”再连一次就好了?


108楼: >>参与讨论
ge_fjk
[求助]2440不能进入调试模式
自己做了一块S3C2440的板子,使用AXD调试始终显示无法进入调试模式(原开发板上是好的)。提示:RDI Warning 00201: Cannot open target: the target is not responding.

使用JTAG的并口debug代理程序,能够发现ARM核。
使用SJF2440FLASH的操作都正常,(SJF2440好像只是单方面烧FLASH,不进行验证,所以不能表明系统正常了)。


看了muti-ice的手册,说是能够用autoconfig发现ARM核,但是无法进入调试模式,

通常是JTAG信号质量问题,但是示波器测出来波形很好,同时我把JTAG的速率

使用20KHz,还是不行。请问可能是什么问题呢?



109楼: >>参与讨论
农民讲习所
楼上的烧个BOOTLOADER就可以调试了
原因就是上电飞走了。程序要跳到SDRAM中才行,在4KBOOTRAM中是不行的。

110楼: >>参与讨论
lw2008
请LZ帮忙解答
我建模板生成将包含*.c生成obj1112.a库,现将obj1112.a添加进项目编译,用JTAGInFLASH方式下载调试时,还是可以进入原*.c的函数。obj1112.a不编译成汇编了吗?

111楼: >>参与讨论
lchengjun
我的分散加载文件的问题
请教搂主:
我想把一个结构体的内容定位到外部ram中
在一个头文件“ASICRAM.h"中只定义一个结构体
****ASICRAM.h*****
typedef struct
{
   ......
}ASICRAM;

然后在一个文件“DPRAMDEF.c"中只定义一个结构体变量
#include "ASICRAM.h"
ASICRAM spc;

在主程序文件里
extern ASICRAM spc;

然后分散加载文件这样设置
ROM_LOAD 0x0
{
    ROM_EXEC 0x00000000
    {
        Startup.o (vectors, +First)
        * (+RO)
    }

    IRAM 0x40000000
    {
        Startup.o (MyStacks)
        * (+RW,+ZI)
    }

    STACKS_BOTTOM +0 UNINIT
    {
        Startup.o (StackBottom)
    }

    STACKS 0x40003c00 UNINIT
    {
        Startup.o (Stacks)
    }
    
    HEAP +0 UNINIT
    {
        Startup.o (Heap)    
    }

    HEAP_BOTTOM 0x40004000 UNINIT
    {
           Startup.o (HeapTop)
    }

    ERAM 0x80000000 0x5ff
    {
        spc.o (+ZW)
    }     
}
程序调试发现结构体没有和外部ram联系起来,外部ram没有存放结构体中的变量
为什么呢?请帮我分析一下,十分感谢





112楼: >>参与讨论
jekete
ding
ding

113楼: >>参与讨论
zhaoem82
用axd怎样能在FLASH中调试?
是否是直接将在ads中ro-base修改为FLASH的起始地址就行?

114楼: >>参与讨论
coke
如何搞定ADS结构体嵌套对齐问题?
#pragma pack(paush,1)
typedef struct
{
    U8    bLength;
    U8    bDescriptorType;
    #pragma pack(paush,1
    struct
     {
        U8 address:4;
        U8 reserved:3;
        U8 direction:1;
        } bEndpointAddress;
        #pragma pack(pop)

    U8    bmAttributes;
    U16    wMaxPacketSize;
    U8    bInterval;
} USB_endpoint_desc_t;
#pragma pack(pop)
以上结构体的定义加了packed关键词了. 但是
TX_BUFF[3]=sizeof(USB_endpoint_desc_t);
结果还是8. 应该是7才是啊. 如何搞定他?

115楼: >>参与讨论
jekete
ding
 
116楼: >>参与讨论
qljqlj
还是不能运行
61楼: 答复“daikunjuan”

遇到这种情况,可以关闭AXD,重新打开,重新加载。有可能是设置问题:右键单击程序,会弹出一个菜单,重新设置stopping mode 模式,不要设置在disassebly模式。

我也碰见这种问题了,不知道怎么办了.上面的回答,我试了,可是不行.
请问大家这个问题,我的板子原先是好好的,能设断点,也能单步运行,后来我也不知道怎么搞的,不能运行了,我试着运行以前好的程序,都不行,奇怪了,难道是扳子芯片坏了吗,谢谢.

117楼: >>参与讨论
jekete
楼主告示
大家提出的很多问题,已经超出了ADS内容,所以楼主无能为力,现在本人较忙,有关ADS问题,可以参考<ARM开发工具ADS原理与应用>(北航出版)

118楼: >>参与讨论
jekete



119楼: >>参与讨论
jekete



120楼: >>参与讨论
jekete
继续
继续工作,可否?

121楼: >>参与讨论
aaronwong
你好!请问ADS中汇编与C混合编程的问题
    你好,非常感谢楼主在此帮助我们大家解答问题。
    最近有个项目,需要使用PXA270的GPIO口做控制端口。在启动代码中初始化GPIO是一定的,另外在C应用程序中,还需要用GPIO做实时控制信号,因此在C语言中也要使用GPIO的控制寄存器来控制GPIO的状态和动作。
    这样的话,启动代码中和C程序中都要对GPIO控制寄存器进行定义,如果分别用汇编语言和C头文件做两次寄存器定义,必然有重复之嫌。我现在只想在一个地方做一次定义,例如,在C语言的.h头文件中用#define定义寄存器名字和地址,然后在汇编的启动代码中引用这些符号。比较迷惑的地方是:
    1.汇编语言中是不是使用INCLUDE **.h就能把C头文件包含进来呢?如果包含进来了,assembler能否认识C语言的#define?
    2.关于宏。因为C语言中和汇编语言定义寄存器地址的方法不同:
    #ifdef __ASSEMBLY__
       # define __REG(x)    (x)
    #else
       # define __REG(x)    (*(volatile unsigned LONG *)(x))
    #endif
    如果在C头文件中定义了这个宏,如何在汇编程序中引用这个宏?另外,如何在汇编程序中定义符号__ASSEMBLY__?
    谢谢!!

122楼: >>参与讨论
jekete
ding
为什么不能置顶???

123楼: >>参与讨论
jekete
为什么不能置顶?
为什么不能置顶??我还要继续答疑

124楼: >>参与讨论
FGD

 COUNT    EQU     0x40003100
              
                        AREA    EXAMPLE2,CODE,READONLY
                        ENTRY
                        CODE32
               START   
                        LDR       R1,=COUNT
                        MOV       R0,#0
                        STR       R0,[R1]
               LOOP   
                        LDR       R1,=COUNT
                        LDR       R0,[R1]
                        ADD       R0,R0,#1
                        CMP       R0,#10
                        MOVHS     R0,#0
                        STR       R0,[R1]
                        B         LOOP
                        END

這個程序編譯通不過,總出現這種為題:

125楼: >>参与讨论
FGD

接上面

Error   : A1163E: UNKNOWN opcode
TEST.S LINE 1  

    1 00000000                COUNT    EQU     0x40003100

Error   : A1163E: UNKNOWN opcode
TEST.S LINE 6  

    6 00000000                START   

Error   : A1163E: UNKNOWN opcode
TEST.S LINE 10  

   10 0000000c                LOOP   

3 Errors, 0 Warnings

 

126楼: >>参与讨论
liuliu
调试时出现的错误 Error : (Fatal) L6002U: Could not open file D:\pos. 我的工程文件不是放在这个文件夹里,以前是从这个文件夹拷过来的,重新编译过还是有这个错误,请问怎么解决?
127楼: >>参与讨论
lzliang

 

 

 

定义全局变量 ,如果定义成unsigned int型就报以上警告

如果定义成unsigned char形时就不会警告

求解!!!

128楼: >>参与讨论
boxing

听说别人的axd 运行时 系统会在main处默认加个断点

可是我的却没有 每次都手动 相当郁闷 重装也还是没有

请问可否自己修改这个默认设置?

另外 在ads中编辑代码时 代码前面点击出现那个小深红的点 是代表加入断点吗

为什么进入到axd中就没有用了呢

129楼: >>参与讨论
lyh

请问各位高手“Error   : (Fatal) L6002U: Could not open file E:\ZH_SYSTEM\ARM Executable Image for UCOSII.”是什么意思

 

参与讨论
昵称:
讨论内容:
 
 
相关帖子
关于ADS1.2里设置RO Base 和RW Base的疑问?
请教一个DMA的问题
关于switch...case的级联返回问题!请各位大虾指导!
用USB调试ARM大家都用什么?keil+ulink还是IAR+jlink或其他...?
紧急求助LM393在3.3V电源下的问题
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号