[SOLVED] embOS vs Peripheral Driver

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

  • [SOLVED] embOS vs Peripheral Driver

    Hallo ich bin Anfänger was MC Programmierung angeht und ich habe einen STM32f103RB auf einer Platine und einen Sensor den ich auslesen will.
    Ich habe bereits ein fertiges Projekt mit Segger Embedded Studio und der Standard Periphal Library (STM32F10x_StdPeriph_Driver) entworfen, das per I2C die Daten ausliest und per UART versendet.
    Ich wollte nun das Programm erweitern und mit embOS arbeiten, leider scheint die Lib des Drivers wieder mit dem Systick zu arbeiten, der vom embOS auch verwendet wird.
    Gibt es irgendeine Möglichkeit meinen Code aus dem vorherigen Projekt zu verwenden oder muss ich alle defines und Schnittstellen Implementierungen neu schreiben?
  • Hallo Philipp,

    wenn ich das richtig im Kopf habe wird der SysTick in der STM32F10x_StdPeriph_Driver nur für Timeouts benutzt.
    D.h. dort wird wahrscheinlich nur irgendein Zähler inkrementiert.
    Das einfachste wäre also den SysTick in der STM32F10x_StdPeriph_Driver nicht zu initialisieren und das Inkrementieren in unserem SysTick Interrupt Handler auszuführen.

    Alternativ könnte man natürlich auch für das embOS einfach einen anderen Hardware Timer benutzen.
    embOS ist nicht auf den SysTick angewiesen. Jeder andere Hardware Timer funktioniert auch.


    pbrinkmann wrote:

    Gibt es irgendeine Möglichkeit meinen Code aus dem vorherigen Projekt zu verwenden oder muss ich alle defines und Schnittstellen Implementierungen neu schreiben?
    Du musst auf keinen Fall irgend etwas neu implementieren. Die Benutzung von embOS mit solchen Libraries ist quasi Standard und wird von vielen Kunden benutzt.


    Viele Grüße,
    Til
    Please read the forum rules before posting.

    Keep in mind, this is *not* a support forum.
    Our engineers will try to answer your questions between their projects if possible but this can be delayed by longer periods of time.
    Should you be entitled to support you can contact us via our support system: segger.com/ticket/

    Or you can contact us via e-mail.
  • Damit ich nicht falsch liege es handelt sich um diesen Code den ich ändern muss wenn ich den HW Timer für embOS ändere:

    Source Code: RTOSInit_STM32F103.c

    1. /*********************************************************************
    2. *
    3. * SysTick_Handler()
    4. *
    5. * Function description
    6. * This is the hardware timer exception handler.
    7. */
    8. void SysTick_Handler(void) {
    9. #if (OS_PROFILE != 0)
    10. if (SEGGER_SYSVIEW_DWT_IS_ENABLED() == 0u) {
    11. SEGGER_SYSVIEW_TickCnt++;
    12. }
    13. #endif
    14. OS_INT_EnterNestable();
    15. OS_TICK_Handle();
    16. #if (OS_VIEW_IFSELECT == OS_VIEW_IF_JLINK)
    17. JLINKMEM_Process();
    18. #endif
    19. OS_INT_LeaveNestable();
    20. }
    21. /*********************************************************************
    22. *
    23. * OS_InitHW()
    24. *
    25. * Function description
    26. * Initialize the hardware required for embOS to run.
    27. */
    28. void OS_InitHW(void) {
    29. OS_INT_IncDI();
    30. //
    31. // Initialize NVIC vector table offset register if applicable for this device.
    32. // Might be necessary for RAM targets or application not running from 0x00.
    33. //
    34. #if (defined(__VTOR_PRESENT) && __VTOR_PRESENT == 1)
    35. SCB->VTOR = (OS_U32)&__Vectors;
    36. #endif
    37. //
    38. // Enable instruction and data cache if applicable for this device
    39. //
    40. #if (defined(__ICACHE_PRESENT) && __ICACHE_PRESENT == 1)
    41. SCB_EnableICache();
    42. #endif
    43. #if (defined(__DCACHE_PRESENT) && __DCACHE_PRESENT == 1)
    44. SCB_EnableDCache();
    45. #endif
    46. //
    47. // We assume PLL and core clock were already set by the SystemInit() function,
    48. // which was called from the startup code. Therefore, we just ensure the system
    49. // clock variable is updated and then set the periodic system timer tick for embOS.
    50. //
    51. SystemCoreClockUpdate(); // Update the system clock variable (might not have been set before)
    52. SysTick_Config(OS_TIMER_FREQ / OS_INT_FREQ); // Setup SysTick Timer
    53. NVIC_SetPriority(SysTick_IRQn, (1u << __NVIC_PRIO_BITS) - 2u); // Set the priority higher than the PendSV priority
    54. //
    55. // Inform embOS about the timer settings
    56. //
    57. {
    58. OS_SYSTIMER_CONFIG SysTimerConfig = {OS_TIMER_FREQ, OS_INT_FREQ, OS_TIMER_DOWNCOUNTING, _OS_GetHWTimerCycles, _OS_GetHWTimer_IntPending};
    59. OS_TIME_ConfigSysTimer(&SysTimerConfig);
    60. }
    61. //
    62. // Configure and initialize SEGGER SystemView
    63. //
    64. #if (OS_PROFILE != 0)
    65. SEGGER_SYSVIEW_Conf();
    66. #endif
    67. //
    68. // Initialize communication for embOSView
    69. //
    70. #if (OS_VIEW_IFSELECT == OS_VIEW_IF_JLINK)
    71. JLINKMEM_SetpfOnRx(OS_COM_OnRx);
    72. JLINKMEM_SetpfOnTx(OS_COM_OnTx);
    73. JLINKMEM_SetpfGetNextChar(OS_COM_GetNextChar);
    74. #elif (OS_VIEW_IFSELECT == OS_VIEW_IF_UART)
    75. BSP_UART_Init(OS_UART, OS_BAUDRATE, BSP_UART_DATA_BITS_8, BSP_UART_PARITY_NONE, BSP_UART_STOP_BITS_1);
    76. BSP_UART_SetReadCallback(OS_UART, _OS_OnRX);
    77. BSP_UART_SetWriteCallback(OS_UART, (int(*)(unsigned int))OS_COM_OnTx);
    78. #endif
    79. OS_INT_DecRI();
    80. }
    Display All
  • Korrekt, der embOS Timer wird in der OS_InitHW() in der RTOSInit.c initialisiert.
    Dazu passend müssen dann einige Sachen in der RTOSInit.c angepasst werden damit alle embOS Timing Funktionen über den neuen Timer informiert sind.
    Das ist aber fast selbsterklärend (z.B. OS_TIMER_FREQ auf die richtige Frequenz des genutzten Timers setzen).

    Ich würde aber empfehlen den anderen Weg zu versuchen. Das ist eigentlich einfacher.
    Im Zweifelsfall kannst du uns auch dein Projekt schicken und wir schauen mal, ob wir dir weiterhelfen können.

    Am besten dann über unser Ticket System oder über die Support Emailadresse (findest du im embOS Manual im Kapitel Support).

    Viele Grüße,
    Til
    Please read the forum rules before posting.

    Keep in mind, this is *not* a support forum.
    Our engineers will try to answer your questions between their projects if possible but this can be delayed by longer periods of time.
    Should you be entitled to support you can contact us via our support system: segger.com/ticket/

    Or you can contact us via e-mail.
  • Freut mich das es jetzt funktioniert.
    Melde dich einfach wenn du noch Hilfe brauchst.

    Viele Grüße,
    Til
    Please read the forum rules before posting.

    Keep in mind, this is *not* a support forum.
    Our engineers will try to answer your questions between their projects if possible but this can be delayed by longer periods of time.
    Should you be entitled to support you can contact us via our support system: segger.com/ticket/

    Or you can contact us via e-mail.