Stuck in OS_Delayus

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

  • Stuck in OS_Delayus

    Hello,

    I am experiencing an issue with OS_Delayus().


    1. Which embOS do you use?
    stm32f103rgt6
    embOS V3.88 and stmlib V3.5
    Code Sourcery/gcc


    2. Which CPU and eval board do you use?
    Custom board


    3. Which start project do you use?
    Custom project

    Our code is :

    OS_Delayus(1); //CS disable time >50ns
    pCSpin->set( false );
    OS_Delayus(1); //CS setup time >150ns

    We are stuck
    in OS_Delayus(1)
    When we debug step by step here, the program keeps entering and exiting OS_GetTimeCycles(), like it's not leaving OS_Delayus().
    We can't debug OS_Delayus(1), because it's a library.

    We saw in embos release notes that OS_GetTimeCycles() was rewritten since embos 3.86. So maybe there is an issue here.

    Please could you give us any advice?

    Thanks
  • Hello,

    there was an issue with OS_GetTime_Cycles() in some RTOSInit.c some time ago but should be now fixed in all RTOSInit.c.
    Could you please contact the embOS support via email?
    We can check then if you have the fixed implementation of OS_GetTime_Cycles().

    Best regards,
    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.
  • Hello,

    please have a look in the generic embOS manual.
    Each chapter includes a table which shows where each API function may be called.

    Yes, you can use OS_Delayus() in main() before OS_Start() is called.
    Please note that OS_Delayus() uses the hardware timer so it works only after the timer is initialized.

    Best regards,
    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.
  • Hi,

    Okay i found the API tables and OS_Delayus() seems to work before call of OS_Start()
    I cannot reproduce the bug I had with OS_Delayus for the moment, maybe a stack corruption problem.

    I have another issue with software timers.
    In the manual, the API functions for software timers claim that OS_CreateTimer() and OS_StartTimer() can be called before OS_Start().

    So I use it this way:

    Source Code

    1. void I2C2_InitTimeout(
    2. OS_CreateTimer( &Timer, I2C2_TimeoutCallback, 10 );
    3. OS_StartTimer(&Timer);
    4. )
    5. void I2C2_TimeoutCallback( void )
    6. {
    7. I2C2_timeout = true;
    8. }


    If I call InitTimeout() before OS_Start(), I never enter the callback.
    If I call InitTimeout() after OS_Start(), I enter the callback after the expected period.

    So do software timers only work after OS is started?

    Thanks
  • Hello,

    yes, the software timer callback functions are called by the scheduler, so they work only after OS_Start().

    Best regards,
    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.