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

首先附上CCS自带的DSP/BIOS例程 tsk example:

#include <std.h>

#include <log.h>
#include <tsk.h>

#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。以此类推,就可以得到前面输出的结果了。

猜你喜欢

转载自blog.csdn.net/m0_37765662/article/details/80238415