tests: Fix rtems_test_spin_until_next_tick()

This bug surfaced due to sporadic failures in sptimecounter02.  Adjust
rtems_test_spin_for_ticks() to include the partial tick in the argument
value.
This commit is contained in:
Sebastian Huber
2018-12-05 08:05:54 +01:00
parent fcd577aabe
commit 03e86553d2
3 changed files with 13 additions and 15 deletions

View File

@@ -65,6 +65,8 @@ static rtems_task Task(
status = rtems_rate_monotonic_create( Task_name[ argument ], &RM_period );
directive_failed( status, "rtems_rate_monotonic_create" );
rtems_test_spin_until_next_tick();
while ( FOREVER ) {
status = rtems_rate_monotonic_period( RM_period, Periods[ argument ] );

View File

@@ -11,6 +11,7 @@
#define __TEST_SUPPORT_h
#include <stdarg.h>
#include <rtems.h>
#ifdef __cplusplus
extern "C" {
@@ -28,9 +29,10 @@ const char *Get_Too_Long_Name(void);
const char *Get_Longest_Name(void);
/*
* Spin for specified number of ticks.
* Spin for specified number of ticks. The first tick we spin through is a
* partial one.
*/
void rtems_test_spin_for_ticks(int ticks);
void rtems_test_spin_for_ticks(rtems_interval ticks);
/*
* Spin until the next clock tick

View File

@@ -17,21 +17,15 @@
/*
* Burn CPU for specified number of ticks
*/
void rtems_test_spin_for_ticks(int ticks)
void rtems_test_spin_for_ticks(rtems_interval ticks)
{
rtems_interval start;
rtems_interval now;
rtems_interval start;
rtems_interval now;
start = rtems_clock_get_ticks_since_boot();
do {
now = rtems_clock_get_ticks_since_boot();
/*
* Spin for <= ticks so we spin >= number of ticks.
* The first tick we spin through is a partial one.
* So you sping "ticks" number of ticks plus a partial
* one.
*/
} while ( (now-start) <= ticks );
} while ( now - start < ticks );
}
/*
@@ -39,11 +33,11 @@ void rtems_test_spin_for_ticks(int ticks)
*/
void rtems_test_spin_until_next_tick( void )
{
rtems_interval start;
rtems_interval now;
rtems_interval start;
rtems_interval now;
start = rtems_clock_get_ticks_since_boot();
do {
now = rtems_clock_get_ticks_since_boot();
} while ( now != start );
} while ( now == start );
}