This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430F2274:如何确认调试器可以到达#pragma INTERRUPT 函数中的断点?

Guru**** 2235160 points
Other Parts Discussed in Thread: MSP430F2274
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/699172/ccs-msp430f2274-how-to-confirm-that-debugger-can-reach-breakpoint-in-pragma-interrupt-function

器件型号:MSP430F2274

工具/软件:Code Composer Studio

一直在尝试为 MSP430F2274器件调试一个简单的示例程序。 该示例在连续模式下使用 timerA、并在发生中断时(TAIV = 10时为 a.k.a)切换和 LED。 在`interrupt void Timer_A (void)`函数内、我已经在一个 switch 语句中设置了一个断点、该语句根据 TAIV 的值选择要执行的运算。 当进入调试模式时、程序永远不会在断点停止、这使得它看起来永远不会达到中断。 查看寄存器后、我可以根据 TAIV 寄存器中的变化确认是否发生了中断。 是否可以在中断函数中设置断点? 如果是、是否有理由说明为什么在我的调试会话期间不会触发该中断? 如果不是、是否有另一种调试方法来确认已到达 ISR? 理想情况下、如果 ISR 可以分步执行、它将对使用此器件的未来项目工作更有帮助。

此外、一旦从调试器运行程序、在器件断开连接并重新连接到电源之前、不会执行预期的功能。 问题是、当从 USB 断开连接时、调试器停止工作、因为它不再具有可用于调试目的的器件。 发生这种情况是有原因的、还是所有 MSP430器件都存在这种情况? 如果没有、是否有任何选项可更改、以便在调试器开始运行后使器件正常工作、而无需断开/重新连接它?  

代码:

#include 

int main (void)
{
WDTCTL = WDTPW + WDTHOLD; //停止 WDT
P1DIR |= 0x01; // P1.0输出

TACTL = tassel_2 + MC_2 + TAIE; // SMCLK、contmode、interrupt

__bis_SR_register (GIE); //为

(;)输入 LPM0并中断;
}

// Timer_A3中断矢量(TAIV)处理程序
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=TIMERA1_vector
__interrupt Timer_A (void)
#elifed
(__TI_RA1_)(void)(void Timer_A (void)(void)(timer_a!(void)(tom_priter_prateger_)(void)(t1)(void)(t1)(ten_transl_ timer_a


#endif
{
switch (TAIV) //高效的开关实现
{
案例2:
中断; //未使用 TACCR1
案例4:
中断; //未使用 TACCR2
案例10:
P1OUT ^= 0x01; //溢出
中断;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Sean、

    感谢您提供测试案例。 非常有帮助、非常感谢。

    我在第25行设置了一个断点、当我运行程序时、该断点肯定会被触发。 您能否提供 CCS IDE 的屏幕截图? 我想具体查看编辑器边距、相应的"Disassembly"视图以及整个"Breakpoints"视图中设置的断点。 如下所示:

    谢谢

    Ki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我在 CCS 中的工作区图像。 同样、除非断开设备连接并重新连接到 USB、否则设备将不会按预期运行。 根据 提供的代码、每秒应发生多个中断、从而使 LED 快速切换。 一旦程序运行、在器件断开并重新连接之前、或者在调试器停止后(通过按下工具栏中的停止图标)、器件上不会发生任何情况。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Sean Kramer">同样、除非设备断开连接并重新连接到 USB、否则设备不会按预期运行。 根据 提供的代码、每秒应发生多个中断、从而使 LED 快速切换。 一旦程序运行、在器件断开连接并重新连接之前、器件上不会发生任何情况

    我只想确认我正在正确运行测试用例。 当我加载程序时、我位于 main。 当我执行程序时、我看到 LED 快速切换。 我假设代码/器件运行正常。 然后、当我在第25行设置断点时、调试器会立即在那里停止(如我之前的帖子中的屏幕截图所示)。 这是正确的吗? 我不需要断开/重新连接到 USB。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    BTW -我正在使用 eZ430-RF2500T

    www.ti.com/.../ez430-rf2500t
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、没错、我也在使用 EX430-RF2500T 连接。 正如您之前所写的那样、代码应按您所述的方式工作。 我的问题是、除非器件断开连接、然后重新连接或调试器停止、否则器件无法正常工作。 第25行的断点也不会被命中、并且运行计时器的时钟的运行速度也不会像应该的快(例如、达到 TAR 值0xFFFF 需要1分钟以上)。

    是否需要从器件管理器窗口(顺便运行 Windows 10)更新 MSP430应用 UART? 我提出的原因是、在 MSP430F2274器件无法与 UART 通信的另一个问题上、我在另一个站点上读取了需要更新的器件驱动程序。 这可能不是必需的、但只想要求确保。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     这里是从 CCS 获取的一个图像、请注意、达到这一点需要花费近6亿个时钟周期、虽然 TAIV 寄存器中的值为"0xA"、但跳转跳过了 ISR、LED 未切换、 并且未达到断点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sean -如果未启用配置文件时钟、是否存在相同的问题(未达到断点)?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还会得到 eZ430-RF2500T 的各种 USB 枚举问题。 我已将其连接到 USB 集线器。 现在、我直接连接到我的机器、虽然我还没有测试过这么长时间、但它的行为似乎更好
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的建议、因为它解决了我的问题。 您是否知道为什么启用系统配置时钟会导致调试器无法正常工作、或者为什么在低功耗模式下无法单步执行代码、并且系统配置时钟已启用、但在低功耗模式下禁用系统配置时钟时可以单步执行?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    MSP430具有有限数量的硬件断点仿真资源。 我相信只有2个可用。 因此、如果您已经设置了2个硬件断点、则无法再设置任何其他断点。 您也不能单步执行、因为单步执行需要设置硬件断点。 除了单步执行、还有其他调试器操作将使用硬件断点资源。 一个是配置文件时钟。 另一个是标准 C I/O 如果您将调试器设置为在退出点停止、则会使用另一个断点等

    Ki
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Sean Kramer">您是否知道为什么启用配置文件时钟会导致调试器无法正常工作、或者为什么在低功耗模式下且启用配置文件时钟时无法单步执行代码、 但是、在低功耗模式下、在禁用系统配置时钟的情况下可以单步执行吗?[/引用] MSP430器件系列包含一个具有不同功能的嵌入式仿真模块(EEM)。

     MSP430F2274.xml 器件文件指定了 EMM 的类型"EMEX_LOX"。 通过查看 slac460y 中的 MSP430调试堆栈源代码、类型 为 EMEX_LOW ( 在源代码中称为 EmSmall)的 EMM 没有硬件周期计数器。

    我想、当您尝试在 MSP430器件上启用系统配置时钟时、例如 MSP430F2274、它没有硬件周期计数器、调试器必须一次单步执行一条指令来测量系统配置时钟。 这会显著减慢程序的执行速度、并可能在代码处于低功耗模式时导致问题。