请教一个问题 硬件: TI - TMS320C5502 编译器: CCS (2.21.00) 现象: 串口接收中断里面接受音频一WORD 串口发送中断里面发送音频一WORD 主循环里面进行音频算法的处理。
测试1,发现调用算法A时(大约执行算法A的过程中需要进入串口接受中断和串口发送中断各100次),如果中断里面有关于2个指针的比较,并且编译器优化 -o2,算法A就会执行错误,如果没有这些比较,同样使用-o2优化选项,算法A正常执行,怀疑和编译器有关,以为进中断时没有保存状态寄存器,察看关于串口中断部分的汇编,发现状态寄存器均保存了,后来把代码里面的关于指针的比较更换为一个计数器,程序正常,不解。 另外一个测试是,不优化时算法正确,-o2优化算法错误,察看2次的Map文件,发现内存的划分基本相同,不同的只是代码的大小发生了变化,而算法A在一个Lib库里面,它的大小是固定的。只可能是调用的地方或者中断影响的。 其他: 5502里面地址线24根。 并且里面存在Page的概念,指针的操作只能在同一个Page里面,一个Page的大小只能0x10000. DSP内部的寄存器很多只有23BIT。 问题: 中断能影响一段代码执行结果不同,除了退出中断时状态寄存器发生了改变,还能是什么?这个问题应该怎么继续查下去?
|