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.

TMS320F280049C: 使用內建的sinf的函式跑出來的結果有誤錯。(程式在CLA內執行)

Part Number: TMS320F280049C
  1. 芯片型号:F280049C
  2. (选填)CCS版本: Version: 10.3.1.00003 
  3. (选填)使用的套件名称:V21.12.0.STS

目前在CLA有使用sinf的函式,且且使用RAMPGEN_run產生sin波形。

在驗證波形的時候,發現產生出來的sin似乎有錯誤,

但觀察角度的資訊又沒問題。

我sin會丟到pwm的duty觀察。

下圖為用Dac打出來的sin波和更新到pwm的duty。會發現波形突然掉下一塊,並且看pwm的duty也有一樣的現象

下圖為角度資訊,角度為正常,但pwm仍然有異常duty發生。

因此才判定是否為sinf有關,是否能協助確認使用此函式有什麼需要注意而我沒注意到的?

  • 您好,我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • 您好,

    1)CLAmath 库提供了一个优化的汇编函数 CLAsin 和一个 C 代码函数 CLAsin_inline。 CLA 侧是使用哪一项来生成正弦波的? 

    2)正弦波是否在后台任务内生成? 

  • 1) 看起來是使用以下的函式在CLA

    #define sinf __relaxed_sinf

    __inline float __relaxed_sinf(float x)
    {
    return __sin(x);
    }

    2)此程式在CLA 的 Background Task執行。

  • 您好,

    有没有可能是processing之间的background task中断导致了该问题?您可以试下将background task更改为regular Task 8,然后看下是否出现相同的问题? 

  • 我使用cla1 task沒此問題發生。

    如果是background task的問題的話,那我在裡面的程式是否會有一樣的風險呢?

    目前cla background task的執行是正常的嗎?有任何限制嗎?

  • 好的感谢您提供的信息,我们跟进给工程师看下哈。

  • 您好,

    请问正常任务是否会中断后台任务并导致此问题?

    您可以尝试使用intrinsics来禁用 task preemption,并在执行关键代码后再次使能它。

    这些intrinsics可用于临时防止此类中断挂起后台任务:

    • __disable_interrupts();
    • __enable_interrupts();