【问题标题】:breakpoint inside interrupt C中断 C 中的断点
【发布时间】:2015-03-10 16:54:08
【问题描述】:

我正在使用 Texas Intruments 的 LCDK C6748 与 Code Composer Studio 和 TMDSEMU100V2U-14T - XDS100v2 USB JTAG Emulator。

LCDK 带有一堆支持函数,包括一个初始化板的函数并定义每个中断调用哪些回调函数。

我刚刚实现了回调函数,所以每当新样本来自 ADC 时,它都会执行一些操作。

我尝试在中断内设置断点,但在运行时程序“流程”没有到达那里。

此外,我做了一些更简单的事情:

volatile int flag = 0;


interrupt void interrupt4(void) // interrupt service routine
{
   flag = 1;
   return;
}

int main(){
    // board initializing function, defining sampling rate etc.
    L138_initialise_intr(FS_48000_HZ,ADC_GAIN_0DB,DAC_ATTEN_0DB);

    while(1){
       if (flag == 1){
          printf("interrupt entered");
          flag = 0;
       }
    }
}

但由于某种原因,while循环只输入了一次。

这让我很惊讶,因为如果我不设置断点,就会连续输入中断- 我试图将样本传递到扬声器线路,而不做任何其他事情,然后我听到了音乐。

我觉得我错过了一些关于中断的基本知识,我对这个主题很陌生。

有人可以向我解释一下[或将我链接到解释该机制如何在 DSP 中工作的好资源]:

1) 为什么我们不能在中断中设置断点?

2) 为什么即使我在 main 中设置断点,似乎中断也没有发生,如果我不这样做。

3) 在 CCS 中,我必须通过哪些方式在运行时访问变量?

谢谢

【问题讨论】:

  • 对我来说显而易见的是,在程序执行期间,鉴于flag == 1 为真,您应该进入while 循环。那么我的问题是你确定volatile int flag 的范围确实是全球性的吗?您是否验证过执行流程总是从L138_initialise_intr返回?
  • 回调实现和 main 都在同一个 .c 文件中,并且声明了标志: volatile int flag=0;在它的头上
  • 您可以发布回调的相关部分吗? (如果不是太大,则全部)在设置flag = 0;之前可能会返回错误条件。这就是为什么你永远不会在main() 中输入while(...) 的原因。
  • ISR 中的断点 - 请参阅上一个问题 stackoverflow.com/questions/325718/…
  • 你清除中断源了吗?不在你的例子中。根据中断是电平触发还是边沿触发,这将影响它是连续调用还是一次调用。

标签: c embedded interrupt texas-instruments code-composer


【解决方案1】:
  1. 尝试放置断点然后运行。看看它是否至少命中一次。如果是这样,那么您的中断源不会自动清除[因为您没有在 ISR 中明确这样做]。根据我的经验,在 TI 控制器中,他们希望您清除 ISR 路径以接收下一个。
  2. 如果您甚至没有收到第一次中断,请检查为 ISR 生成的程序集和编译器完成的优化。

  3. 虽然,您可能需要稍后查看时间和全局变量保护,以防发生冲突,但目前以上 2 条建议应该可以。

【讨论】:

    【解决方案2】:

    我认为您的中断是定时器中断。在很多情况下,jtag 触发断点时,会停止很多 MPU/DSP 模块,但定时器会继续运行。这会导致定时器溢出,这意味着设置了溢出标志,并且在标志复位之前永远不会调用中断。

    我不知道你是否可以设置 jtag 在触发断点时也停止计时器。使用飞思卡尔 MPU、IAR IDE 和 segger jtag 我可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      相关资源
      最近更新 更多