kosyak© 0 17 июня, 2013 Опубликовано 17 июня, 2013 · Жалоба Имею TNKernel версии 2.6. В функции tn_start_system() инциализация служебных тасков проходит как void tn_start_system(void) { ... tn_task_create((TN_TCB*)&tn_timer_task, //-- task TCB tn_timer_task_func, //-- task function 0, //-- task priority &(tn_timer_task_stack //-- task stack first addr in memory [TN_TIMER_STACK_SIZE-1]), TN_TIMER_STACK_SIZE, //-- task stack size (in int,not bytes) NULL, //-- task function parameter TN_TASK_TIMER); //-- Creation option //--- Idle task tn_task_create((TN_TCB*)&tn_idle_task, //-- task TCB tn_idle_task_func, //-- task function TN_NUM_PRIORITY-1, //-- task priority &(tn_idle_task_stack //-- task stack first addr in memory [TN_IDLE_STACK_SIZE-1]), TN_IDLE_STACK_SIZE, //-- task stack size (in int,not bytes) NULL, //-- task function parameter TN_TASK_IDLE); //-- Creation option } в тоже время tn_timer_task.id_task и tn_idle_task.id_task нигде не обнуляются. Это правильно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 17 июня, 2013 Опубликовано 17 июня, 2013 · Жалоба в тоже время tn_timer_task.id_task и tn_idle_task.id_task нигде не обнуляются. Это правильно? Вроде правильно. Проблема не очень понятна? Не создает задачи? Дело может быть вот в чем: Cтатические, явно не инициализированные переменные перед началом исполнения программы должны содержать нулевые значения. Согласно стандарту языка С, выдержка из самого старого ANSI C 89-го года: If an object that has static storage duration is not initialized explicitly, it is initialized implicitly as if every member that has arithmetic type were assigned 0 and every member that has pointer type were assigned a null pointer constant. If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. Во встраиваемых системах об обнулении переменных заботится библиотечная функция, обычно вызывается стартовым модулем среды разработки/компилятора до передачи управления на main() пользовательской программы. Если у Вас в tn_timer_task.id_task и tn_idle_task.id_task какой-то мусор - то не отработал нормально стартап код компилятора, ну или систему второй раз пытаетесь стартануть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yuri_t 0 17 июня, 2013 Опубликовано 17 июня, 2013 · Жалоба ... Согласно стандарту языка С, выдержка из самого старого ANSI C 89-го года: If an object that has static storage duration is not initialized explicitly, it is initialized implicitly as if every member that has arithmetic type were assigned 0 and every member that has pointer type were assigned a null pointer constant. If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. Во встраиваемых системах об обнулении переменных заботится библиотечная функция, обычно вызывается стартовым модулем среды разработки/компилятора до передачи управления на main() пользовательской программы. Если у Вас в tn_timer_task.id_task и tn_idle_task.id_task какой-то мусор - то не отработал нормально стартап код компилятора, ну или систему второй раз пытаетесь стартануть. Полностью согласен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kosyak© 0 17 июня, 2013 Опубликовано 17 июня, 2013 · Жалоба Объявление переменных в файле tn.c ... TN_TCB tn_timer_task; static void tn_timer_task_func(void * par); ... TN_TCB tn_idle_task; static void tn_idle_task_func(void * par); ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 17 июня, 2013 Опубликовано 17 июня, 2013 · Жалоба Объявление переменных в файле tn.c Ну да, все верно. TCB объявлены вне какой-либо функции. Класс размещения - статический, область видимости - глобальная. По стандарту - при старте программы все поля структур должны быть нулевые. Что вызывает сомнение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kosyak© 0 17 июня, 2013 Опубликовано 17 июня, 2013 · Жалоба Класс размещения - статический, область видимости - глобальная. Спасибо за разъяснения. Действительно так и есть...буду дальше смотреть... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 19 июля, 2013 Опубликовано 19 июля, 2013 · Жалоба Кстати, автор в TN-NET то же применяет обнуление .id_task = 0 ( в файлах HTTP_test_1.c, TCP_test_7.c, lpc23xx_net.c, udp_test_1.c, udp_test_2.c ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться