спасибо!
а нельзя ли для 5.4 собрать?
в шестой версии оптимизатор на уровне HIGH иногда живет своей жизнью....
да, imho tn_create_queue портится при удалении задачи
task_set_dormant_state вызывает queue_reset(&(task->create_queue))
до удаления из очереди.
или я ошибаюсь?
Код
void tn_task_exit(int attr)
{
.....
task = tn_curr_run_task;
task_to_non_runnable(tn_curr_run_task);
task_set_dormant_state(task); // !!!!!!!!!!!!!!!!!!!!!!!!!
ptr_stack = tn_stack_init(task->task_func_addr,
task->stk_start,
task->task_func_param);
task->task_stk = ptr_stack; //-- Pointer to task top of stack,when not running
if(task->activate_count > 0) //-- Cannot exit
{
task->activate_count--;
task_to_runnable(task);
}
else // V 2.6 Thanks to Alex Borisov
{
if(attr == TN_EXIT_AND_DELETE_TASK)
{
queue_remove_entry(&(task->create_queue));
queue_reset(&(task->create_queue));
tn_created_tasks_qty--;
task->id_task = 0;
tn_task_del_hook(task);
}
}
tn_switch_context_exit(); // interrupts will be enabled inside tn_switch_context_exit()
}
/gr