你好:
TMS320C66x DSP CPU and Instruction Set 文档
6.6.4 Traps 中说:
A trap behaves like an interrupt, but is created and controlled with software. The trap
condition can be stored in any one of the conditional registers: A1, A2, B0, B1, or B2. If
the trap condition is valid, a branch to the trap handler routine processes the trap and
the return
这句话中所说的 陷阱状态可以存储在任何一个条件寄存器中, 我想知道, 这个过程是如何实现的,从哪里可以知道陷阱的状态? 谢谢
James Li2:
其实trap类似一个条件跳转,只不过在条件跳转之前关闭了全局中断,使trap不被硬中断打断。trap返回的时候再恢复全局中断。
准确的说A0,A1,A2,B0,B1,B2存储的是触发trap的条件,条件成立就跳转到trap,否则就不跳转。
si cheng:
回复 James Li2:
你好:
假如我现在的应用程序只使用一部分存储空间,当程序跑飞后,PC指针可能会指向剩余的空间某个地址。然后剩余空间的地址存放的什么指令,对我来说是不清楚的,因此,必须设置一种保护机制,当程序跑飞到剩余空间的某个地址时,我想让程序进入死循环,请问这种方式该如何实现? 我想将剩余空间全部填充同一种指令,即跳转指令。剩余空间不能用多个指令组合完成同一个功能,比如死循环。因为加入死循环需要4个指令完成,那么当程序跑飞时,很有可能指向这个组合指令的最后一个,这样就不可能实现死循环功能。
不知道trap是不是和这一样,如果一样的话,实现这个trap也是需要多个指令完成的,因此,程序跑飞的时候也是存在只执行了trap组合指令的一部分,导致程序指针指向异常。 求解!!!!多谢!
James Li2:
回复 si cheng:
我觉得trap不适合你这种应用。
软断点指令可能比较合适。软断点指令是asm( “ SWBP 0”),当DSP core执行到这条指令的时候就会停下来。
这条指令的机器码是 0x3c6f,你可以把不用的nenory填充成这个值试试。
si cheng:
回复 James Li2:
你好:
这个这条指令是不是只能在c6678上用? 我手上现在有个项目关于c6701的,我想在c6701上实现这个软断点,不知道有什么指令可用?多谢!!!!
James Li2:
回复 si cheng:
c6701确实不支持SWBP指令。我对67系列处理器不熟悉。sorry!