forked from Imagelibrary/rtems
170 lines
4.1 KiB
Ada
170 lines
4.1 KiB
Ada
--
|
|
-- SPTEST / BODY
|
|
--
|
|
-- DESCRIPTION:
|
|
--
|
|
-- This package is the implementation of Test 3 of the RTEMS
|
|
-- Single Processor Test Suite.
|
|
--
|
|
-- DEPENDENCIES:
|
|
--
|
|
--
|
|
--
|
|
-- COPYRIGHT (c) 1989-2011.
|
|
-- On-Line Applications Research Corporation (OAR).
|
|
--
|
|
-- The license and distribution terms for this file may in
|
|
-- the file LICENSE in this distribution or at
|
|
-- http://www.rtems.org/license/LICENSE.
|
|
--
|
|
|
|
with INTERFACES; use INTERFACES;
|
|
with TEST_SUPPORT;
|
|
with TEXT_IO;
|
|
with RTEMS.CLOCK;
|
|
|
|
package body SPTEST is
|
|
|
|
--
|
|
-- INIT
|
|
--
|
|
|
|
procedure INIT (
|
|
ARGUMENT : in RTEMS.TASKS.ARGUMENT
|
|
) is
|
|
pragma Unreferenced(ARGUMENT);
|
|
STATUS : RTEMS.STATUS_CODES;
|
|
begin
|
|
|
|
TEXT_IO.NEW_LINE( 2 );
|
|
TEST_SUPPORT.ADA_TEST_BEGIN;
|
|
|
|
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
|
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
|
|
|
RTEMS.TASKS.CREATE(
|
|
SPTEST.TASK_NAME( 1 ),
|
|
1,
|
|
RTEMS.MINIMUM_STACK_SIZE,
|
|
RTEMS.DEFAULT_MODES,
|
|
RTEMS.DEFAULT_ATTRIBUTES,
|
|
SPTEST.TASK_ID( 1 ),
|
|
STATUS
|
|
);
|
|
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
|
|
|
RTEMS.TASKS.CREATE(
|
|
SPTEST.TASK_NAME( 2 ),
|
|
1,
|
|
RTEMS.MINIMUM_STACK_SIZE,
|
|
RTEMS.DEFAULT_MODES,
|
|
RTEMS.DEFAULT_ATTRIBUTES,
|
|
SPTEST.TASK_ID( 2 ),
|
|
STATUS
|
|
);
|
|
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
|
|
|
RTEMS.TASKS.START(
|
|
SPTEST.TASK_ID( 1 ),
|
|
SPTEST.TASK_1'ACCESS,
|
|
0,
|
|
STATUS
|
|
);
|
|
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
|
|
|
RTEMS.TASKS.START(
|
|
SPTEST.TASK_ID( 2 ),
|
|
SPTEST.TASK_2'ACCESS,
|
|
0,
|
|
STATUS
|
|
);
|
|
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
|
|
|
RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
|
|
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
|
|
|
end INIT;
|
|
|
|
--
|
|
-- TASK_1
|
|
--
|
|
|
|
procedure TASK_1 (
|
|
ARGUMENT : in RTEMS.TASKS.ARGUMENT
|
|
) is
|
|
pragma Unreferenced(ARGUMENT);
|
|
TIME : RTEMS.TIME_OF_DAY;
|
|
STATUS : RTEMS.STATUS_CODES;
|
|
begin
|
|
|
|
TIME := ( 1988, 12, 31, 9, 15, 0, 0 );
|
|
|
|
RTEMS.CLOCK.SET( TIME, STATUS );
|
|
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
|
|
|
|
TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
|
|
TEST_SUPPORT.PRINT_TIME( "sets clock: ", TIME, "" );
|
|
TEXT_IO.NEW_LINE;
|
|
|
|
loop
|
|
|
|
RTEMS.CLOCK.GET_TOD( TIME, STATUS );
|
|
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
|
|
|
|
TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
|
|
TEST_SUPPORT.PRINT_TIME( "going to sleep: ", TIME, "" );
|
|
TEXT_IO.NEW_LINE;
|
|
|
|
TIME.SECOND := TIME.SECOND + 5;
|
|
TIME.MINUTE := TIME.MINUTE + (TIME.SECOND / 60 );
|
|
TIME.SECOND := TIME.SECOND mod 60;
|
|
TIME.HOUR := TIME.HOUR + (TIME.MINUTE / 60 );
|
|
TIME.MINUTE := TIME.MINUTE mod 60;
|
|
TIME.HOUR := TIME.HOUR mod 24;
|
|
|
|
RTEMS.TASKS.WAKE_WHEN( TIME, STATUS );
|
|
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_WHEN" );
|
|
|
|
TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
|
|
TEST_SUPPORT.PRINT_TIME( "awakened: ", TIME, "" );
|
|
TEXT_IO.NEW_LINE;
|
|
|
|
end loop;
|
|
|
|
end TASK_1;
|
|
|
|
--
|
|
-- TASK_2
|
|
--
|
|
|
|
procedure TASK_2 (
|
|
ARGUMENT : in RTEMS.TASKS.ARGUMENT
|
|
) is
|
|
pragma Unreferenced(ARGUMENT);
|
|
TIME : RTEMS.TIME_OF_DAY;
|
|
STATUS : RTEMS.STATUS_CODES;
|
|
begin
|
|
|
|
loop
|
|
|
|
RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
|
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
|
|
|
RTEMS.CLOCK.GET_TOD( TIME, STATUS );
|
|
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
|
|
|
|
if TIME.SECOND >= 17 then
|
|
TEST_SUPPORT.ADA_TEST_END;
|
|
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
|
end if;
|
|
|
|
TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 2 ), FALSE );
|
|
TEST_SUPPORT.PRINT_TIME( " ", TIME, "" );
|
|
TEXT_IO.NEW_LINE;
|
|
|
|
end loop;
|
|
|
|
end TASK_2;
|
|
|
|
end SPTEST;
|