请问各位:如何调试中断?
我的程序中断有问题,用axd+jtag 调试代理,一到中断哪儿,即使我外部触发了中断,好像也不响应???是不是用调试代理没办法调试中断,而必须使用仿真器才可以???另外,我单步调试44binit.s,至bl InitStacks时,按F10单步调试,程序好像就中跑飞或者死机,AxD窗口下Stepping Image进度条一闪一闪的,这是什么原因啊? 重新编译了一遍,一切ok了,哈
下一步准备将uart的实现方法改一下,sdt下比较麻烦,在ads下只要重载一下fputc就可以了。
然后是移植ucosii
感觉用ads是比sdt爽很多!
革新公司真可恶,卖开发板的时候推荐我使用sdt,还说用ads会很多问题,害得我一开始花了不少时间折腾sdt,原理图还很多错,郁闷
买开发板还是应该找一家信誉比较好之公司,各位后来的ddmm
关于中断的调试,我觉得应该是不可以使用jtag来的,必须用硬件仿真器
好像李明老师在课上也说过,有些是没法用单步调试的,如中断
是吧,斑竹,呵呵 嗯,最近这段时间你的工作进展迅速啊,恭喜!:lol: 呵呵,我感觉进展太慢了,前段时间为编译器莫名其妙的问题浪费了不少时间,到昨天总算解决了。
现在才开始往44b0上移植ucosii,感觉没有我原来想像的容易。
例程中有些东西如#define SEMIHOSTED_STACK_NEEDS 1024
extern void ARMTargetInit(void);
extern void ARMTargetStart(void);
我都不知道有什么作用。 44B0 上的移植可以参考以前 arming 的版本。 lumit 网站上有,下载看看?
有问题可以给 [email protected] 发信,他可是 44b0 的高手,嘿嘿! 我参考的就是arming的版本,还不错,已经跑起来了
谢谢你给我介绍了一个440b的大侠,不好意思,下回直接去"骚扰"他,呵呵 中断肯定能用,但我用的是4510,不是44b0,所以只能给你一些建议:
在ads的CodeWarrior 中编译时一定要把程序段、数据段设定在合适的位置,如用4510,中断向量均要求在开始部分(0x0地址),程序段特别是涉及中断向量部分的程序,必须定位在开始部分。这种定位是用CodeWarrior环境中的菜单项edit->target setting完成的。用axd调试时,4510默认的0x0地址是flash,不能把程序加载在flash中调试,这样程序就跑飞了。必须把程序加载在sdram中,实现的办法是在加载程序以前,要先用axd的system views->command line interface命令方式重映射存储器,使sdram在0x0地址,最好能processor view->memory试一下重映射是否实现了,然后,切记:option->configure processor中,关闭axd的监视,就可以调试中断了。
对44b0,好象不提倡重映射,可以先在flash中写入中断向量,跳转到sdram段中,但“切记”切记。
wenbbo 谢谢wenbbo
中断能正常响应了,不过现在又有一个新问题。
我用adw调试,发现一个很奇怪的现象,在复位的时候,也就是说单步完ResetHandler后,我观察EXTINTPND,发现初值不为0(44b0的datasheet上明明说复位值为0),而是0x0000000f,而INTPND初值也不为0,而是0x02500088.
也就是说一复位后就有外部中断,实在不明白.这样会导致出现一些问题,比如我的键盘使用了外部中断,那么程序一开始运行就会响应外部中断,但实际上这时我关没有按下按键。
btw:在调试的时候,我的板子的flash里面已经烧写有bootloader---ARMBoot,不过我觉得和这个没关系吧,即使我板子的flash里面没有bootloader,也应该可以调试啊。
谢谢 你把板子的 flash bootloader 冲掉,随便写一个1byte的文件进去,然后再看看你说的那些寄存器的值。 复位后有中断并不少见,我的板子上有usb/pdiusbd12芯片,它在不处理时,其INT引脚总是低电,这是属于EXTINTPND的吧。所以,首先要搞清楚是谁在报中断,用INTMSK屏蔽不清楚和不需要的。而需要的,象我的usb,是通过usb编程解决的。其实就是适时地写一下INTPND寄存器就可以了(当然必须处理好引起部分)。我有usb固件程序发在这个论坛上,它涉及这部分内容,也有中断向量等,你参考吧。 谢谢wenbbo
谢谢各位热心的朋友
页:
[1]