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.

官方PID控制的汇编代码如何“inline”到cla背景任务?

Other Parts Discussed in Thread: C2000WARE

在CLA背景任务中使用PID控制函数 DCL_runPI_L2 并打开 --opt_level:1

CCS报错:

#99923 "../cla_ex4_pwm_control_cla.cla", line 533: CLA does not permit function calls in background tasks. Try inlining function.

在cla文件加入

#pragma FUNC_ALWAYS_INLINE(DCL_runPI_L2)之后也没有任何作用

工程设置也没有disable inlining,是哪里还需要设置吗?

  • 软件环境:ccs1030 ,C2000Ware_3_04_00_00,C2000Ware_DigitalPower_SDK_3_02_00_00

    硬件:launchxl 280049c

  • shu hai feng 说:

    在cla文件加入

    #pragma FUNC_ALWAYS_INLINE(DCL_runPI_L2)之后也没有任何作用

    是否有什么编译错误等?DCL_runPI_L2函数您是定义在哪里?

    您可以参考我之前的链接

  • 参考了一下之前的解决方案,我的工程已经打开了优化 __opt_level:0,1,2,3,4都试过

    错误如下:
    #99923 "../cla_ex4_pwm_control_cla.cla", line 532: CLA does not permit function calls in background tasks. Try inlining function.

    DCL_runPI_L2 是在官方控制库(DCLCLA.H)里面定义的:
    extern float32_t DCL_runPI_L2(DCL_PI_CLA *p, float32_t rk, float32_t yk);

    控制库路径:D:\ti\c2000\C2000Ware_DigitalPower_SDK_3_02_00_00\c2000ware\libraries\control\DCL\c28\include

    具体的函数实现在:
    D:\ti\c2000\C2000Ware_DigitalPower_SDK_3_02_00_00\c2000ware\libraries\control\DCL\c28\source 目录下的:DCL_PI_L2.asm
  • 若是可以的话,请您私信一下工程,我们来具体看一下,谢谢
  • 我试了一下下面的配置,是可以编译成功的

  • 谢谢解答。

    但是不开优化的话,CPU里面的程序执行时间几乎翻倍,这个也不可能使用的。

    如下图:

    cycle_统计了CPU程序执行的时钟周期数,cycle_max2 为最大执行周期数 , cycle_avg2为平均执行周期数

    可以看到不开优化执行时间几乎是开优化之后的2倍,而且代码尺寸也会变大30%。

    开优化CPU环路执行时间:

    不开优化CPU环路执行时间:

    或者换一种思路:

    1.设置CPU代码和CLA代码的优化。

    2.手动在C文件里面添加一段汇编函数,这个是否有官方例程?

  • 抱歉,之前漏掉了您的回复。请问现在问题解决了吗?
  • 暂时还没有解决。现在只能不开优化,但是程序执行时间几乎翻倍。

    问下,开优化之后在CLA background task里面不允许call是基于什么考虑的?试过把background task 的“background”声明去掉,开优化也能编译成功,不知道这样会有什么风险?
  • shu hai feng 说:
    问下,开优化之后在CLA background task里面不允许call是基于什么考虑的?

    这个问题建议您去英文论坛咨询一下相关专家

    shu hai feng 说:
    试过把background task 的“background”声明去掉,开优化也能编译成功,不知道这样会有什么风险?

    “background”声明去掉的话,就相当于是task8了,因为两者使用相同的trigger source。这样就没有一直在后台运行的任务了

  • 只是把这个声明去掉,这个任务的地址依然是分配给背景任务,并非task8 .也就是说背景任务使用了一个没有声明为"background"的任务,不确定这样这个包含call的任务运行的时候被打断会发生什么。
  • 请问英文论坛在哪里添加公司邮箱?

    To post on TI E2E™ design support forums, you must have a valid company email address in your myTI account. If you have a valid company email address, please add it to your account by following the instructions in the myTI account FAQ (Note: there may be an ~10 minute delay for this email change to propagate to all necessary systems). If you don’t, we encourage you to search the TI E2E design support forums for existing answers.
x 出现错误。请重试或与管理员联系。