Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Запуск нескольких задач


Автор: mrprim 8.8.2016, 17:25
Работаю на камне ti cc2650em
Есть класс 123.c 
в нём 2 задачи переключающиеся по вызову семафора, пример:
Код

#define TASKSTACKSIZE   768
Task_Struct task0Struct, task1Struct;
Char task0Stack[TASKSTACKSIZE], task1Stack[TASKSTACKSIZE];
Task_Handle uartTask, vmTask;
Semaphore_Struct sem0Struct;
Semaphore_Handle vmSem;


Void uartFxn(UArg a0, UArg a1){
    uint32_t i = 0;

        while(1){
         System_flush();
         System_printf(" %d", i);
         i++;
         if(i==5){
             Semaphore_post(vmSem);
         }
            Task_sleep(1000000 / Clock_tickPeriod);
        }
}

void vmFxn(void){
Semaphore_pend(vmSem, BIOS_WAIT_FOREVER);
    while(1){
        System_flush();
        System_printf("asdasdasdasd");
        break;
    }
}

int main(void)
{
    Task_Params taskParams;
    Semaphore_Params semParams;

    Board_initGeneral();

    Task_Params_init(&taskParams);
        taskParams.stackSize = TASKSTACKSIZE;
        taskParams.stack = &task0Stack;
        taskParams.priority = 2;
        taskParams.instance->name = "vmFxn";
        Task_construct(&task0Struct, (Task_FuncPtr)vmFxn, &taskParams, NULL);
        vmTask = Task_handle(&task0Struct);

        taskParams.stack = &task1Stack;
        taskParams.priority = 1;
        taskParams.instance->name = "uartFxn";
        Task_construct(&task1Struct, (Task_FuncPtr)uartFxn, &taskParams, NULL);
        uartTask = Task_handle(&task1Struct);

        Semaphore_Params_init(&semParams);
        semParams.mode = Semaphore_Mode_BINARY;
        Semaphore_construct(&sem0Struct, 0, &semParams);
        vmSem = Semaphore_handle(&sem0Struct);

    BIOS_start();
    return (0);
}


оно работает на отлично, выводит 1 2 3 4 потом переключается на другую задачу, выводит asdasdasdasd, и потом дальше 5 6 7...

вопрос следующий в первой по приоритету задаче я включаю UART

Код
if(!hUART){
        UART_Params_init(&params);
        params.readMode     = UART_MODE_BLOCKING;
        params.writeDataMode= UART_DATA_BINARY;
        params.readTimeout  = 1000;
        params.readCallback = NULL;
        params.readEcho     = UART_ECHO_OFF; //Not needed on CC26XX implementation as not implemented
        params.baudRate     = 9600;
        hUART = UART_open(Board_UART0, &params);
    }
    if (!hUART) {
                System_abort("Error initializing UART\n");
    }


опять же всё хорошо но при переключении задачи юарт отключается и не включается, где бы я его заново не запускал

может кто сталкивался?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)