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.

[参考译文] TMS320F28P650SK:CPU 落入非法 ISR 中

Guru**** 2782615 points

Other Parts Discussed in Thread: TMS320F28P650SK, TMS320F28374S

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1616233/tms320f28p650sk-cpu-falls-in-illegal_isr

器件型号: TMS320F28P650SK
主题: TMS320F28374S 中讨论的其他器件

您好、专家

我将 TMS320F28P650SK、CCS 12.8.1 与编译器 22.6.1 配合使用。

在我的工程中、一旦代码在控制器 ISR 中运行以进行 PWM 占空比计算、它就必定属于非法 ISR。 代码如下所示:

typedef 结构

{float32 alpha;  

float32 beta;  

float32 V 直流;  

float32 AAA;

float32 bbb;

void (*calc)();

}SVPWM;

typedef SVPWM *SVPWM_handle;

 

#define SVPWM_DEFAULTS{

0、

0、

0、

0、

0、

(void (*)(uint32)) svpwm_calc

}

void svpwm_calc (SVPWM_handle);

SVPWM svpwm_instance = SVPWM_defaults;

在控制器 ISR 中、通过函数指针调用计算 PWM 占空比、如下所示:

svpwm_instance.calc(&svpwm_instance);

CPU 将属于非法 ISR、我不知道如何对此问题进行调试。

所以我尽量不要使用函数指针调用和实现的方式  svpwm_calc  直接在中  

控制器 ISR、代码运行完全正确。

顺便说一下、代码从基于 TMS320F28374 的工程移植、并进行 PWM 计算

在 TMS320F28374s 项目中、使用函数指针调用运行没有问题。

感谢您的支持。

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

    谢谢你。 所以,你可以 根据你的经验分析我的问题的可能原因?我尝试不同的方式,我认为常见的原因,如栈溢出,未初始化的 PIE 矢量,缺失的 RamFuncs 副本不能在我的项目中发生。

     

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

    您可以尝试下面的步骤吗?

    • 验证函数指针初始化:  确保 svpwm_instance.calc 在 ISR 触发前分配给正确的函数地址。 空指针或未初始化指针会导致出现 ILLEGAL_ISR
    • 检查 svpwm_instance 生命周期:  确保 svpwm_instance 是全局或静态变量、并且未分配在可能清除或损坏的堆栈上。
    • 使用断点进行调试:   svpwm_instance.calc 行中放置一个断点。 单步进入调用、查看要分支到的地址是否有效。
    • 检查栈大小:  函数指针方法可能会使用更多的栈空间,导致栈溢出,从而触发 ILLEGAL_ISR。 增加堆栈大小。
    • 添加 volatile 关键字:  确保 svpwm_instance 就像 volatile 在代码中的其他位置修改一样进行声明。

    谢谢