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.

[参考译文] AM6442:使用仿真器进行调试时、工程运行不正确

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1520328/am6442-project-run-incorrect-when-debug-with-emulator

器件型号:AM6442
主题:AM6421中讨论的其他器件

工具/软件:

您好、

我使用的是 AM6421。 使用仿真器进行调试时、有时软件触发的 ISR 无法正确触发。

发生这种情况时、需要关闭并打开控制板的电源、重新连接目标、重新加载 sciclient、重新加载工程、然后可以正确触发软件触发的 ISR。

我的问题是:

1、是什么导致软件触发的 ISR 无法正确触发?   

2、如何解决问题?  关闭电源并打开电源、重新加载 sciclient 不是一种有效的方法。

谢谢!

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

    您好、

    您能否确认是否已在 MCU PLUS SDK AM64x 上确定基准?

    此致、

    Vaibhav

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

    尊敬的 Pian:

    请告诉我们所使用的 MCU+SDK 版本。

    还要告诉我们您使用的是哪个示例?

    此致、

    Tushar

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

    尊敬的 Tushar:

    SDK 版本为10.0.0.20。

    SDK 中不包含测试工程。

    在测试项目中、配置了2个中断、ISR1是计时器 ISR;ISR2是基于 interrupt_profiling 示例的软件触发 ISR;ISR2是在 ISR1中触发的软件;ISR1优先级为2、ISR2优先级为4;

    该工程在 R51_0内核 nortos 上运行;

    ISR1似乎始终正常工作;

    ISR2的 BUR、有时 ISR2可以正确触发、有时无法正确触发; 需要关闭并重新启动整个系统才能正确触发 ISR2。

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

    尊敬的 Pian:

    请告诉我们 ISR2是否从 ISR1触发? 您是否使用嵌套中断?

    ISR2应该怎么做? ISR2在多少个中断停止触发之后呢?

    如何验证 ISR2是否未触发?

    此致、

    Tushar

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

    尊敬的 Tushar:

    ISR2由 ISR1触发、使用嵌套中断、如 SDK interrupt_profiling  示例中所示、

     ISR2中有一个来自 CNT 的值的 CNT 可以验证是否未触发 ISR2。

    谢谢你。

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

    尊敬的 Pian:

    您能否提供示例代码以在我们最后重现问题?

    此致、

    Tushar

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

    尊敬的 Tushar:

    很抱歉、我无法提供测试项目的源代码。 但 ISR1和 ISR2如下所示。

    ISR1是计时器触发的、配置如下:

    void main()

      init();

      HwiP_Params_init (&hwiParams);
      hwiParams.intNum = PING_INT_NUM;
      hwiParams.priority = 6;
      hwiParams.callback = ISR2;
      HwiP_construct (&gPingHwiObj、&hwiParams);
    }

    void ISR1 (void * args)

      cnt1++;
      IF (cnt1 =200)
     {
       HwiP_POST (PING_INT_NUM);
       cnt1 = 0;
     }
      func1();
    }


    使 ISR2失效(void)

      cnt2++;
      func2();

    }

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

    尊敬的 Pian:

    我可以看到您使用的是高优先级的 ISR1和优先级较低的 ISR2。

    这不是生成嵌套中断的正确方法。 从 ISR1生成的 ISR2的优先级应高于 ISR1。

    请提高/调整 ISR 的优先级、并告知我们结果。

    此致、

    Tushar