打印

请教:关于ADS1.2里codewarror的问题,ARM9

[复制链接]
3147|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunwind45|  楼主 | 2008-9-20 14:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我有个arm9的板子,想试试,但是不晓得如何设置codewarror.

见教程上说的顺序:
建个ARM Executable Image --->添加源程序 ---->debugger 设置.
主要的问题就是debugger的设置,有些可以知道,比如target setting;有些就比较迷茫了:
1. ARM Assembler : 是不是只要选择了arm的结构为arm920t(我的内核是这个),其他不用再去管了(little endian,No floating point 等)?
Equivalent Command Line里的东西需要自己去弄吗?

2. ARM C Compiler设置是不是跟第一个(ARM Assembler )一样?

3.其他编译器我不用,是不是可以不去设置?

4.ARM Linker里,RO base和RW base到底该添什么?它们的意思我晓得.但是,我要在仿真器里跑,并不烧到flash里;那么,这个RO base应该是sdram的地址吗?还是说这个只是个用来下载用,转成二进制就会被去掉?直接下到sdram里,可以不用考虑这个ro base?
RW base是不是都不用填,默认为sdram?

我的nor flash是接在gcs0,sdram是接在gcs6,nand flash不知道接到哪儿了(没搞清楚).

5.ARM fromELF.输出文件名是不是必须填?

6.对于模板的问题.我也做了个.在新建工程也能看见.但是,建出来的工程文件,它的设置还是默认的设置,跟我建的模板的设置根本不是一回事.这是咋回事?
糊涂.

另外,我编个闪灯小程序,那么对sdram的初始化是怎么完成的?是不是应该调试器去完成这个过程吗?

相关帖子

沙发
twentyone| | 2008-9-20 16:00 | 只看该作者

看来LZ是个绝对的新手

看了LZ的问题,实在太多。

1 - 选择ARM920T就可以了,一般情况下,都是运行在LITTLE ENDIAN的;
2 - 一样的设置;
3 - 可以不设置;
4 - 程序分为几个部分,RO部分,RW部分,你需要指定RO地址。RW地址可以不指定,如果不指定,默认跟在RO后面。
5 - 你可以暂时不用管FROMELF。这个一个把ELF/AXF文件转换成别的格式的工具。
6 - 你刚开始学,最好不要用别人的模板,自己直接新建工程。这样会对项目结构了解得更好。

SDRAM的初始化是用户自己的事情,想AXD和仿真软件,都只是提供了一个调试接口给用户,用户需要利用这个接口完成自己想做的事情。

使用特权

评论回复
板凳
阿南| | 2008-9-20 21:50 | 只看该作者

感谢21,回答的非常的耐心.

楼主是什么板子,先找个现成的工程运行一下吧.其实需要设置的地方不多

使用特权

评论回复
地板
sunwind45|  楼主 | 2008-9-22 08:58 | 只看该作者

我的是以前别人买的广州产的s3c2410的板子

没什么资料,就一个光棍板子,里面预装了个linux.

现在领导想装个wince进去,让学习学习.

目前有个jtagjet仿真器,有chameleon调试器,又下了ads1.2作为编译器.

唉,chameleon不晓得咋使,文档很简单,网上也没什么资料.

看来,试试ads1.2的axd了.

因为我不想用操作系统,只想编个小程序.那么,要把程序load到sdram里去跑,在这之前,是应该需要把sdram(或者说存储空间分配)初始化.否则,sdram应该是不能用的.我想应该是有个初始化文件.调试器在load之前,先用这个初始化文件把cpu初始化了,这样才能直接使用.比如,ti 的ccs有个gel文件,codewarror for powerpc 有个用户初始化文件,它们都是做这个事的.arm难道不需要?

我用的仿真器是jtagjet,使用axd调试有障碍吗?

很感谢两位老大的帮忙,还需要啊.

使用特权

评论回复
5
freewing| | 2008-9-23 15:57 | 只看该作者

这里有个教程可以参考

这里有个教程可以参考
只是这个是用sky2440的板子来做实验的。是s3c2440 的cpu 。
链接:http://www.embedsky.net/bbs/viewthread.php?tid=20&extra=page%3D1

