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.

[参考译文] LAUNCHXL-F2.8377万S:Delay_US()在从闪存运行时导致非法ISR

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/572414/launchxl-f28377s-delay_us-leads-to-illegal-isr-while-running-from-flash

部件号:LAUNCHXL-F2.8377万S

您好,

我在F2.8377万s启动板中开发了一个应用程序,其中包括使用ADC进行数据采集。 从RAM运行时程序运行正常,但当我尝试从闪存运行时,程序陷入了“非法ISR”功能。 我尝试逐步执行该程序,当Delay_US(1000)在ConfigureADC()函数内运行时,就会出现此问题。  

有人可以建议解决方案吗?

谢谢。

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

    Delay_US()函数被分配给.TI.ramfunc部分。
    在执行此函数之前,您是否执行了"memcpy"将此函数从闪存复制到RAM?

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

    感谢您的快速响应。 我在main函数的开头添加了以下代码行:

    #ifdef _flash
    memcpy (&RamfuncsRunStart,&RamfuncsLoadStart,(size_t)&RamfuncsLoadSize);
    #endif

    我认为这就足够了。 我不确定如何具体地“memcpy”delay_US()函数。 如果我错了,请更正。

    此致,

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

    只要在执行分配给.TI.ramfunc部分的任何函数之前执行memcpy,就可以了。

    当您进入时,您是否在拆卸窗口中看到此功能的RAM中有效代码?

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

     您好,Vamsi:

    请查找附加的文件。 它是我的代码片段,带有反汇编窗口。 我不确定如何检查代码是否已加载到RAM中。 能否验证delay_US()是否已加载到ram中,请?

    谢谢。

    此致,

    LIJO

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

    您在输入RAM之前发送了屏幕截图。 进入该功能,它应该进入RAM。 在该RAM位置发送快照。

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

     您好,Vamsi:

    我确实进入了delay_US()函数,但它进入了非法的ISR函数。 请查找随附的屏幕截图。

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

    解决了! 问题是我没有任何“预定义符号”(“属性”-->CCS Build”-->C2000编译器-->“高级选项”-->预定义符号)可供#ifdef检查。 这意味着内部的"memcpy"

    #ifdef _flash
    memcpy (&RamfuncsRunStart,&RamfuncsLoadStart,(size_t)&RamfuncsLoadSize);
    #endif

    将永远不会运行,最终不会从闪存将DELAY _US复制到RAM。 所以我在预定义符号中添加了"_flash"并解决了问题。 再次感谢您的建议。