打印

关于TMS320C5502中断中使用指针的错误。

[复制链接]
1811|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jkeqiang|  楼主 | 2008-4-23 22:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 请教一个问题
 
 
 
硬件:  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。
问题:
  中断能影响一段代码执行结果不同,除了退出中断时状态寄存器发生了改变,还能是什么?这个问题应该怎么继续查下去?

相关帖子

沙发
zgl7903| | 2008-4-24 09:03 | 只看该作者

个人见解

先直接受数据,满帧了以后关闭串口(禁止中断),使用两种算法看看是否会出错?

5502没详细看过,如果有收发FIFO最好打开FIFO
可以减少数据丢失的概率

使用特权

评论回复
板凳
jkeqiang|  楼主 | 2008-4-24 09:40 | 只看该作者

to zgl7903

音频数据不能关,关了就没有中断了,没有中断的影响算法肯定就OK了。
因为曾经让中断函数什么都不干直接返回测试过,没有问题,肯定是中断影响的。

使用特权

评论回复
地板
zgl7903| | 2008-4-24 14:04 | 只看该作者

那有可能是中断程序中使用的寄存器没有保护好

执行错误是什么错误呢?把错误原因找出来

使用特权

评论回复
5
jkeqiang|  楼主 | 2008-4-24 21:06 | 只看该作者

to lou shang de

执行错误指的是FFT算错了。
而不是程序跑飞。

程序流程依然正确。

注视掉中断里面的关于指针的比较,就OK了,奇怪啊

使用特权

评论回复
6
zgl7903| | 2008-4-25 08:52 | 只看该作者

看看编译后的交叉汇编文件,

看看中断程序入口有没有寄存器保护过程
指针操作一般会被优化成寄存器操作,(因为可以并行操作)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

237

主题

313

帖子

2

粉丝