System View + Eclipse+ STM32F4Discovery+ IAR + NoOS

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

  • System View + Eclipse+ STM32F4Discovery+ IAR + NoOS

    Hi , first of
    all i would like to congratulate the Segger team for offering a SystemView. It
    seems a grate tool!


    I'm trying to evaluate the tool with bare metal with no OS.Here are the inputs:
    Probe : JLink EDU
    Target : STM32F407VG (M4) Discovery Board
    Compiler: IAR 7.4X
    IDE: Eclipse Luna
    Docs: UM08027 +AN00014
    Tool: Jlink V5.10r + SystemView V2.30


    For our project,we cannot use OS (neither embOS neither FreeRtos or others....).

    In order to test the SystemView tool, i want to use 3 to 4 HW Timers and i would like to monitor the ISR (latency ....) in the tool.
    At first sight i have succeded with 1 timer:
    Here are some details about some configurations realized:

    targetSrc/Config: SEGGER_SYSVIEW_Conf.h

    C Source Code

    1. /*********************************************************************
    2. *
    3. *
    4. SysView Id configuration
    5. */
    6. #define
    7. SEGGER_SYSVIEW_ID_BASE 0x20000000
    8. #define
    9. SEGGER_SYSVIEW_ID_SHIFT 2
    10. /*********************************************************************
    Display All



    TargetSrc\Sample\Config\SEGGER_SYSVIEW_Config_NoOS.c

    C Source Code

    1. // The lowest
    2. RAM address used for IDs (pointers)
    3. #define
    4. SYSVIEW_RAM_BASE (0x20000000)


    Can you explain,why the base adress is 0x2000000 ? I cannot figure why sometimes its 0x1000000 (for Cortex M0) ...


    Source\main.c

    C Source Code

    1. /*
    2. Compute the prescaler value to have TIM3 counter clock equal to 10 KHz */
    3. uwPrescalerValue = (uint32_t) ((SystemCoreClock /2) / 10000) - 1;
    4. /*
    5. Set TIMx instance */
    6. TimHandle.Instance = TIM3;
    7. TimHandle.Init.Period = 10000 - 1;
    8. TimHandle.Init.Prescaler = uwPrescalerValue;
    9. TimHandle.Init.ClockDivision = 0;
    10. TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
    11. if(HAL_TIM_Base_Init(&TimHandle) != HAL_OK)
    12. {
    13. Error_Handler();
    14. }
    15. if(HAL_TIM_Base_Start_IT(&TimHandle) != HAL_OK)
    16. {
    17. Error_Handler();
    18. }
    19. SEGGER_SYSVIEW_Conf();
    20. while (1)
    21. {
    22. }
    23. void TIM3_IRQHandler(void)
    24. {
    25. SEGGER_SYSVIEW_RecordEnterISR();
    26. HAL_TIM_IRQHandler(&TimHandle);
    27. }
    28. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    29. {
    30. BSP_LED_Toggle(LED4);
    31. SEGGER_SYSVIEW_RecordExitISR();
    32. }
    Display All

    Here is a prompt:
    [img]C:\Users\sbangera\Downloads\Capture.PNG[/img]
    The SystemView works but i would like it to recognize the name of the task (IRQ,isrHandler,function, callback, eventhandler ....) with a given ID. According to the doc,this possible but i don't see where . Can you guys help me ? Have i missed something ? Are there any more RTT functions to use to get more runtime information? Recommendations are welcome.


    Documentation is not very explicit with this configuration.
    TargetSrc\Sample\Config: SEGGER_SYSVIEW_Config_NoOS.c

    C Source Code

    1. /********************************************************************* * * _cbSendSystemDesc() * * Function description * Sends SystemView description strings. */ static void _cbSendSystemDesc(void) { SEGGER_SYSVIEW_SendSysDesc("N="SYSVIEW_APP_NAME",D="SYSVIEW_DEVICE_NAME); SEGGER_SYSVIEW_SendSysDesc("I#15=SysTick"); }


    thanks in advance!
    Sugs

    PS: According to the AN00014 and previous post in this forum the Usb has to be plugged in order to flash the target. I've checked the schematics and it is not coherent, can
    you give me more justification?

    The post was edited 2 times, last by sugs ().

  • Hi,

    Great to read that you like SystemView.

    The SystemView documentation has been improved to better describe the configuration.
    segger.com/downloads/free_tools/UM08027_SystemView.pdf
    Can you explain,why the base adress is 0x2000000 ? I cannot figure why sometimes its 0x1000000 (for Cortex M0) ...

    The base address is used to shrink Ids which are recorded.
    Ids in the sense of SystemView are mostly RAM pointers.
    The base address should therefore be the lowest RAM address of the system.
    In case of doubt it can be set to 0.

    The recording of the ISR looks good so far.
    To set a name for the interrupt, add it to the system description in SEGGER_SYSVIEW_Config_NoOS.c.

    C Source Code

    1. SEGGER_SYSVIEW_SendSysDesc("I#15=SysTick,I#45=TIM3");



    How to record other task activity is described in the SystemView manual, too.

    Best regards
    Johannes