System View - No RTOS - Pseudo-Tasks

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • System View - No RTOS - Pseudo-Tasks

    Hello

    Im currently working on a system without any RTOS.
    We would like to test the new tool System View.
    I have so far modified the trace file, that ISRs are recorded OK, and the task description appears. As soon as i try to log the entry of a "task" entry and the exit, the system receives unknown packages and breaks down.

    The current setup looks like this and works OK, except the tasks are yet not visible, just the description.

    As soon as i define the

    C Source Code

    1. #define OS_TRACE_TASK_SWITCHED_IN(p_tcb) //SEGGER_SYSVIEW_OnTaskStartExec((U32)p_tcb);
    and the

    C Source Code

    1. #define OS_TRACE_TASK_SUSPENDED(p_tcb) //SEGGER_SYSVIEW_OnTaskStopExec();
    things start to go sideways.

    Is there any advice on how to log "pseudo" tasks?

    C Source Code

    1. // ------------- TRACE DEFINITION -----------------
    2. typedef struct
    3. {
    4. const char * NamePtr;
    5. unsigned Prio;
    6. uint32_t StkBasePtr;
    7. unsigned StkSize;
    8. }trace_task_t;
    9. #define OS_TRACE_TASK_CREATE(p_tcb) if (p_tcb != 0) { \
    10. SEGGER_SYSVIEW_OnTaskCreate((U32)p_tcb); \
    11. SYSVIEW_AddTask((U32)p_tcb, \
    12. &(((trace_task_t*)p_tcb)->NamePtr[0]), \
    13. ((trace_task_t*)p_tcb)->Prio, \
    14. ((trace_task_t*)p_tcb)->StkBasePtr, \
    15. ((trace_task_t*)p_tcb)->StkSize \
    16. ); \
    17. }
    18. #define OS_TRACE_TASK_READY(p_tcb)
    19. #define OS_TRACE_TASK_SWITCHED_IN(p_tcb) //SEGGER_SYSVIEW_OnTaskStartExec((U32)p_tcb); SYSVIEW_TaskSwitchedIn((U32)p_tcb)
    20. #define OS_TRACE_TASK_DLY(dly_ticks)
    21. #define OS_TRACE_TASK_SUSPEND(p_tcb)
    22. #define OS_TRACE_TASK_SUSPENDED(p_tcb) //SEGGER_SYSVIEW_OnTaskStopExec(); SYSVIEW_TaskSuspend((U32)p_tcb)
    23. #define OS_TRACE_TASK_RESUME(p_tcb)
    24. #define OS_TRACE_TASK_ONIDLE() SEGGER_SYSVIEW_OnIdle();
    25. #define OS_TRACE_ISR_BEGIN(isr_id)
    26. #define OS_TRACE_ISR_END()
    27. #define OS_TRACE_ISR_ENTER() SEGGER_SYSVIEW_RecordEnterISR()
    28. #define OS_TRACE_ISR_EXIT() SEGGER_SYSVIEW_RecordExitISR()
    29. #define OS_TRACE_ISR_EXIT_TO_SCHEDULER() SEGGER_SYSVIEW_RecordExitISRToScheduler()
    30. void SYSVIEW_TaskReady(U32 TaskID)
    31. {
    32. (void) TaskID;
    33. }
    34. void SYSVIEW_TaskSwitchedIn(U32 TaskID)
    35. {
    36. (void) TaskID;
    37. }
    38. void SYSVIEW_TaskSuspend(U32 TaskID)
    39. {
    40. (void) TaskID;
    41. }
    42. void SYSVIEW_AddTask(U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark) {
    43. if (memcmp(pcTaskName, "IDLE", 5) == 0) {
    44. return;
    45. }
    46. if (_NumTasks >= SYSVIEW_NOOS_MAX_NOF_TASKS) {
    47. SEGGER_SYSVIEW_Warn("SYSTEMVIEW: Could not record task information. Maximum number of tasks reached.");
    48. return;
    49. }
    50. _aTasks[_NumTasks].xHandle = xHandle;
    51. _aTasks[_NumTasks].pcTaskName = pcTaskName;
    52. _aTasks[_NumTasks].uxCurrentPriority = uxCurrentPriority;
    53. _aTasks[_NumTasks].pxStack = pxStack;
    54. _aTasks[_NumTasks].uStackHighWaterMark = uStackHighWaterMark;
    55. _NumTasks++;
    56. SYSVIEW_SendTaskInfo(xHandle, pcTaskName,uxCurrentPriority, pxStack, uStackHighWaterMark);
    57. }
    58. // ------------- ISR EXAMPLE TRACE -------------------------------------
    59. void USART0_RX_IRQHandler(void)
    60. {
    61. OS_TRACE_ISR_ENTER();
    62. // .... handles interrupt
    63. OS_TRACE_ISR_EXIT_TO_SCHEDULER();
    64. }
    65. // ------------------ TASK EXAMPLE TRACE ------------------------
    66. // TASK ADD
    67. //...
    68. #if (defined(OS_CFG_TRACE_EN) && (OS_CFG_TRACE_EN > 0u))
    69. _tasks[pos].traceInformation.NamePtr = name;
    70. _tasks[pos].traceInformation.Prio = prio;
    71. _tasks[pos].traceInformation.StkBasePtr = (U32)NULL;
    72. _tasks[pos].traceInformation.StkSize = 0x100;
    73. OS_TRACE_TASK_CREATE(&(_tasks[pos].traceInformation));
    74. #endif
    75. //...
    76. // TASK EXECUTION
    77. //...
    78. OS_TRACE_TASK_SWITCHED_IN(&(_tasks[i].traceInformation));
    79. _tasks[i].task();
    80. OS_TRACE_TASK_SUSPENDED(&(_tasks[i].traceInformation));
    81. //...
    Display All