mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-08-24 12:31:57 +08:00
2000-09-29 Stephan Merker <merker@decrc.abb.de>
* include/rtems/rtems/ratemon.h, src/ratemonperiod.c, src/ratemontimeout.c: Add next_length field so period length can be changed by the the sequence period(X), period(not X) with no intervening cancel or expiration.
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
2000-09-29 Stephan Merker <merker@decrc.abb.de>
|
||||
|
||||
* include/rtems/rtems/ratemon.h, src/ratemonperiod.c,
|
||||
src/ratemontimeout.c: Add next_length field so period length
|
||||
can be changed by the the sequence period(X), period(not X)
|
||||
with no intervening cancel or expiration.
|
||||
|
||||
2000-09-04 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* optman/Makefile.am, src/Makefile.am: Include compile.am.
|
||||
|
||||
@@ -76,6 +76,7 @@ typedef struct {
|
||||
rtems_rate_monotonic_period_states state;
|
||||
unsigned32 owner_ticks_executed_at_period;
|
||||
unsigned32 time_at_period;
|
||||
unsigned32 next_length;
|
||||
Thread_Control *owner;
|
||||
} Rate_monotonic_Control;
|
||||
|
||||
|
||||
@@ -95,6 +95,7 @@ rtems_status_code rtems_rate_monotonic_period(
|
||||
_Thread_Executing->ticks_executed;
|
||||
|
||||
the_period->time_at_period = _Watchdog_Ticks_since_boot;
|
||||
the_period->next_length = length;
|
||||
|
||||
_Watchdog_Insert_ticks( &the_period->Timer, length );
|
||||
_Thread_Enable_dispatch();
|
||||
@@ -103,10 +104,13 @@ rtems_status_code rtems_rate_monotonic_period(
|
||||
case RATE_MONOTONIC_ACTIVE:
|
||||
/*
|
||||
* This tells the _Rate_monotonic_Timeout that this task is
|
||||
* in the process of blocking on the period.
|
||||
* in the process of blocking on the period and that we
|
||||
* may be changing the length of the next period.
|
||||
*/
|
||||
|
||||
the_period->state = RATE_MONOTONIC_OWNER_IS_BLOCKING;
|
||||
the_period->next_length = length;
|
||||
|
||||
_ISR_Enable( level );
|
||||
|
||||
_Thread_Executing->Wait.id = the_period->Object.id;
|
||||
@@ -140,6 +144,7 @@ rtems_status_code rtems_rate_monotonic_period(
|
||||
the_period->owner_ticks_executed_at_period =
|
||||
_Thread_Executing->ticks_executed;
|
||||
the_period->time_at_period = _Watchdog_Ticks_since_boot;
|
||||
the_period->next_length = length;
|
||||
|
||||
_Watchdog_Insert_ticks( &the_period->Timer, length );
|
||||
_Thread_Enable_dispatch();
|
||||
|
||||
@@ -44,6 +44,11 @@ void _Rate_monotonic_Timeout(
|
||||
Objects_Locations location;
|
||||
Thread_Control *the_thread;
|
||||
|
||||
/*
|
||||
* When we get here, the Timer is already off the chain so we do not
|
||||
* have to worry about that -- hence no _Watchdog_Remove().
|
||||
*/
|
||||
|
||||
the_period = _Rate_monotonic_Get( id, &location );
|
||||
switch ( location ) {
|
||||
case OBJECTS_REMOTE: /* impossible */
|
||||
@@ -60,14 +65,14 @@ void _Rate_monotonic_Timeout(
|
||||
|
||||
the_period->time_at_period = _Watchdog_Ticks_since_boot;
|
||||
|
||||
_Watchdog_Reset( &the_period->Timer );
|
||||
_Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length );
|
||||
} else if ( the_period->state == RATE_MONOTONIC_OWNER_IS_BLOCKING ) {
|
||||
the_period->state = RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING;
|
||||
the_period->owner_ticks_executed_at_period =
|
||||
the_thread->ticks_executed;
|
||||
|
||||
the_period->time_at_period = _Watchdog_Ticks_since_boot;
|
||||
_Watchdog_Reset( &the_period->Timer );
|
||||
_Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length );
|
||||
} else
|
||||
the_period->state = RATE_MONOTONIC_EXPIRED;
|
||||
_Thread_Unnest_dispatch();
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
2000-09-29 Stephan Merker <merker@decrc.abb.de>
|
||||
|
||||
* include/rtems/rtems/ratemon.h, src/ratemonperiod.c,
|
||||
src/ratemontimeout.c: Add next_length field so period length
|
||||
can be changed by the the sequence period(X), period(not X)
|
||||
with no intervening cancel or expiration.
|
||||
|
||||
2000-09-04 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* optman/Makefile.am, src/Makefile.am: Include compile.am.
|
||||
|
||||
@@ -76,6 +76,7 @@ typedef struct {
|
||||
rtems_rate_monotonic_period_states state;
|
||||
unsigned32 owner_ticks_executed_at_period;
|
||||
unsigned32 time_at_period;
|
||||
unsigned32 next_length;
|
||||
Thread_Control *owner;
|
||||
} Rate_monotonic_Control;
|
||||
|
||||
|
||||
@@ -95,6 +95,7 @@ rtems_status_code rtems_rate_monotonic_period(
|
||||
_Thread_Executing->ticks_executed;
|
||||
|
||||
the_period->time_at_period = _Watchdog_Ticks_since_boot;
|
||||
the_period->next_length = length;
|
||||
|
||||
_Watchdog_Insert_ticks( &the_period->Timer, length );
|
||||
_Thread_Enable_dispatch();
|
||||
@@ -103,10 +104,13 @@ rtems_status_code rtems_rate_monotonic_period(
|
||||
case RATE_MONOTONIC_ACTIVE:
|
||||
/*
|
||||
* This tells the _Rate_monotonic_Timeout that this task is
|
||||
* in the process of blocking on the period.
|
||||
* in the process of blocking on the period and that we
|
||||
* may be changing the length of the next period.
|
||||
*/
|
||||
|
||||
the_period->state = RATE_MONOTONIC_OWNER_IS_BLOCKING;
|
||||
the_period->next_length = length;
|
||||
|
||||
_ISR_Enable( level );
|
||||
|
||||
_Thread_Executing->Wait.id = the_period->Object.id;
|
||||
@@ -140,6 +144,7 @@ rtems_status_code rtems_rate_monotonic_period(
|
||||
the_period->owner_ticks_executed_at_period =
|
||||
_Thread_Executing->ticks_executed;
|
||||
the_period->time_at_period = _Watchdog_Ticks_since_boot;
|
||||
the_period->next_length = length;
|
||||
|
||||
_Watchdog_Insert_ticks( &the_period->Timer, length );
|
||||
_Thread_Enable_dispatch();
|
||||
|
||||
@@ -44,6 +44,11 @@ void _Rate_monotonic_Timeout(
|
||||
Objects_Locations location;
|
||||
Thread_Control *the_thread;
|
||||
|
||||
/*
|
||||
* When we get here, the Timer is already off the chain so we do not
|
||||
* have to worry about that -- hence no _Watchdog_Remove().
|
||||
*/
|
||||
|
||||
the_period = _Rate_monotonic_Get( id, &location );
|
||||
switch ( location ) {
|
||||
case OBJECTS_REMOTE: /* impossible */
|
||||
@@ -60,14 +65,14 @@ void _Rate_monotonic_Timeout(
|
||||
|
||||
the_period->time_at_period = _Watchdog_Ticks_since_boot;
|
||||
|
||||
_Watchdog_Reset( &the_period->Timer );
|
||||
_Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length );
|
||||
} else if ( the_period->state == RATE_MONOTONIC_OWNER_IS_BLOCKING ) {
|
||||
the_period->state = RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING;
|
||||
the_period->owner_ticks_executed_at_period =
|
||||
the_thread->ticks_executed;
|
||||
|
||||
the_period->time_at_period = _Watchdog_Ticks_since_boot;
|
||||
_Watchdog_Reset( &the_period->Timer );
|
||||
_Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length );
|
||||
} else
|
||||
the_period->state = RATE_MONOTONIC_EXPIRED;
|
||||
_Thread_Unnest_dispatch();
|
||||
|
||||
Reference in New Issue
Block a user