归纳起来,就是2楼说的情况。 具体,你可以下这个教程看看。有从建立,到使用的过程的详细图解。还是用h-jtag来仿真的。
版权归:) :  http://www.embedsky.net


我的淘宝:http://shop34627750.taobao.com/

使用特权

评论回复
6
sunwind45|  楼主 | 2008-9-24 10:11 | 只看该作者

感谢!

我去下了,还没看.

我的chameleon调试器,已经发现它的初始化文件了.它用的是个宏文件,以mac为扩展名.
只是有些命令不清楚是什么意思,没有说明文档.
参考了例子,修改了下,能够对sdram操作了.

现在的问题就是codewarror的编译问题.
它的image entry point 是指的运行起始地址???需要填吗?

我想直接load二进制文件,然后改pc指针,直接去跑.
但是,我搞不清楚运行起始地址是哪个.

在ARM Linker命令行里会有这个:-first 2410init.o(Init).这个是哪儿来的?

呵呵.

使用特权

评论回复
7
armfan| | 2008-9-24 11:08 | 只看该作者

re :

还是找找ads资料在问吧
或是留下邮箱,我给你发过去几个文档。

使用特权

评论回复
8
sunwind45|  楼主 | 2008-9-24 15:55 | 只看该作者

我是一边在试,一边在问,一边在看资料,老大们别怕麻烦

现在,我基本上把我的chameleon的调试环境熟悉了些.

用ads1.2生成elf文件,可以直接用chameleon去调试了.

现在的问题是代码运行到_rt_entry的_rt_stackheap_init就出了问题,根本到不了我的main()函数.

刚才看了资料,ads在开始有个_mian()作为c语言的入口函数,随后有_rt_entry等等.那么,在用的时候,要注意什么呢?我的问题好象就是出在这里了.

另外,这个入口函数是ads提供的,网上说可以自己写一个代替,难道提供的不如自己写的吗?还是说因为自己写的用的方便?

我的email:sunwind45@163.com

谢谢各位大虾的帮忙啊.

使用特权

评论回复
9
sunwind45|  楼主 | 2008-9-26 09:58 | 只看该作者

问题是出在_user_initial_stackheap

现在根据程序运行的情况看,是出在_user_initial_stackheap里.

它修改了SP的值,为0x80000,这个地址在我的板子上是个FLASH,不可能作为stack使用.

看资料说,STACK的基地址是调试器设定的.

这个事情就很难办了.

chameleon资料太少了.要想找它的stack默认设置难啊.至少在软件界面上没发现有可以去改的地方.

使用特权

评论回复
10
sunwind45|  楼主 | 2008-9-26 11:26 | 只看该作者

问题确定了,就是stack的初始化问题

刚试了下,在它刚把stack的基地址改成0x80000的时候,我人为的改成sdram的一个地址.这样,程序就跑了,灯也闪了.

目前,就是不晓得它从哪里取的stack的基地址.
它执行了一个SWI的软中断,好象就是取了这个基地址.

另外,想知道,ads1.2里是这样说的,stack的基地址跟调试环境有关.要是我不使用ads里所说的几种调试器,那么它这个值会是去哪儿取?

要是不用ads1.2,用keil,是不是就没这个问题?

还得继续看.
老大们也帮帮忙.

呵呵

使用特权

评论回复
11
sunwind45|  楼主 | 2008-9-26 16:59 | 只看该作者

自己顶

你们在调试时没有这样的问题吗?

axd调试器是在peripheral.ami文件里设置了默认值,现在就不知道如何对chameleon.

要是不使用semihosting,是不是就比较麻烦啊?

我还是希望使用标准的东西,呵呵

现在模糊的可能是,semihosting不支持jtagjet仿真器.

使用特权

评论回复
12
sunwind45|  楼主 | 2008-10-13 10:03 | 只看该作者

问题解决

chameleon需要在初始化mac文件里加条语句,直接初始化top_of_memory.
这样就可以了.
至于AXD ,还没通.它总是死在SWI 那里.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

74

主题

178

帖子

1

粉丝