3

使用 Atmel Studio 6.2.1563,为 ATXMEGA64A3U 创建了一个 GCC C++ 可执行文件。设置定时器 TCC1 每 1 毫秒产生一次溢出中断。但编译器似乎忽略了 ISR 定义。

ISR(TCC1_OVF_vect)
{
      Cyclic_Do();
}

在调试模式下,我看到定时器运行正常,并且设置了 OVF 中断标志​​,但我无法将控制权传递给我的服务程序。

IDE消息:The breakpoint (the one I set inside ISR function) will not currently be hit. Unable to set requested breakpoint on Target.

还尝试using extern "C" { }了相关的 c 文件包含。如果我尝试使用任何其他计时器,也会出现同样的问题。

打开以征求建议。

4

2 回答 2

0

最终使它起作用的似乎是将 ISR 移动到不同的文件。但奇怪的是,我不必使用声明:使用 extern "C" 使其工作,即使源文件是 .cpp。

希望这有助于其他人尝试在 atmel AT/Xmega 控制器上设置 C++ 构建。

请注意,atmel 支持也有效,我确实收到了 atmel 对我的 atmel 工作室相关问题的回复。

于 2015-03-24T00:48:00.830 回答
0

我遇到了同样的问题,但我遇到了一个比将 ISR 移动到不同文件更令人满意的解决方法。

在我的情况下,标志位已设置,但我的 ISR 也没有被调用。全局和每个优先级和 UART 外设都启用了中断。我正在使用 Atmel Studio 7 SMART 代码生成工具。

在 START 工具的 PMIC 选项卡中取消选中“IVSEL:中断向量选择”后,我能够在 ISR 中命中断点。似乎这类问题可能有很多可能的原因,但我没有发现其他人写信检查 IVSEL 位。

我想 SMART 工具可能(理想情况下应该)仍然生成可以与这个位集一起使用的代码,但我不需要这个函数,所以我很高兴让这个谜团消失。

于 2018-02-02T02:05:38.230 回答