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.

TMS320C6748: sys/bios中,动态创建task与静态的有什么差别?

Part Number: TMS320C6748


Int main()
{ 
    /*code block 1 -- begin*/
    Task_Handle usbtask;
    Task_Handle revtask;
    Task_Handle tmxtask;
    /*code block 1 -- end*/
    
    Error_Block eb;

    System_printf("enter main()\n");


    Error_init(&eb);
    
    /*code block 2 -- begin*/
    usbtask = Task_create(usbTaskFxn, NULL, &eb);
    revtask = Task_create(revTaskFxn, NULL, &eb);
    tmxtask = Task_create(tmxTaskFxn, NULL, &eb);
    /*code block 2 -- end*/
    
    if (usbtask == NULL||revtask == NULL||tmxtask == NULL) {
        System_printf("Task_create() faileds!\n");
        BIOS_exit(0);
    }

    Task_Stat statbuf; /* declare buffer */
    Task_stat(Task_self(), &statbuf); /* call func to get status */
    if (statbuf.used > (statbuf.stackSize * 9 / 10)) {
     System_printf("Over 90% of task's stack is in use.\n");
    }

    BIOS_start();    /* does not return */
    return(0);
}

以上是main函数部分, 里面标记的code1和code2是动态创建

var task0Params = new Task.Params();
task0Params.instance.name = "usbtask";
task0Params.stackSize = 20480;
Program.global.usbtask = Task.create("&usbTaskFxn", task0Params);

var task1Params = new Task.Params();
task1Params.instance.name = "revtask";
task1Params.stackSize = 10240;
Program.global.revtask = Task.create("&revTaskFxn", task1Params);

var task2Params = new Task.Params();
task2Params.instance.name = "tmxtask";
task2Params.stackSize = 10240;
Program.global.tmxtask = Task.create("&tmxTaskFxn", task2Params);

以上是cfg设置task部分

#1 把code1和code2注释掉,if判断是否创建成功那里是会报错的,所以静态创建是在BIOS_start()后才开始的?

#2 如果两种如果同时存在会冲突吗?

#3 那静态创建如何判断创建成功呢?能把if写在cfg中吗?还是写在idle task里?