kalarm0.c

来自「eCos操作系统源码」· C语言 代码 · 共 192 行

C
192
字号
//==========================================================================////        kalarm0////        Alarm functionality test////==========================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 2003 Nick Garnett <nickg@calivar.com>//// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting the// copyright holders.// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):     nickg// Contributors:  nickg// Date:          2003-06-25// Description:   Tests the ability of alarms to be added and removed by the//                alarm functions of other alarms.////####DESCRIPTIONEND####//==========================================================================#include <cyg/kernel/kapi.h>#include <cyg/infra/testcase.h>//==========================================================================#if defined(CYGVAR_KERNEL_COUNTERS_CLOCK) && \    defined(CYGFUN_KERNEL_API_C)#include "testaux.h"//==========================================================================//#define db_printf diag_printf#define db_printf( fmt, ... )//==========================================================================static cyg_counter counter_obj;static cyg_handle_t counter;static cyg_alarm alarm_obj[3];static cyg_handle_t alarm[3];static cyg_uint32 alarmfn_called[3];//==========================================================================void alarmfn0(cyg_handle_t alarmh, cyg_addrword_t data){    db_printf("%s: %d\n",__PRETTY_FUNCTION__,cyg_counter_current_value( counter ));    // alarmfn0 just counts how many times it has been called        alarmfn_called[0]++;}//==========================================================================void alarmfn1(cyg_handle_t alarmh, cyg_addrword_t data){    db_printf("%s: %d\n",__PRETTY_FUNCTION__,cyg_counter_current_value( counter ));    alarmfn_called[1]++;    // Reschedule alarm[0] to run every tick until alarm[2] next runs.        cyg_alarm_initialize( alarm[0], cyg_counter_current_value( counter )+1, 1 );}//==========================================================================void alarmfn2(cyg_handle_t alarmh, cyg_addrword_t data){    db_printf("%s: %d\n",__PRETTY_FUNCTION__,cyg_counter_current_value( counter ));        alarmfn_called[2]++;    // Reschedule alarm[0] to run every 2 ticks until alarm[1] next runs.    cyg_alarm_initialize( alarm[0], cyg_counter_current_value( counter )+1, 2 );    // Reschedule alarm[1] to run every 3 ticks starting in 6 ticks time.        cyg_alarm_initialize( alarm[1], cyg_counter_current_value( counter )+6, 3 );}//==========================================================================void alarm0_main(void){    int i;        CYG_TEST_INIT();    // Create the counter    cyg_counter_create( &counter, &counter_obj );    // Create the alarms    cyg_alarm_create( counter,                      alarmfn0,                      0,                      &alarm[0],                      &alarm_obj[0]);    cyg_alarm_create( counter,                      alarmfn1,                      1,                      &alarm[1],                      &alarm_obj[1]);    cyg_alarm_create( counter,                      alarmfn2,                      2,                      &alarm[2],                      &alarm_obj[2]);    // Kick it all off by starting alarm[2]    cyg_alarm_initialize( alarm[2], 0, 10 );    // Run the whole thing for 10000 ticks    for( i = 0; i < 10000; i++ )        cyg_counter_tick( counter );    db_printf("alarmfn_called: %d %d %d\n",                alarmfn_called[0],alarmfn_called[1],alarmfn_called[2]);    CYG_TEST_CHECK( alarmfn_called[0]==5000, "alarmfn0 not called 5000 times\n");    CYG_TEST_CHECK( alarmfn_called[1]==2000, "alarmfn1 not called 2000 times\n");    CYG_TEST_CHECK( alarmfn_called[2]==1001, "alarmfn2 not called 1001 times\n");        CYG_TEST_PASS_FINISH("KAlarm0");}//==========================================================================externC voidcyg_start( void ){    alarm0_main();}//==========================================================================#elseexternC voidcyg_start( void ){    CYG_TEST_INIT();    CYG_TEST_NA( "This test needs CYGVAR_KERNEL_COUNTERS_CLOCK "                 "and CYGFUN_KERNEL_API_C" );}#endif//==========================================================================// End of kalarm0.c

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?