DSP

TMS320C6474学习总结(四)----DSP/BIOS自带例程 Tsk example 详解

2019-07-13 10:17发布

首先附上CCS自带的DSP/BIOS例程 tsk example: #include #include #include #include "tskcfg.h" #define NLOOPS  5 Void task(Arg id_arg);  /* Function for tasks created with Config Tool */ /*  *  ======== main ========  */ Void main() { } /*  *  ======== task ========  */ Void task(Arg id_arg) {     Int     id = ArgToInt (id_arg);     Int     i;          for (i = 0; i < NLOOPS ; i++) {         LOG_printf(&trace, "Loop %d: Task %d Working", i, id);         TSK_yield();     }     LOG_printf(&trace, "Task %d DONE", id); } 程序运行结果为:     个人对程序流程的理解: 首先我们先看下建立的四个任务线程 这四个任务线程的优先级是相同的,因此其执行顺序就是哪个任务先建立就先执行哪个任务,任务执行顺序也就是:task0->task1->task2。现在我们来看下程序的任务语句: Void task(Arg id_arg) {     Int     id = ArgToInt (id_arg);     Int     i;          for (i = 0; i < NLOOPS ; i++) {         LOG_printf(&trace, "Loop %d: Task %d Working", i, id);         TSK_yield();     }     LOG_printf(&trace, "Task %d DONE", id); } 程序执行到 for 语句时,第一次先打印出 Loop 0:Task 0 working。紧接着遇到TSK_yield 函数,这里解释下 TSK_yield 函数的作用:TSK_yield函数可以把程序的控制权转给相同级别的下一个任务,也就是说打印完第一句话后程序的控制权交给了task 1了,程序就会重新调用task函数,故会输出Loop 0:Task 1 working。紧接着下一次切换到任务2,输出oop 0:Task 2 working。紧接着又会进行一次任务切换,输出Loop 1:Task 0 working。以此类推,就可以得到前面输出的结果了。