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.

TMS320F280039C: 数据发生隐士转换时导致机器死机

Part Number: TMS320F280039C

Fullscreen
1
2
3
4
5
6
7
typedef long int32;
typedef int int16;
int32 llc_dbt_curr_comp = 79;
int16 s16LLC_Pr_PwmDeadTime =59;
s16LLC_Pr_PwmDeadTime = s16LLC_Pr_PwmDeadTime - llc_dbt_curr_comp;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

上述代码执行后,s16LLC_Pr_PwmDeadTime会发生溢出

并且有时候会出现死机现象导致看门口重启,请问这是为什么

  • 检查一下是不是减数和被减数搞反了,计算结果为负值了。

  • 可是s16LLC_Pr_PwmDeadTime本身是有符号的变量,范围为-32768-32767,这个也没有超出他的范围啊

  • s16LLC_Pr_PwmDeadTime是不是赋值到EPwmxRegs.DBRED.bit.DBRED寄存器了,寄存器不支持负数。

  • 后面有限幅会强制矫正

  • Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //int32 llc_dbt_curr_comp
    //int16 s16LLC_Pr_PwmDeadTime
    LLC_Modul.s16LLC_Pr_PwmDeadTime = (int16)(-(int32)LLC_Modul.u32LLC_PwmPeriod*(int32)LLC_Modul.u32LLC_PwmPeriod*(int32)LLC_Modul.u32LLC_PwmPeriod*0.000000364
    +(int32)LLC_Modul.u32LLC_PwmPeriod*(int32)LLC_Modul.u32LLC_PwmPeriod*0.0008
    -(int32)LLC_Modul.u32LLC_PwmPeriod*0.599+177);
    llc_dbt_curr_comp = (-(int32)LLC_Modul.u32LLC_PwmPeriod*(int32)LLC_Modul.u32LLC_PwmPeriod*(int32)LLC_Modul.u32LLC_PwmPeriod*0.00000021
    +(int32)LLC_Modul.u32LLC_PwmPeriod*(int32)LLC_Modul.u32LLC_PwmPeriod*0.0005
    -(int32)LLC_Modul.u32LLC_PwmPeriod*0.3821+94);
    llc_dbt_curr_comp = llc_dbt_curr_comp*abs(LlcSamplVal.s16LLC_BatCurr_Raw)/500;
    LLC_Modul.s16LLC_Pr_PwmDeadTime = LLC_Modul.s16LLC_Pr_PwmDeadTime - llc_dbt_curr_comp;
    //ccs
    //s16LLC_Pr_PwmDeadTime
    //s16LLC_Pr_PwmDeadTime
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    我绞尽脑汁也想不明白:(

  • 大佬有何高见,有什么可能会导致这个问题吗,这个Bug已经卡我几天了,发生问题时ccs提示如下

  • 妖怪的问题,之前也遇到过,按照经验,说几句可能没啥用的,仅供参考,排查

    1.你贴的这些所有代码,是放在哪儿,放在中断吗?放在cla里面吗?你有测试过语句执行时间吗?

    2.检查cmd文件空间定义是否有重复,或不连续的存在

    3.查: //程序运行到现在都没有任何问题,在ccs中观察值都在预期内,加入这句话后面的程序都不要,你编译下,看map文件,看是不是某块flash或ram空间,快接近了最大空间?即所剩不多?  

    4.增大heap stack空间大小

    5.关闭优化等级或增大优化等级,都试试

  • 再view->Memory Allocation检查一下Flash和RAM空间是不是快超了。

  • 好的,我一一试试

  • 多谢您的回复