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.
工具/软件: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; //溢出 中断; }
[引用 user="Sean Kramer">同样、除非设备断开连接并重新连接到 USB、否则设备不会按预期运行。 根据 提供的代码、每秒应发生多个中断、从而使 LED 快速切换。 一旦程序运行、在器件断开连接并重新连接之前、器件上不会发生任何情况
我只想确认我正在正确运行测试用例。 当我加载程序时、我位于 main。 当我执行程序时、我看到 LED 快速切换。 我假设代码/器件运行正常。 然后、当我在第25行设置断点时、调试器会立即在那里停止(如我之前的帖子中的屏幕截图所示)。 这是正确的吗? 我不需要断开/重新连接到 USB。
[引用 user="Sean Kramer">您是否知道为什么启用配置文件时钟会导致调试器无法正常工作、或者为什么在低功耗模式下且启用配置文件时钟时无法单步执行代码、 但是、在低功耗模式下、在禁用系统配置时钟的情况下可以单步执行吗?[/引用] MSP430器件系列包含一个具有不同功能的嵌入式仿真模块(EEM)。
MSP430F2274.xml 器件文件指定了 EMM 的类型"EMEX_LOX"。 通过查看 slac460y 中的 MSP430调试堆栈源代码、类型 为 EMEX_LOW ( 在源代码中称为 EmSmall)的 EMM 没有硬件周期计数器。
我想、当您尝试在 MSP430器件上启用系统配置时钟时、例如 MSP430F2274、它没有硬件周期计数器、调试器必须一次单步执行一条指令来测量系统配置时钟。 这会显著减慢程序的执行速度、并可能在代码处于低功耗模式时导致问题。