这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [求助]急问关于swi中断的问题

共7条 1/1 1 跳转至

[求助]急问关于swi中断的问题

菜鸟
2006-03-30 00:01:39     打赏

我有几个关于swi的问题,请大家帮助解释一下:

1。关于swi指令:我用ADS的armul软件仿真时,swi 0x0执行时ADS转到04未定义指令处,而不是08地址上。???

2。用zlg的做了一个有swi中断的实验,到swi处没有报未定义指令,但是也没跳到08地址上,而是直接过去了。从寄存器上看,指令已经执行完了(管理模式下的寄存器发生改变)。我是单步执行,为什么没有看见跳转到swi中断的ISR处???

3。利用swi 0x123456(0xab)如何使用半主机功能,请教???




关键词: 求助     急问     关于     中断     问题    

菜鸟
2006-03-30 01:23:00     打赏
2楼
1. 我前几天用ADS的ARMUL仿真过SWI,好像也有问题。
2. 你用ZLG的板子做SWI仿真的时候,在地址0X8设置一个断点试一试,看程序是否会停在地址0X8。另外,LPC好像是不是支持中断向量表的重新定位,你最好看手册确定一下。
3. 用SEMIHOSTING没什么特别的,设置好TOP_OF_MEMORY变量。如果需要的话,我可以发一个简单的例子给你。不过你先在把SWI试验确定一下。

菜鸟
2006-03-30 17:50:00     打赏
3楼

我在08处设置断点,可以追到swi指令的跳转过程。

分析原因可能是用的lpc2210无片内flash,程序加载到片外ram中(地址0x80000000)。由于lpc2210的重映射机制,将0x80000000地址上的中断向量表映射到0x0处,swi指令运行后跳到0x8,此时只能看见反汇编代码没有源文件(0x0处没有代码),再经过08处的跳转到swi的ISR处,此时就可以看见源文件代码,程序继续执行。

我想如果在08处不设置断点,由于在08处没有实际的代码,所以直接跳过去了。

关于半主机的设置方法,请发到我邮箱:wheels@35.com

[em17]

菜鸟
2006-03-30 21:12:00     打赏
4楼
已经给你发过去了。

菜鸟
2006-03-31 18:38:00     打赏
5楼

To twentyone:感谢!看完你给例子后,基本清楚了semihosting的用法,但是像printf的使用,以及变量$TOP_OF_MEMORY的设置方法,还是不知道。能否再讲解讲解,最好是给我一个例子,多谢!还有semihosting mode中std vector是指什么,我设置成0x0或是0x8都可以正常使用semihosting,正常是否应该设置为0x8?

另外,swi指令在ADS中的跳转,我试写了一个完整的例子,发现swi能够正常跳转,但是不知道什么原因导致两者之间不同跳转?我觉得可能跟程序有关,你如果有时间帮我分析一下,我可以把程序发给你。


菜鸟
2006-03-31 19:26:00     打赏
6楼

其实昨天给你发的例子是自己实现的一个SEMIHOSTING函数。象ADS提供的PRINTF等输入输出函数,都是SEMIHOSTING版本的,封装好了。你可以试一试写一个main函数,然后在main函数里面直接PRINTF.不过要PRINTF正常工作的话,需要设置$TOP_OF_MEMORY变量,$TOP_OF_MEMORY - 32K到$TOP_OF_MEMORY这段空间将被用作仿真器软件和DEBUGGER之间传送数据。STD VECTOR一般应该设置位0X8,这个是SWI的向量地址。在H-JTAG里面,默认用地址0X8,即使你设置0X0,H-JTAG用的还是0X8。

你把你的SWI程序发给我好了,我有空的时候帮你看。


菜鸟
2006-04-01 20:20:00     打赏
7楼
邮件已经发过去了,还有一些关于$top_of_memory的问题。谢谢!

共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]