mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-08-30 07:40:56 +08:00
* sp02/task1.c, sp02/task2.c, sp02/task3.c, sp03/task2.c, sp05/task1.c, sp05/task2.c, sp05/task3.c, sp06/task1.c, sp06/task2.c, sp09/screen02.c, sp09/screen04.c, sp09/screen06.c, sp09/screen07.c, sp09/screen10.c, sp09/screen12.c, sp09/screen13.c, sp09/screen14.c, sp11/task1.c, sp11/task2.c, sp12/pridrv.c, sp12/pritask.c, sp12/task1.c, sp13/task1.c, sp13/task2.c, sp14/task1.c, sp16/task1.c, sp16/task4.c, sp19/fptask.c, sp19/task1.c, sp22/task1.c, sp24/task1.c, sp26/task1.c, sp29/init.c, sp30/task1.c, sp31/task1.c, sp33/init.c, sp45/init.c, sp46/init.c, sp50/init.c, spintrcritical06/init.c, spwatchdog/task1.c: Eliminate test routines TICKS_PER_SECOND and get_ticks_per_second() in favor of new rtems_clock_get_ticks_per_second().
130 lines
3.8 KiB
C
130 lines
3.8 KiB
C
/* Priority_test_driver
|
|
*
|
|
* This routine is the initialization task for this test program.
|
|
* It is a user initialization task and has the responsibility for creating
|
|
* and starting the tasks that make up the test. If the time of day
|
|
* clock is required for the test, it should also be set to a known
|
|
* value by this function.
|
|
*
|
|
* Input parameters:
|
|
* priority_base - priority_base switch
|
|
*
|
|
* Output parameters: NONE
|
|
*
|
|
* COPYRIGHT (c) 1989-2009.
|
|
* On-Line Applications Research Corporation (OAR).
|
|
*
|
|
* The license and distribution terms for this file may be
|
|
* found in the file LICENSE in this distribution or at
|
|
* http://www.rtems.com/license/LICENSE.
|
|
*
|
|
* $Id$
|
|
*/
|
|
|
|
#include "system.h"
|
|
|
|
void Priority_test_driver(
|
|
uint32_t priority_base
|
|
)
|
|
{
|
|
rtems_task_priority previous_priority;
|
|
uint32_t index;
|
|
rtems_status_code status;
|
|
|
|
for ( index = 1 ; index <= 5 ; index++ ) {
|
|
switch ( index ) {
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
Task_priority[ index ] = priority_base + index;
|
|
break;
|
|
default:
|
|
Task_priority[ index ] = priority_base + 3;
|
|
break;
|
|
}
|
|
|
|
status = rtems_task_create(
|
|
Priority_task_name[ index ],
|
|
Task_priority[ index ],
|
|
RTEMS_MINIMUM_STACK_SIZE * 2,
|
|
RTEMS_DEFAULT_MODES,
|
|
RTEMS_DEFAULT_ATTRIBUTES,
|
|
&Priority_task_id[ index ]
|
|
);
|
|
directive_failed( status, "rtems_task_create loop" );
|
|
|
|
}
|
|
|
|
if ( priority_base == 0 ) {
|
|
for ( index = 1 ; index <= 5 ; index++ ) {
|
|
status = rtems_task_start(
|
|
Priority_task_id[ index ],
|
|
Priority_task,
|
|
index
|
|
);
|
|
directive_failed( status, "rtems_task_start loop" );
|
|
}
|
|
} else {
|
|
for ( index = 5 ; index >= 1 ; index-- ) {
|
|
status = rtems_task_start(
|
|
Priority_task_id[ index ],
|
|
Priority_task,
|
|
index
|
|
);
|
|
directive_failed( status, "rtems_task_start loop" );
|
|
|
|
status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() );
|
|
directive_failed( status, "rtems_task_wake_after loop" );
|
|
|
|
if ( priority_base == PRIORITY_INHERIT_BASE_PRIORITY ) {
|
|
if ( index == 4 ) {
|
|
status = rtems_task_set_priority(
|
|
Priority_task_id[ 5 ],
|
|
priority_base + 4,
|
|
&previous_priority
|
|
);
|
|
printf( "PDRV - change priority of PRI5 from %d to %d\n",
|
|
previous_priority,
|
|
priority_base + 4
|
|
);
|
|
directive_failed( status, "PDRV rtems_task_set_priority" );
|
|
}
|
|
status = rtems_task_set_priority(
|
|
Priority_task_id[ 5 ],
|
|
RTEMS_CURRENT_PRIORITY,
|
|
&previous_priority
|
|
);
|
|
directive_failed( status, "PDRV rtems_task_set_priority CURRENT" );
|
|
printf( "PDRV - priority of PRI5 is %d\n", previous_priority );
|
|
}
|
|
}
|
|
}
|
|
|
|
status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() );
|
|
directive_failed( status, "rtems_task_wake_after after loop" );
|
|
|
|
if ( priority_base == 0 ) {
|
|
for ( index = 1 ; index <= 5 ; index++ ) {
|
|
status = rtems_semaphore_release( Semaphore_id[ 2 ] );
|
|
directive_failed( status, "rtems_semaphore_release loop" );
|
|
}
|
|
}
|
|
|
|
if ( priority_base == PRIORITY_INHERIT_BASE_PRIORITY ) {
|
|
puts( "PDRV - rtems_task_resume - PRI5" );
|
|
status = rtems_task_resume( Priority_task_id[ 5 ] );
|
|
directive_failed( status, "rtems_task_resume" );
|
|
|
|
status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() );
|
|
directive_failed( status, "rtems_task_wake_after so PRI5 can run" );
|
|
|
|
status = rtems_task_delete( Priority_task_id[ 5 ] );
|
|
directive_failed( status, "rtems_task_delete of PRI5" );
|
|
} else {
|
|
for ( index = 1 ; index <= 5 ; index++ ) {
|
|
status = rtems_task_delete( Priority_task_id[ index ] );
|
|
directive_failed( status, "rtems_task_delete loop" );
|
|
}
|
|
}
|
|
}
|