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.

[参考译文] 编译器/TMS320F2.8377万S:通过绝对地址调用函数时出现非法中断

Guru**** 2485015 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/643144/compiler-tms320f28377s-illegal-interrupt-when-call-a-function-by-absolute-address

部件号:TMS320F2.8377万S

工具/软件:TI C/C++编译器

您好,  

客户在通过绝对地址调用功能时遇到一个非法中断问题。 对此问题有何评论? 非常感谢。

它们的代码A/B/C保存在三个不同的闪存地址中。  

A是具有C2000外设驱动器的入口点。  

B是电机控制代码,具有多种功能。

C是应用程序代码,具有多个函数。  

创建了两个CCS项目,A+B为项目1,C为项目2。 或A+C为项目1,B为项目2。 它们单独编程为闪存。 编译器既是6.2 ,又是SAVE,优化除外。  

系统复位后,A将通过绝对地址从B和C调用功能。   

问题如下所示:  

    优化      
项目1. A+B O3. A成功调用B的函数
项目2. C O3.      
   
项目1. A+C O3. A调用B的函数,发生非法中断
项目2. B 禁用      
   
项目1. A+C 禁用 A调用B的函数,发生非法中断
项目2. B 禁用      
   
项目1. A+B 禁用 A成功调用B的函数
项目2. C 禁用      

我想,如果这是因为长支路。  

他们使用这种结构2年。 这是第一次出现此问题。 代码B中实施了几项新的改进  

Br,Jordan

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

    请显示源代码以及其他相关详细信息,以了解如何在绝对地址调用函数。

    谢谢,此致,

    -George

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

    George,

    复位后,代码A工作。 它初始化外围设备并通过绝对地址调用两个函数。 这两个函数位于代码B和C中

    这些功能的地址如下:

    代码A位于:

    重置后,代码A (flash_public) 调用M_INITFUNC_ADDR(),发生非法中断。 我们在非法ISR中停止了代码和PC。

    再次恢复,几次后,我们发现PC将在引导ROM中进入3FE468。

    非常感谢。

    Br,Jordan

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

    e2e.ti.com/.../Illegal.docxAs图片未显示,请在此处附加。

    Br,Jordan

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

    我考虑了Absolute函数调用可能被错误处理的可能性。  我编译了一个小测试用例,我看到生成了这个汇编代码...

    MOVL XAR7,#54.0928万
    LCR * XAR7. 

    这在所有条件下都有效。  确保您的绝对函数调用使用LCR指令。   

    当您更改优化时,问题的出现和发生... 我怀疑问题一直存在。  但它对按特定顺序或类似顺序使用的内存位置很敏感。  更改优化会导致以不同的方式使用内存,从而隐藏或暴露问题。

    谢谢,此致,

    -George