📄 sptest.adb
字号:
---- SPTEST / BODY---- DESCRIPTION:---- This package is the implementation of Test 9 of the RTEMS-- Single Processor Test Suite.---- DEPENDENCIES: ---- ---- COPYRIGHT (c) 1989-1997.-- 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.com/license/LICENSE.---- $Id: sptest.adb,v 1.7.2.2 2003/09/04 18:43:37 joel Exp $--with INTERFACES; use INTERFACES;with RTEMS;with TEST_SUPPORT;with TEXT_IO;package body SPTEST is--PAGE-- -- INIT-- procedure INIT ( ARGUMENT : in RTEMS.TASK_ARGUMENT ) is STATUS : RTEMS.STATUS_CODES; begin TEXT_IO.NEW_LINE( 2 ); TEXT_IO.PUT_LINE( "*** TEST 9 ***" ); SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' ); SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' ); SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' ); SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'A', '4', ' ' ); SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME( 'T', 'A', '5', ' ' ); SPTEST.TASK_NAME( 6 ) := RTEMS.BUILD_NAME( 'T', 'A', '6', ' ' ); SPTEST.TASK_NAME( 7 ) := RTEMS.BUILD_NAME( 'T', 'A', '7', ' ' ); SPTEST.TASK_NAME( 8 ) := RTEMS.BUILD_NAME( 'T', 'A', '8', ' ' ); SPTEST.TASK_NAME( 9 ) := RTEMS.BUILD_NAME( 'T', 'A', '9', ' ' ); SPTEST.TASK_NAME( 10 ) := RTEMS.BUILD_NAME( 'T', 'A', 'A', ' ' ); SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' ); SPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' ); SPTEST.SEMAPHORE_NAME( 2 ) := RTEMS.BUILD_NAME( 'S', 'M', '2', ' ' ); SPTEST.SEMAPHORE_NAME( 3 ) := RTEMS.BUILD_NAME( 'S', 'M', '3', ' ' ); SPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' ); SPTEST.QUEUE_NAME( 2 ) := RTEMS.BUILD_NAME( 'M', 'Q', '2', ' ' ); SPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME( 'P', 'T', '1', ' ' ); SPTEST.REGION_NAME( 1 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' ); SPTEST.PORT_NAME( 1 ) := RTEMS.BUILD_NAME( 'D', 'P', '1', ' ' ); SPTEST.PERIOD_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );-- RTEMS.TASK_CREATE(-- SPTEST.TASK_NAME( 1 ),-- 4,-- 10,-- RTEMS.DEFAULT_MODES,-- RTEMS.DEFAULT_ATTRIBUTES,-- SPTEST.TASK_ID( 1 ),-- STATUS-- );-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(-- STATUS,-- RTEMS.INVALID_SIZE,-- "TASK_CREATE WITH ILLEGAL STACK SIZE"-- ); TEXT_IO.PUT_LINE( "INIT - task_create - INVALID_SIZE -- NOT CHECKED" ); RTEMS.TASK_CREATE( SPTEST.TASK_NAME( 1 ), 0, 2048, RTEMS.DEFAULT_MODES, RTEMS.DEFAULT_ATTRIBUTES, SPTEST.TASK_ID( 1 ), STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_PRIORITY, "TASK_CREATE WITH ILLEGAL PRIORITY" ); TEXT_IO.PUT_LINE( "INIT - task_create - INVALID_PRIORITY" ); RTEMS.TASK_CREATE( SPTEST.TASK_NAME( 1 ), 4, 2048, RTEMS.DEFAULT_MODES, RTEMS.DEFAULT_ATTRIBUTES, SPTEST.TASK_ID( 1 ), STATUS ); TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" ); RTEMS.TASK_RESTART( SPTEST.TASK_ID( 1 ), 0, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INCORRECT_STATE, "TASK_RESTART OF DORMANT TASK" ); TEXT_IO.PUT_LINE( "INIT - task_restart - INCORRECT_STATE" ); RTEMS.TASK_START( SPTEST.TASK_ID( 1 ), SPTEST.TASK_1'ACCESS, 0, STATUS ); TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" ); RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); end INIT;--PAGE-- -- DELAYED_SUBPROGRAM-- procedure DELAYED_SUBPROGRAM ( IGNORED_ID : in RTEMS.ID; IGNORED_ADDRESS : in RTEMS.ADDRESS ) is begin NULL; end DELAYED_SUBPROGRAM;--PAGE-- -- SERVICE_ROUTINE-- procedure SERVICE_ROUTINE ( IGNORED : in RTEMS.VECTOR_NUMBER ) is begin NULL; end SERVICE_ROUTINE;--PAGE-- -- SCREEN_1-- procedure SCREEN_1 is NOTEPAD_VALUE : RTEMS.UNSIGNED32; SELF_ID : RTEMS.ID; PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY; STATUS : RTEMS.STATUS_CODES; begin RTEMS.TASK_DELETE( 100, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_ID, "TASK_DELETE WITH ILLEGAL ID" ); TEXT_IO.PUT_LINE( "TA1 - task_delete - INVALID_ID" );-- RTEMS.TASK_GET_NOTE( RTEMS.SELF, -- RTEMS.NOTEPAD_INDEX'LAST + 10, -- NOTEPAD_VALUE, -- STATUS -- );-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(-- STATUS,-- RTEMS.INVALID_NUMBER,-- "TASK_GET_NOTE WITH ILLEGAL NOTEPAD"-- );-- TEXT_IO.PUT_LINE( "TA1 - task_get_note - INVALID_NUMBER" ); TEXT_IO.PUT_LINE( "TA1 - task_get_note - INVALID_NUMBER -- constraint error" ); RTEMS.TASK_GET_NOTE( 100, RTEMS.NOTEPAD_INDEX'LAST, NOTEPAD_VALUE, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_ID, "TASK_GET_NOTE WITH ILLEGAL ID" ); TEXT_IO.PUT_LINE( "TA1 - task_get_note - INVALID_ID" ); RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, SELF_ID, STATUS ); TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" ); if SELF_ID /= SPTEST.TASK_ID( 1 ) then TEXT_IO.PUT_LINE( "ERROR - task_ident - incorrect ID returned!" ); RTEMS.SHUTDOWN_EXECUTIVE( 0 ); end if; TEXT_IO.PUT_LINE( "TA1 - task_ident - current task SUCCESSFUL" ); RTEMS.TASK_IDENT( 100, RTEMS.SEARCH_ALL_NODES, SPTEST.JUNK_ID, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_NAME, "TASK_IDENT WITH ILLEGAL NAME (local)" ); TEXT_IO.PUT_LINE( "TA1 - task_ident - global INVALID_NAME" ); RTEMS.TASK_IDENT( 100, 1, SPTEST.JUNK_ID, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_NAME, "TASK_IDENT WITH ILLEGAL NAME (global)" ); TEXT_IO.PUT_LINE( "TA1 - task_ident - local INVALID_NAME" ); RTEMS.TASK_IDENT( 100, 2, SPTEST.JUNK_ID, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_NODE, "TASK_IDENT WITH ILLEGAL NODE" ); TEXT_IO.PUT_LINE( "TA1 - task_ident - INVALID_NODE" ); RTEMS.TASK_RESTART( 100, 0, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_ID, "TASK_RESTART WITH ILLEGAL ID" ); TEXT_IO.PUT_LINE( "TA1 - task_restart - INVALID_ID" ); RTEMS.TASK_RESUME( 100, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_ID, "TASK_RESUME WITH ILLEGAL ID" ); TEXT_IO.PUT_LINE( "TA1 - task_resume - INVALID_ID" ); RTEMS.TASK_RESUME( RTEMS.SELF, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INCORRECT_STATE, "TASK_RESUME OF READY TASK" ); TEXT_IO.PUT_LINE( "TA1 - task_resume - INCORRECT_STATE" );-- RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 512, PREVIOUS_PRIORITY, STATUS );-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(-- STATUS,-- RTEMS.INVALID_PRIORITY,-- "TASK_SET_PRIORITY WITH ILLEGAL PRIORITY"-- );-- TEXT_IO.PUT_LINE(-- "TA1 - task_set_priority - INVALID_PRIORITY"-- ); TEXT_IO.PUT_LINE( "TA1 - task_set_priority - INVALID_PRIORITY -- constraint error" ); RTEMS.TASK_SET_PRIORITY( 100, 8, PREVIOUS_PRIORITY, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_ID, "TASK_SET_PRIORITY WITH ILLEGAL ID" ); TEXT_IO.PUT_LINE( "TA1 - task_set_priority - INVALID_ID" );-- RTEMS.TASK_SET_NOTE( RTEMS.SELF, -- RTEMS.NOTEPAD_INDEX'LAST + 10, -- NOTEPAD_VALUE, -- STATUS -- );-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(-- STATUS,-- RTEMS.INVALID_NUMBER,-- "TASK_SET_NOTE WITH ILLEGAL NOTEPAD"-- );-- TEXT_IO.PUT_LINE( "TA1 - task_set_note - INVALID_NUMBER" ); TEXT_IO.PUT_LINE( "TA1 - task_set_note - INVALID_NUMBER -- constraint error" ); RTEMS.TASK_SET_NOTE( 100, RTEMS.NOTEPAD_INDEX'LAST, NOTEPAD_VALUE, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_ID, "TASK_SET_NOTE WITH ILLEGAL ID" ); TEXT_IO.PUT_LINE( "TA1 - task_set_note - INVALID_ID" ); RTEMS.TASK_START( 100, SPTEST.TASK_1'ACCESS, 0, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_ID, "TASK_START WITH ILLEGAL ID" ); TEXT_IO.PUT_LINE( "TA1 - task_start - INVALID_ID" ); RTEMS.TASK_START( RTEMS.SELF, SPTEST.TASK_1'ACCESS, 0, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INCORRECT_STATE, "TASK_START OF READY TASK" ); TEXT_IO.PUT_LINE( "TA1 - task_start - INCORRECT_STATE" ); RTEMS.TASK_SUSPEND( 100, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_ID, "TASK_SUSPEND WITH INVALID ID" ); TEXT_IO.PUT_LINE( "TA1 - task_suspend - INVALID_ID" ); end SCREEN_1;--PAGE-- -- SCREEN_2-- procedure SCREEN_2 is TIME : RTEMS.TIME_OF_DAY; STATUS : RTEMS.STATUS_CODES; begin-- errors before clock is set RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS ); if RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then TEXT_IO.PUT_LINE( "TA1 - clock_get - NOT_DEFINED -- DID THE BSP SET THE TIME OF DAY?" ); else TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.NOT_DEFINED, "CLOCK_GET BEFORE CLOCK IS SET" ); TEXT_IO.PUT_LINE( "TA1 - clock_get - NOT_DEFINED" ); end if; RTEMS.TASK_WAKE_WHEN( TIME, STATUS ); if RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then TEXT_IO.PUT( "TA1 - task_wake_when - NOT_DEFINED -- " ); TEXT_IO.PUT_LINE( "DID THE BSP SET THE TIME OF DAY?" ); else TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.NOT_DEFINED, "TASK_WAKE_WHEN BEFORE CLOCK IS SET" ); TEXT_IO.PUT_LINE( "TA1 - task_wake_when - NOT_DEFINED" ); end if; RTEMS.TIMER_FIRE_WHEN( 0, TIME, SPTEST.DELAYED_SUBPROGRAM'ACCESS, RTEMS.NULL_ADDRESS, STATUS ); if RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then TEXT_IO.PUT( "TA1 - task_fire_when - NOT_DEFINED -- " ); TEXT_IO.PUT_LINE( "DID THE BSP SET THE TIME OF DAY?" ); else TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.NOT_DEFINED, "TIMER_FIRE_WHEN BEFORE CLOCK IS SET" ); TEXT_IO.PUT_LINE( "TA1 - timer_fire_when - NOT_DEFINED" ); end if;-- invalid time of day field TIME := ( 1987, 2, 5, 8, 30, 45, 0 ); TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); RTEMS.CLOCK_SET( TIME, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_CLOCK, "CLOCK_SET WITH INVALID YEAR" ); TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); TIME := ( 1988, 15, 5, 8, 30, 45, 0 ); TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); RTEMS.CLOCK_SET( TIME, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_CLOCK, "CLOCK_SET WITH INVALID MONTH" ); TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); TIME := ( 1988, 2, 32, 8, 30, 45, 0 ); TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); RTEMS.CLOCK_SET( TIME, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_CLOCK, "CLOCK_SET WITH INVALID DAY" ); TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); TIME := ( 1988, 2, 5, 25, 30, 45, 0 ); TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); RTEMS.CLOCK_SET( TIME, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_CLOCK, "CLOCK_SET WITH INVALID HOUR" ); TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); TIME := ( 1988, 2, 5, 8, 61, 45, 0 ); TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); RTEMS.CLOCK_SET( TIME, STATUS ); TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( STATUS, RTEMS.INVALID_CLOCK, "CLOCK_SET WITH INVALID MINUTE" ); TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); TIME := ( 1988, 2, 5, 8, 30, 61, 0 ); TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -