Просмотр исходного кода

Merge pull request #6 from Guozhanxin/master

fix do not show thread name's error when init static thread
Bernard Xiong 7 лет назад
Родитель
Сommit
4e0b288787
1 измененных файлов с 22 добавлено и 5 удалено
  1. 22 5
      SystemView_Src/Config/SEGGER_SYSVIEW_RTThread.c

+ 22 - 5
SystemView_Src/Config/SEGGER_SYSVIEW_RTThread.c

@@ -61,7 +61,10 @@ static U64 _cbGetTime(void)
 {
     return (U64)(rt_tick_get() * 1000 / RT_TICK_PER_SECOND);
 }
-
+static void _cb_timer_timeout(rt_timer_t t)
+{
+    SEGGER_SYSVIEW_RecordEnterTimer((rt_uint32_t)t);
+}
 static void _cbSendTaskInfo(const rt_thread_t thread)
 {
     SEGGER_SYSVIEW_TASKINFO Info;
@@ -118,7 +121,15 @@ static void _cb_scheduler(rt_thread_t from, rt_thread_t to)
     if(to == tidle)
         SEGGER_SYSVIEW_OnIdle();
     else
-        SEGGER_SYSVIEW_OnTaskStartExec((unsigned)to);
+    {
+        if(rt_interrupt_get_nest())
+        {
+            SEGGER_SYSVIEW_OnTaskStartReady((unsigned)to);
+            SEGGER_SYSVIEW_RecordEnterISR();
+        }
+        else
+            SEGGER_SYSVIEW_OnTaskStartExec((unsigned)to);
+    }
 }
 
 static void _cb_irq_enter(void)
@@ -142,7 +153,11 @@ static void _cb_irq_leave(void)
     else
         SEGGER_SYSVIEW_OnTaskStartExec((unsigned)current);
 }
-
+static void _cb_thread_inited(rt_thread_t thread)
+{
+    SEGGER_SYSVIEW_OnTaskCreate((rt_uint32_t)thread);
+    _cbSendTaskInfo((rt_thread_t)thread);
+}
 static void _cb_object_attach(struct rt_object* object)
 {
     switch(object->type)
@@ -160,7 +175,7 @@ static void _cb_object_detach(struct rt_object* object)
     switch(object->type)
     {
     case RT_Object_Class_Thread:
-        SEGGER_SYSVIEW_OnTaskStopExec();
+        SEGGER_SYSVIEW_OnTaskTerminate((unsigned)object);
         break;
     default:
         break;
@@ -269,9 +284,11 @@ static int rt_trace_init(void)
     
     rt_thread_suspend_sethook(_cb_thread_suspend);
     rt_thread_resume_sethook(_cb_thread_resume);
-
+    rt_thread_inited_sethook(_cb_thread_inited);
     rt_scheduler_sethook(_cb_scheduler);
 
+    rt_timer_timeout_sethook(_cb_timer_timeout);
+    
     rt_interrupt_enter_sethook(_cb_irq_enter);
     rt_interrupt_leave_sethook(_cb_irq_leave);