Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2016, 17:26   #1
mrprim
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 52
По умолчанию Запуск нескольких задач

Работаю на камне 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");
	}
опять же всё хорошо но при переключении задачи юарт отключается и не включается, где бы я его заново не запускал

может кто сталкивался?
mrprim вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск нескольких потоков bilibian Общие вопросы Delphi 41 25.02.2014 16:20
Запуск нескольких программ. ArmanPrestige Общие вопросы C/C++ 6 19.10.2012 01:03
Решение нескольких задач! Net1ka Помощь студентам 4 18.10.2012 16:54
Запуск нескольких потоков bulldog5293 Общие вопросы Delphi 3 11.11.2010 18:24
Решение нескольких задач ViNcHeStEr Помощь студентам 4 05.07.2008 17:57