我有几个关于swi的问题,请大家帮助解释一下:
1。关于swi指令:我用ADS的armul软件仿真时,swi 0x0执行时ADS转到04未定义指令处,而不是08地址上。???
2。用zlg的做了一个有swi中断的实验,到swi处没有报未定义指令,但是也没跳到08地址上,而是直接过去了。从寄存器上看,指令已经执行完了(管理模式下的寄存器发生改变)。我是单步执行,为什么没有看见跳转到swi中断的ISR处???
3。利用swi 0x123456(0xab)如何使用半主机功能,请教???
我在08处设置断点,可以追到swi指令的跳转过程。
分析原因可能是用的lpc2210无片内flash,程序加载到片外ram中(地址0x80000000)。由于lpc2210的重映射机制,将0x80000000地址上的中断向量表映射到0x0处,swi指令运行后跳到0x8,此时只能看见反汇编代码没有源文件(0x0处没有代码),再经过08处的跳转到swi的ISR处,此时就可以看见源文件代码,程序继续执行。
我想如果在08处不设置断点,由于在08处没有实际的代码,所以直接跳过去了。
关于半主机的设置方法,请发到我邮箱:wheels@35.com
[em17]To twentyone:感谢!看完你给例子后,基本清楚了semihosting的用法,但是像printf的使用,以及变量$TOP_OF_MEMORY的设置方法,还是不知道。能否再讲解讲解,最好是给我一个例子,多谢!还有semihosting mode中std vector是指什么,我设置成0x0或是0x8都可以正常使用semihosting,正常是否应该设置为0x8?
另外,swi指令在ADS中的跳转,我试写了一个完整的例子,发现swi能够正常跳转,但是不知道什么原因导致两者之间不同跳转?我觉得可能跟程序有关,你如果有时间帮我分析一下,我可以把程序发给你。
打赏帖 | |
---|---|
分享一种检测按键状态的方法被打赏20分 | |
周末总结一下,STM32C0系列的开发经验被打赏50分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下定时器配置被打赏20分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下PWM配置被打赏20分 | |
【Cortex-M】Systick Timer使用被打赏10分 | |
分享汽车防盗系统的组成与分类(一)被打赏5分 | |
VOFA+波形显示+JYD-31蓝牙发送和解析不定长数据被打赏10分 | |
【换取手持数字示波器】-STM32F4PWM控制LED灯管亮度被打赏22分 | |
【换取手持数字示波器】STM32F4驱动RPR-0521RS照度、接近一体型传感器被打赏23分 | |
宏定义和const关键字定义被打赏5分 |