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.

28377D CLA问题

第一,CLA中8个任务的优先级问题:

我在Cla1Task1-Cla1Task8分别编了8种数学运算。那么我在主程序里面执行的时候,如果我编写的是:

Cla1ForceTask5();

...

Cla1ForceTask1();

...

Cla1ForceTask3();

...

Cla1ForceTask2();

那么这8个task会按照我编写的顺序来进行吗,还是照样按照既定的优先级来运行?

第二,CLA中有很多集成在库里面的函数或者一些语句,比如__sqrt,__mdebugstop(),__mfracf32(),CLAexpTable,CLAINV1,CLAINV2,这些东西有pdf资料说明吗?我在官网找了好久都没有找到。。。

  • 你好,
    1、CLA的task是由中断触发的,也就是说,执行哪一个task主要是看哪个task被触发中断了。如果两个中断同时到来,那么是按task的优先级来运行,task1的优先级最高,task8的最低。
    2、你可以看下Wiki中的关于C2000 CLA Compiler的详细介绍:
    processors.wiki.ti.com/.../C2000_CLA_C_Compiler
  • 两种情况:
    如果我写的程序是Cla1ForceTask5andWait(),是不是就会像我原问题里面写的那样,按照main程序中编写的顺序来进行?
    但如果我写的程序是Cla1ForceTask5(),是不是main程序就不会等待CLA处理完当前的Task5,进而直接运行下面的Cla1ForceTask1(),Cla1ForceTask3(),Cla1ForceTask2(),当CLA处理完之后,会发现有3个任务等待执行,从而由优先级分配?

    如果是这样的话,我如果想严格按照main程序的顺序一个一个运行任务,是不是都要在后面加一个andWait?
  • 首先有一点上面提到的,具体先执行哪一个task,不是看你程序里面把哪个task先编写的,而是看触发的是哪一个task。比如task3先被触发了,那就是task3先执行,跟你编程的顺序无关。
    所以,如果你的中断是按照task5,1,3,2的顺序触发,那么,
    如果用Cla1ForceTask5andWait();这个语句的话CPU会等待task5执行完之后再去执行CPU任务,如果你设置的触发顺序是task1,3,2,那么就会按5132的顺序执行。
    如果用Cla1ForceTask5();的话CPU不会等待task5执行完就会去执行其他任务,当task5执行完之后,如果task5执行期间又有task1,3,2被触发了,那么就会按task优先级去执行。
    总结,如果要严格按照main程序的顺序一个一个运行任务,那么都要在后面加一个andWait,前提是你的task触发顺序也是5132的顺序。
  • 好的,谢谢你的耐心解答
  • 客气了,希望对你有所帮助