реклама на сайте
подробности

 
 
> TNKernel IAR ARM Plugin
Nixon
сообщение Feb 24 2012, 15:39
Сообщение #1


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



По мотивам примера из С-Spy SDK (спасибо Ксении за него) начал я писать плагин для отладки приложений с TNKernel (пока только для ARM). На данным момент реализовано только обзор задач и их состояния. По примеру сделанного будет писаться и остальное (event, mutex и т.д.).

В общем если будут пожелания и рекомендации - пишите.

P.S. TNKernel я чуток модифицировал (добавил имена для всех системных объектов - удобнее, например, видеть имя задачи, а не адрес ее функции в списке задач), но по идее плагин будет работать и на чистой авторской RTOS.

P.S.S. Архив распаковывать в \IAR Systems\Embedded Workbench 6.0\arm\plugins\rtos\



--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Grape
сообщение Feb 28 2012, 12:03
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 69
Регистрация: 22-10-04
Пользователь №: 956



спасибо!

а нельзя ли для 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
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 15:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016