📄 tcs.c
字号:
#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_CHANGE_TIME_SLICE_ID, (UNSIGNED) task, (UNSIGNED) time_slice, (UNSIGNED) 0);#endif /* Protect the scheduling information. */ TCT_Protect(&TCD_System_Protect); /* Save the old time slice value. */ old_time_slice = task -> tc_time_slice; /* Store the new time slice value. */ task -> tc_time_slice = time_slice; task -> tc_cur_time_slice = time_slice; /* Bug fix. Let the system know we have started a new time slice */ TMD_Time_Slice_State = TM_ACTIVE;#ifdef INCLUDE_PROVIEW _RTProf_DumpTask(task,RT_PROF_CHANGE_TIME_SLICE);#endif /* Release protection of information. */ TCT_Unprotect(); /* Return to user mode */ NU_USER_MODE(); /* Return the previous time slice value. */ return(old_time_slice);}/*************************************************************************//* *//* FUNCTION *//* *//* TCS_Control_Signals *//* *//* DESCRIPTION *//* *//* This function enables the specified signals and returns the *//* previous enable signal value back to the caller. If a newly *//* enabled signal is present and a signal handler is registered, *//* signal handling is started. *//* *//* CALLED BY *//* *//* Application *//* TCSE_Control_Signals Error checking shell *//* *//* CALLS *//* *//* [HIC_Make_History_Entry] Make entry in history log *//* TCC_Signal_Shell Task signal execution *//* [TCT_Check_Stack] Stack checking function *//* TCT_Protect Protect against other access *//* TCT_Unprotect Release protection *//* *//* INPUTS *//* *//* enable_signal_mask Enable signal mask *//* *//* OUTPUTS *//* *//* Previous signal enable mask *//* *//* HISTORY *//* *//* DATE REMARKS *//* *//* 03-01-1993 Created initial version 1.0 *//* 04-19-1993 Verified version 1.0 *//* 05-15-1993 Corrected problem with a comment *//* 05-15-1993 Verified comment repair *//* 03-01-1994 Added register optimizations, *//* modified protection logic, *//* resulting in version 1.1 *//* *//* 03-18-1994 Verified version 1.1 *//* *//*************************************************************************/UNSIGNED TCS_Control_Signals(UNSIGNED enable_signal_mask){R1 TC_TCB *task; /* Task pointer */UNSIGNED old_enable_mask; /* Old enable signal mask */NU_SUPERV_USER_VARIABLES /* Switch to supervisor mode */ NU_SUPERVISOR_MODE();#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_CONTROL_SIGNALS_ID,(UNSIGNED) enable_signal_mask, (UNSIGNED) 0, (UNSIGNED) 0);#endif /* Pickup the task pointer. */ task = (TC_TCB *) TCD_Current_Thread; /* Protect against simultaneous access. */ TCT_Protect(&TCD_System_Protect); /* Pickup the old signal mask. */ old_enable_mask = task -> tc_enabled_signals; /* Put the new mask in. */ task -> tc_enabled_signals = enable_signal_mask; /* Now, determine if the signal handler needs to be invoked. */ if ((enable_signal_mask & task -> tc_signals) && (!task -> tc_signal_active) && (task -> tc_signal_handler)) { /* Signal processing is required. */ /* Indicate that signal processing is in progress. */ task -> tc_signal_active = NU_TRUE; /* Clear the saved stack pointer to indicate that this is an in line signal handler call. */ task -> tc_saved_stack_ptr = NU_NULL;#ifdef INCLUDE_PROVIEW _RTProf_DumpTask(task,RT_PROF_CONTROL_SIGNALS);#endif /* Release protection from multiple access. */ TCT_Unprotect(); /* Call the signal handling shell. */ TCC_Signal_Shell(); } else {#ifdef INCLUDE_PROVIEW _RTProf_DumpTask(task,RT_PROF_CONTROL_SIGNALS);#endif /* Release protection. */ TCT_Unprotect(); } /* Return to user mode */ NU_USER_MODE(); /* Return the old enable mask. */ return(old_enable_mask);}/*************************************************************************//* *//* FUNCTION *//* *//* TCS_Receive_Signals *//* *//* DESCRIPTION *//* *//* This function returns the current signals back to the caller. *//* Note that the signals are cleared automatically. *//* *//* CALLED BY *//* *//* Application *//* TCSE_Receive_Signals Error checking shell *//* *//* CALLS *//* *//* [HIC_Make_History_Entry] Make entry in history log *//* [TCT_Check_Stack] Stack checking function *//* TCT_Protect Protect against other access *//* TCT_Unprotect Release protection *//* *//* INPUTS *//* *//* None *//* *//* OUTPUTS *//* *//* Current signals *//* *//* HISTORY *//* *//* DATE REMARKS *//* *//* 03-01-1993 Created initial version 1.0 *//* 04-19-1993 Verified version 1.0 *//* 03-01-1994 Modified protection logic, *//* resulting in version 1.1 *//* *//* 03-18-1994 Verified version 1.1 *//* *//*************************************************************************/UNSIGNED TCS_Receive_Signals(VOID){TC_TCB *task; /* Task pointer */UNSIGNED signals; /* Current signals */NU_SUPERV_USER_VARIABLES /* Switch to supervisor mode */ NU_SUPERVISOR_MODE();#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_RECEIVE_SIGNALS_ID, (UNSIGNED) 0, (UNSIGNED) 0, (UNSIGNED) 0);#endif /* Pickup the task pointer. */ task = (TC_TCB *) TCD_Current_Thread; /* Protect against simultaneous access. */ TCT_Protect(&TCD_System_Protect); /* Pickup the current events. */ signals = task -> tc_signals; /* Clear the current signals. */ task -> tc_signals = 0;#ifdef INCLUDE_PROVIEW _RTProf_DumpTask(task,RT_PROF_RECEIVE_SIGNALS);#endif /* Release protection. */ TCT_Unprotect(); /* Return to user mode */ NU_USER_MODE(); /* Return the signals to the caller. */ return(signals);}/*************************************************************************//* *//* FUNCTION *//* *//* TCS_Register_Signal_Handler *//* *//* DESCRIPTION *//* *//* This function registers a signal handler for the calling task. *//* Note that if an enabled signal is present and this is the first *//* registered signal handler call, the signal is processed *//* immediately. *//* *//* CALLED BY *//* *//* Application *//* TCSE_Register_Signal_Handler Error checking shell *//* */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -