您好!
我正在使用 MSP430F5249进行调试。
我对断点有疑问。
1.在计时器中断的开头设置断点。
2.执行代码,代码将在计时器中断的开始处停止(在该断点被设定的位置)。
3.我在定时器中断内执行"单步进入"。
执行3次后、程序计数器会指出代码。
我 已确认流程1至4多次发生。
请告诉我 为什么在计时器中断执行"步入"时会发生4种现象。
谢谢、
科基
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.
您好!
我正在使用 MSP430F5249进行调试。
我对断点有疑问。
1.在计时器中断的开头设置断点。
2.执行代码,代码将在计时器中断的开始处停止(在该断点被设定的位置)。
3.我在定时器中断内执行"单步进入"。
执行3次后、程序计数器会指出代码。
我 已确认流程1至4多次发生。
请告诉我 为什么在计时器中断执行"步入"时会发生4种现象。
谢谢、
科基
您好!
>很遗憾,您的优化设置图片未显示。
→抱歉、优化设置如下。
>您的代码中是否使用了任何低功耗模式(LPMx)?
→是的、我在项目中使用 LPM3。
1.在 main (主函数)中输入 LPM3 ()
2.在定时器中断开始时从 LPM3更改为激活模式
3.在定时器中断中执行"单步进入"
4.当从定时器中断返回到主器件时、PC 显示的值不正确()
PC 显示的值不正确是否与 LPMx 相关?
>这可能会导致 CCS 中的调试问题,在这种情况下,器件进入睡眠状态,CCS 可能会错误地读取 PC。
>我建议在调试时以活动模式使用设备。
→是否有任何描述上述描述的文档?
如果没有、请告诉我有关上述内容的更多信息。
谢谢、
科基
您好、Koki、
您的答复的格式很难区分您的评论和我以前的评论。 请使用线程中的报价功能、以使所有内容更易于阅读。 单击"答复"后、突出显示上方的文本、此时将弹出一个"报价"图标。 单击该选项可插入突出显示的任何内容以插入报价。 我已经用您的最新评论完成了这项工作。
[引用 userid="465179" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1000714/breakpoint-in-timer-interrupt/3701119 #3701119"]抱歉,优化设置如下所示。很抱歉、您的图片未显示。 单击"答复"后、转到"插入">"图像/视频/文件">"上载">"(选择图像、最好是.jpg 或.png)">"确定"。
[引用 userid="465179" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1000714/breakpoint-in-timer-interrupt/3701119 #3701119"]它是否与 LPMx 相关,PC 显示的值不正确?[/quot]最有可能。 我强烈建议在一个激活的调试会话期间使用激活模式或者最坏情况、LPM0。 如果您使用的是 LPM3、则 SMCLK 将被禁用。 对于 LPM0、SMCLK 是可选的激活状态、这意味着如果有一个时钟请求、它将保持激活状态。
[引用 userid="465179" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1000714/breakpoint-in-timer-interrupt/3701119 #3701119"]是否有描述上述描述的文档?
如果没有、请告诉我有关上述内容的更多信息。
[/报价]您可以在用户指南的表1-2中找到操作模式。 了解工作模式非常重要、因为它们会影响系统时钟、这会影响调试。
抱歉、优化设置如下所示。
[引用 userid="216616" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1000714/breakpoint-in-timer-interrupt/3701285 #3701285">最有可能。 我强烈建议在一个激活的调试会话期间使用激活模式或者最坏情况、LPM0。 如果您使用的是 LPM3、则 SMCLK 将被禁用。 对于 LPM0、SMCLK 是可选的激活状态、这意味着如果有时钟请求、它将保持激活状态。[/引用]
当前 TimerB0时钟源为 ACLK。
从下表中可以看到、ACLK 在 LPM3模式下处于激活状态。
因此、我认为这次你说的不是真的。
就在这种情况下、我将 TimerB0的时钟源设置为 SMCLK、并使用 LPM0操作它、但发生了相同的现象(PC 显示的值不正确)。
我当前正在运行的程序的详细信息 如下。
整个程序由主程序()和定时器 B0中断组成。
■主()
重复 while (1)
进入 LPM3→无操作→ 进入 LPM3→无操作→……
μ■Timer_B0中断
进入激活模式 →将偏移添加到 TBCCR0→无操作→ 返回主()寄存器
它是重复 main ()→timerB0→main ()→timerB0 ()→....的源代码
这次、在转换到定时器 B0的时序上设置一个断点并执行"单步进入"。
然后、当从 Timer_B0 ()返回到 main ()时、PC 将显示一个不正确的值。
如果我不执行"step into (单步进入)"(按"恢复"按钮重新启动程序)、PC 将显示正确的值、程序将继续运行。
它与器件和程序无关、我认为这是 CCS 调试方法的问题、但我不确定原因。
最棒的
科基
优化看起来不错。 这可能是 CCS 问题或限制。 如果在 CCS 中禁用汇编步进时禁用中断、会发生什么情况? 此外、他们使用的是哪个版本的 CCS?
您好、James
[引用 userid="216616" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1000714/breakpoint-in-timer-interrupt/3703164 #3703164">如果在 CCS 中禁用汇编步进时禁用中断、会发生什么情况? [/报价]我在 CCS 设置中禁用了中断、但 PC 显示的值不正确(0x1C0B0)。
在正确的行为中、PC 返回到0x17f10。
[引用 userid="216616" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1000714/breakpoint-in-timer-interrupt/3703164 #3703164"]他们使用的是哪个版本的 CCS?
CCS 版本:10.2.0.00009。
谢谢、
感谢您提供这些详细信息。 我尝试使用 CCS v10.3和 MSP430F5529 LaunchPad 重复此问题。 我导入了 MSP430F55xx_TB_05.c 代码示例、该示例使用 ACLK 作为 Timer B 时钟源。 我在计时器 B0中断服务例程(ISR)的开头设置一个断点、然后运行代码。 在断点处、我单击"Step into (步入)"。 然后、我再次单击"Run"。 我反复地这样做、从未出现过问题。
我没有 MSP430F5249 器件、但请分享您的代码、以便尝试在 MSP430F5529上重现问题。
您好、James
我还有一个 MSP430F5529 LaunchPad。
因此、我使用 MSP430F5529 LaunchPad 验证了操作。
[引用 userid="216616" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1000714/breakpoint-in-timer-interrupt/3705373 #3705373 "]请共享您的代码,以便我可以尝试复制 MSP430F5529上的问题。这种情况并不总是发生、但当我多次验证操作时、出现了"PC 显示的值不正确"的现象。
我将附加源代码。
谢谢、
科基
您好、Koki、
此问题是由尝试单步执行 main()中的 LPM 条目(不是 exit)引起的。 如果您不这样做、则可以在代码的其余部分中单步执行、而不会出现任何问题。 相反,当到达 LPM 条目函数 SET_LPM_Mode()时,单击绿色和黄色的“运行”按钮进入 LPMx。
如果您遇到程序计数器指向未知或不需要的位置的情况、只需单击 Run 按钮、它应正确返回并继续。 这似乎表明当 CPU 进入睡眠状态时 JTAG 通信被中断或破坏。
您好、James
这只是调试方法的问题,对吧?
[引用 userid="216616" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1000714/breakpoint-in-timer-interrupt/3708432 #370842"]这似乎表示 CPU 进入睡眠状态时 JTAG 通信中断或损坏。如果您想了解有关上述内容的更多信息、如果有任何适用的文档、请告诉我。
谢谢、
科基
没错。 如果您删除了 LPM 并仅使用了活动模式、则不应出现此问题。
[引用 userid="465179" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1000714/msp430f5249-program-counter-is-corrupted-when-setting-breakpoint-in-timer-isr/3708740 #3708740"]如果您想了解有关上述内容的更多信息,并且如果有任何适用的文档,请告诉我。此行为看起来与 MSP430F5529器件的 EM13勘误表非常相似。 我将检查该勘误表是否适用于 MSP430F5249。 同时、我只需使用前面介绍的权变措施、或者在调试时切换到工作模式。
您好、James
[引用 userid="216616" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1000714/msp430f5249-program-counter-is-corrupted-when-setting-breakpoint-in-timer-isr/3709728 #3709728"]。 我将检查该勘误表是否适用于 MSP430F5249。实际上、要商业化的器件是 MSP430F5244。
在详细解释当前情况时、MSP430F5249和 MSP430F5244中会出现相同的现象。
因此、如果您不仅可以检查 MSP430F5249、还可以检查 MSP430F5244的勘误表、我将不胜感激。
谢谢、
科基
在详细解释当前情况时、MSP430F5249和 MSP430F5244中会出现相同的现象。
因此、如果您不仅可以检查 MSP430F5249、还可以检查 MSP430F5244的勘误表、我将不胜感激。
[/报价]是的、这并不奇怪、因为它们只是存储器变体。
我可以验证 F5529上是否存在 EEM13。 在具有 LPM3进入和退出的 CCS 项目中、我运行了代码、在 ISR 中放置了一个断点、代码在那里暂停、删除了断点、运行了代码、然后单击暂停。 PC 丢失。
他们可以在 F524x 上尝试此过程吗? 如果发生同样的情况、那么我怀疑这是同一个勘误表。 无论如何、我会鼓励您的客户继续进行软件开发、并且在调试时可能不使用 LPM。
您好!
[引用 userid="216616" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1000714/msp430f5249-program-counter-is-corrupted-when-setting-breakpoint-in-timer-isr/3711395 #3711395"]他们是否可以在 F524x 上尝试此过程? [/报价]是的、我们已确认。
F524x (F5244和 F5249)上的上述代码也证实了这一现象。
[引用 userid="216616" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1000714/msp430f5249-program-counter-is-corrupted-when-setting-breakpoint-in-timer-isr/3711395 #3711395"]我怀疑它是同一个勘误表。如果您可以确认该现象、是否计划发布勘误表?
[引用 userid="216616" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1000714/msp430f5249-program-counter-is-corrupted-when-setting-breakpoint-in-timer-isr/3711395 #3711395"]我鼓励您的客户继续进行软件开发,并且在调试时可能不使用 LPM。是的、我会告诉我的客户。
谢谢、
科基
您好、Koki、
感谢您的耐心等待。 我终于收到了 F5249样片、并找到了相应 的 MSP-TS430RGC64C 目标板。
最初、我能够使用客户的代码复制此问题。 但是、该行为与 F5529器件上的 EEM13勘误表相关的行为不一致。
深入了解、我 发现此问题的根本原因与 用于内在函数的预处理器宏有关。
#define set_LPM_Mode(x) __bis_SR_register(x) static const unsigned short SET_LP_MODE[5]={GIE, LPM0_bits|GIE, LPM1_bits|GIE, LPM2_bits|GIE, LPM3_bits|GIE}; #define LPM3_CLR() __bic_SR_register_on_exit( LPM3_bits )
在我删除这些宏并直接在代码中使用内在函数之后、我无法重现此问题。 如上所述、此问题的触发器是单步进入 LPM3进入功能、但现在可以完成此操作并且 PC 未损坏。 这里是我使用的代码。
#include <msp430.h> #define TB0_CNT (8192) /* 0.5sec = 8192 / 16384 */ int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer TB0CCTL0 = CCIE; // TBCCR0 interrupt enabled TB0CCR0 = TB0_CNT; // TB0_CNT / 32768Hz TB0CTL = TBSSEL__ACLK | MC__CONTINOUS | ID_1 | TBCLR; // ACLK, continuous mode while(1) { __bis_SR_register(LPM3_bits + GIE); // Enter LPM3, enable interrupts __no_operation(); // For debugger } } /* Timer0_B0 interrupt service routine */ #pragma vector = TIMER0_B0_VECTOR __interrupt void INT_Timer0B0ISR (void) { __bic_SR_register_on_exit(LPM3_bits); // Exit LPM3 TB0CCR0 += TB0_CNT; /* Add Offset to TBCCR0 */ __no_operation(); // For debugger return; }
此外、ISR 结束时不需要"返回"。
/* Timer0_B0 interrupt service routine */ #pragma vector = TIMER0_B0_VECTOR __interrupt void INT_Timer0B0ISR (void) { __bic_SR_register_on_exit(LPM3_bits); // Exit LPM3 TB0CCR0 += TB0_CNT; /* Add Offset to TBCCR0 */ __no_operation(); // For debugger return; }
请让您的客户在其设备上尝试此操作。 此外、请注意、由于没有支持该器件的目标板、我无法在 F5244上对此进行测试。 但是、由于这些器件非常相似(基本上是存储器变体)、因此两种器件的根本原因很可能相同。
请告诉我这是否能解决他们的问题。
您好、Koki、
感谢您确认这解决了他们的问题。 我不建议重新定义或重新声明任何原始内在函数。 您可以在《MSP430优化 C/C++编译器用户指南》的表6-5中找到所有 MSP430内在函数。
请将此主题标记为已解决。