📄 tms.c
字号:
/*************************************************************************//* *//* Copyright Mentor Graphics Corporation 2002 *//* All Rights Reserved. *//* *//* THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS *//* THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS *//* SUBJECT TO LICENSE TERMS. *//* *//*************************************************************************//*************************************************************************//* *//* FILE NAME VERSION *//* *//* tms.c Nucleus PLUS 1.14 *//* *//* COMPONENT *//* *//* TM - Timer Management *//* *//* DESCRIPTION *//* *//* This file contains supplemental routines for the timer *//* management component. *//* *//* DATA STRUCTURES *//* *//* None *//* *//* FUNCTIONS *//* *//* TMS_Create_Timer Create an application timer *//* TMS_Delete_Timer Delete an application timer *//* TMS_Reset_Timer Reset application timer *//* TMS_Control_Timer Enable/Disable application *//* timer *//* *//* DEPENDENCIES *//* *//* cs_extr.h Common Service functions *//* tc_extr.h Thread Control functions *//* tm_extr.h Timer functions *//* hi_extr.h History functions *//* *//* HISTORY *//* *//* DATE REMARKS *//* *//* 03-01-1994 Created initial version 1.1 from *//* previous version of TMC.C *//* *//* 03-18-1994 Verified version 1.1 *//* 04-17-1996 updated to version 1.2 *//* 03-24-1998 Released version 1.3. *//* 03-26-1999 Released 1.11m (new release *//* numbering scheme) *//* 04-17-2002 Released version 1.13m *//* 11-07-2002 Released version 1.14 *//*************************************************************************/#define NU_SOURCE_FILE#include "cs_extr.h" /* Common service functions */#include "tc_extr.h" /* Thread control functions */#include "tm_extr.h" /* Timer functions */#include "hi_extr.h" /* History functions */#include "profiler.h" /* ProView interface *//* Define external inner-component global data references. */extern CS_NODE *TMD_Created_Timers_List;extern UNSIGNED TMD_Total_Timers;extern TM_TCB *TMD_Active_Timers_List;extern INT TMD_Active_List_Busy;extern TC_PROTECT TMD_Created_List_Protect;/* Define internal function prototypes. */VOID TMC_Start_Timer(TM_TCB *timer, UNSIGNED time);VOID TMC_Stop_Timer(TM_TCB *timer);/*************************************************************************//* *//* FUNCTION *//* *//* TMS_Create_Timer *//* *//* DESCRIPTION *//* *//* This function creates an application timer and places it on the *//* list of created timers. The timer is activated if designated by *//* the enable parameter. *//* *//* CALLED BY *//* *//* Application *//* TMSE_Create_Timer Error checking shell *//* *//* CALLS *//* *//* CSC_Place_On_List Add node to linked-list *//* [HIC_Make_History_Entry] Make entry in history log *//* [TCT_Check_Stack] Stack checking function *//* TCT_Protect Data structure protect *//* TCT_Unprotect Un-protect data structure *//* TMS_Control_Timer Enable the new timer *//* *//* INPUTS *//* *//* timer_ptr Timer control block pointer *//* name Timer name *//* expiration_routine Timer expiration routine *//* id Timer expiration ID *//* initial_time Initial expiration time *//* reschedule_time Reschedule expiration time *//* enable Automatic enable option *//* *//* OUTPUTS *//* *//* NU_SUCCESS *//* *//* HISTORY *//* *//* DATE REMARKS *//* *//* 03-01-1993 Created initial version 1.0 *//* 04-19-1993 Verified version 1.0 *//* 03-01-1994 Changed function prototype, *//* resulting in version 1.1 *//* *//* 03-18-1994 Verified version 1.1 *//* *//*************************************************************************/STATUS TMS_Create_Timer(NU_TIMER *timer_ptr, CHAR *name, VOID (*expiration_routine)(UNSIGNED), UNSIGNED id, UNSIGNED initial_time, UNSIGNED reschedule_time, OPTION enable){R1 TM_APP_TCB *timer; /* Timer control block ptr */INT i; /* Working index variable */NU_SUPERV_USER_VARIABLES /* Switch to supervisor mode */ NU_SUPERVISOR_MODE(); /* Move input timer pointer into internal pointer. */ timer = (TM_APP_TCB *) timer_ptr;#ifdef NU_ENABLE_STACK_CHECK /* Call stack checking function to check for an overflow condition. */ TCT_Check_Stack();#endif#ifdef NU_ENABLE_HISTORY /* Make an entry that corresponds to this function in the system history log. */ HIC_Make_History_Entry(NU_CREATE_TIMER_ID, (UNSIGNED) timer, (UNSIGNED) name, (UNSIGNED) expiration_routine);#endif /* First, clear the timer ID just in case it is an old Timer Control Block. */ timer -> tm_id = 0; /* Fill in the timer name. */ for (i = 0; i < NU_MAX_NAME; i++) timer -> tm_name[i] = name[i]; /* Load the timer with the appropriate values. */ timer -> tm_expiration_routine = expiration_routine; timer -> tm_expiration_id = id; timer -> tm_expirations = 0; timer -> tm_initial_time = initial_time; timer -> tm_reschedule_time = reschedule_time; timer -> tm_actual_timer.tm_timer_type = TM_APPL_TIMER; timer -> tm_enabled = NU_FALSE; /* Initialize link pointers. */ timer -> tm_created.cs_previous = NU_NULL; timer -> tm_created.cs_next = NU_NULL; timer -> tm_actual_timer.tm_next_timer = NU_NULL; timer -> tm_actual_timer.tm_previous_timer= NU_NULL; timer -> tm_actual_timer.tm_information = (VOID *) timer; /* Protect against access to the list of created timers. */ TCT_Protect(&TMD_Created_List_Protect); /* At this point the timer is completely built. The ID can now be set and it can be linked into the created timer list. */ timer -> tm_id = TM_TIMER_ID; /* Link the timer into the list of created timers and increment the total number of timers in the system. */ CSC_Place_On_List(&TMD_Created_Timers_List, &(timer -> tm_created)); TMD_Total_Timers++;#ifdef INCLUDE_PROVIEW _RTProf_DumpTimer(RT_PROF_CREATE_TIMER,timer,RT_PROF_OK);#endif /* Release protection against access to the list of created timers. */ TCT_Unprotect(); /* Determine if the timer should be enabled. */ if (enable == NU_ENABLE_TIMER) /* Activate the timer. */ TMS_Control_Timer(timer_ptr, NU_ENABLE_TIMER); /* Return to user mode */ NU_USER_MODE(); /* Return successful completion. */ return(NU_SUCCESS);}/*************************************************************************//* *//* FUNCTION *//* *//* TMS_Delete_Timer *//* *//* DESCRIPTION *//* *//* This function deletes an application timer and removes it from *//* the list of created timers. *//* *//* CALLED BY *//* *//* Application *//* TMSE_Delete_Timer Error checking shell *//* *//* CALLS *//* *//* CSC_Remove_From_List Remove node from list *//* [HIC_Make_History_Entry] Make entry in history log *//* [TCT_Check_Stack] Stack checking function *//* TCT_Protect Protect created list *//* TCT_System_Protect Protect active list *//* TCT_Unprotect Release protection *//* *//* INPUTS *//* *//* timer_ptr Timer control block pointer *//* *//* OUTPUTS *//* *//* NU_NOT_DISABLED Timer not disabled first *//* NU_SUCCESS *//* *//* HISTORY *//* *//* DATE REMARKS *//* *//* 03-01-1993 Created initial version 1.0 *//* 04-19-1993 Verified version 1.0 *//* 03-01-1994 Modified protection logic to use *//* system protection, changed *//* function prototype, resulting *//* in version 1.1 *//* *//* 03-18-1994 Verified version 1.1 *//* *//*************************************************************************/STATUS TMS_Delete_Timer(NU_TIMER *timer_ptr){TM_APP_TCB *timer; /* Timer control block ptr */STATUS status; /* Completion status */NU_SUPERV_USER_VARIABLES /* Switch to supervisor mode */ NU_SUPERVISOR_MODE(); /* Move input timer pointer into internal pointer. */ timer = (TM_APP_TCB *) timer_ptr;#ifdef NU_ENABLE_STACK_CHECK /* Call stack checking function to check for an overflow condition. */ TCT_Check_Stack();#endif#ifdef NU_ENABLE_HISTORY /* Make an entry that corresponds to this function in the system history log. */ HIC_Make_History_Entry(NU_DELETE_TIMER_ID, (UNSIGNED) timer, (UNSIGNED) 0, (UNSIGNED) 0);#endif /* Initialize the status. */ status = NU_SUCCESS; /* Use system protect to protect the active timer list temporarily. */ TCT_System_Protect(); /* Determine if the timer is currently disabled. */ if (timer -> tm_enabled) { /* Error, indicate to the caller that the timer is currently active. */ status = NU_NOT_DISABLED;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -