打印

致和我一样的初学者--我在入门途中遇到的问题及解决办法 ... ...

致和我一样的初学者--我在入门途中遇到的问题及解决办法 ... ...

买44B0的开发板已一年多了,但平时也没多少时间,况且中间有近一年没动它。今年才拿出来,因为我之前只会51单片机,这是好事也是坏事,好在有微控基础,坏在在51开发工具上思路的根深蒂固,在ADS等等软件以及存储器结构上走了些弯路,昨晚刚把中断调试成功,作个总结,有和我相同“遭遇”的朋友可以借鉴一下!
第一次是我写了一个最简单的C按键点灯程序,用软件仿真(ARMUL)正常,但烧到板上不能运行,灯闪一下就灭了。这个问题是我当时对存储器及启动代码的执行了解不够,将ADS里的RO和RW都设为0的缘故,应为0和0X0C00_0000(如果SDRAM是接在BANK6的话)。
第二次问题就在几天前做中断试验的时候,用ARMUL仿真正常(但不能仿真中断,这个问题我发了若干帖子都没人回,个人认为ADS开发环境真的还有不少欠缺,有些难懂),但若接上目标板用JTAG代理仿真就不会跳到MAIN处执行,而是跳到初始化端口中的一行,感觉在乱跳。这个问题试了好多天,因为用的是简易JTAG,稳定性上我也不敢百分百的相信,虽然也曾用过Banyan,但我感觉也不稳定,且不能超过2个断点。后来把中断初始化的pISR_EINT4567 = (int)Eint4567Isr;这行给去掉后就正常了。仔细想,这段只是个“地址链接”(不知道专业属语叫什么了)的作用,把中断服务函数的地址放到_ISR_STARTADDRESS+0x74这个地址来(后面说),而我的板是我自己买元件自己焊接的,当时就像配电脑一样,有些贪,板上本来是8MB的SDRAM,而我用的是16MB的SDRAM,这样当然影响_ISR_STARTADDRESS,但我在Option.s及Option.h里都改了呀!又找了两天(在深圳,业余时间少得可怜),实在找不着原因,于是不甘心就看44B0的存储器配置的资料,一个寄存器一个位的看,最后在BANKCON6的SCAN位找到了,00是8位SDRAN列地址,01是9位SDRAN列地址,而我2M*4B*16位的列地址应该是9位才对。改正以后,跳转到MAIN正常了。但用简易JTAG在目标板仿真在我按按键的时候还是不能跳到中断服务函数,软件(ARMUL)又不能模拟中断产生(这是我认为ADS做得不好的原因,也可能是用惯了KEIL吧)经查程序没问题,烧到板上运行一切正常!哎,不然又走弯路了!
第二个问题太啰嗦了,主要是怕和我一样的初学者看不懂,一个名詞就可能绕一个弯。我再说一下我对中断怎样链接到C程序的理解,虽然网上的解释很多,但我也觉得难理解(可能是我自己太笨吧,呵呵),它其实就是在Init.s和C程序跳到同一个地址实现的,如EINT4567就是_ISR_STARTADDRESS+0x74,在两个文件都有相关定义,因为硬件地址是固定不变的。
特此申明:本贴只适合没入门的朋友,已入门的看了我会脸红的!

TOP

不错,有什么好的想法和思路可以贴上来,共同学习

TOP

[quote:3344bebbed="lumit-support-1"]不错,有什么好的想法和思路可以贴上来,共同学习[/quote]

TOP

我用的是三星的44B0开发板,在IAR开发环境下采用wiggler + H-JTAG
的简单调试,但一按debug,就提示告警,好象是没有启动代码的意思;我看了一个例程(LPC2103的开发板),需在项目里添加lpc21xx_cstartup.s79.
请问在哪里能找到44B0的cstartup.s79?
这个是不是44B0的启动代码?
   初次ARM,调了几天了也没DEBUG起来,真真...
     请回我的mail:
   zxm_chinese@163.com
zxm_chinese@163.com

TOP

还有点问题!

写的太好了,我总算看到了入门希望.看了您写的帖子,我还想问个问题:JTAG小板不能仿真中断么?如果能仿真,怎么仿真?急需您的帮助,谢谢。

TOP

楼主写得不错。虽然和我一样,有些专业词汇不知怎么表达,但对初学者来说确实很有用。

TOP

回5楼的,ARM的JTAG仿真器不管简易还是专业的,都离不也一个代理软件,如H-JTAG、BANYAN等

TOP