sig 8c source


Main Page Main Page Related Pages Files sig.cGo to the documentation of this file.00001 /* 00002 * $Id: sig.c,v 1.6 2003/12/01 09:10:16 troth Exp $ 00003 * 00004 **************************************************************************** 00005 * 00006 * simulavr - A simulator for the Atmel AVR family of microcontrollers. 00007 * Copyright (C) 2001, 2002, 2003 Theodore A. Roth 00008 * 00009 * This program is free software; you can redistribute it and/or modify 00010 * it under the terms of the GNU General Public License as published by 00011 * the Free Software Foundation; either version 2 of the License, or 00012 * (at your option) any later version. 00013 * 00014 * This program is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 * GNU General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU General Public License 00020 * along with this program; if not, write to the Free Software 00021 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00022 * 00023 **************************************************************************** 00024 */ 00025 00026 /** 00027 * \file sig.c 00028 * \brief Public interface to signal handlers. 00029 * 00030 * This module provides a way for the simulator to process signals generated 00031 * by the native host system. Note that these signals in this context have 00032 * nothing to do with signals or interrupts as far as a program running in the 00033 * simulator is concerned. */ 00034 00035 #include <config.h> 00036 00037 #include <stdio.h> 00038 #include <stdlib.h> 00039 #include <string.h> 00040 #include <errno.h> 00041 #include <signal.h> 00042 00043 #include "avrerror.h" 00044 #include "sig.h" 00045 00046 static volatile int global_got_sigint = 0; 00047 00048 /* 00049 * Private. 00050 * 00051 * Handler for SIGINT signals. 00052 */ 00053 static void 00054 signal_handle_sigint (int signo) 00055 { 00056 global_got_sigint = 1; 00057 } 00058 00059 /** 00060 * \brief Start watching for the occurrance of the given signal. 00061 * 00062 * This function will install a signal handler which will set a flag when the 00063 * signal occurs. Once the watch has been started, periodically call 00064 * signal_has_occurred() to check if the signal was raised. 00065 */ 00066 void 00067 signal_watch_start (int signo) 00068 { 00069 struct sigaction act, oact; 00070 00071 sigemptyset (&act.sa_mask); 00072 act.sa_flags = 0; 00073 00074 switch (signo) 00075 { 00076 case SIGINT: 00077 global_got_sigint = 0; 00078 act.sa_handler = signal_handle_sigint; 00079 break; 00080 default: 00081 avr_warning ("Invalid signal: %d\n", signo); 00082 return; 00083 } 00084 00085 if (sigaction (signo, &act, &oact) < 0) 00086 avr_warning ("Failed to install signal handler: sig=%d: %s\n", signo, 00087 strerror (errno)); 00088 } 00089 00090 /** 00091 * \brief Stop watching signal. 00092 * 00093 * Restores the default signal handler for the given signal and resets the 00094 * signal flag. 00095 */ 00096 void 00097 signal_watch_stop (int signo) 00098 { 00099 struct sigaction act, oact; 00100 00101 sigemptyset (&act.sa_mask); 00102 act.sa_flags = 0; 00103 act.sa_handler = SIG_DFL; 00104 00105 signal_reset (signo); 00106 00107 if (sigaction (signo, &act, &oact) < 0) 00108 avr_warning ("Failed to restore default signal handler: sig=%d: %s\n", 00109 signo, strerror (errno)); 00110 } 00111 00112 /** 00113 * \brief Check to see if a signal has occurred. 00114 * 00115 * \return Non-zero if signal has occurred. The flag will always be reset 00116 * automatically. 00117 */ 00118 int 00119 signal_has_occurred (int signo) 00120 { 00121 int res = 0; 00122 00123 switch (signo) 00124 { 00125 case SIGINT: 00126 res = global_got_sigint; 00127 global_got_sigint = 0; 00128 break; 00129 default: 00130 avr_warning ("Invalid signal: %d", signo); 00131 } 00132 00133 return res; 00134 } 00135 00136 /** 00137 * \brief Clear the flag which indicates that a signal has ocurred. 00138 * 00139 * Use signal_reset to manually reset (i.e. clear) the flag. 00140 */ 00141 void 00142 signal_reset (int signo) 00143 { 00144 signal_has_occurred (signo); 00145 } Automatically generated by Doxygen 1.5.5 on 7 Nov 2008.

Wyszukiwarka

Podobne podstrony:
source30
Matrix3?pp source
Thread?pp source
arm biquad ?scade ?1 ?st q31? source
arm conv ?2? source
arm mat mult q15? source
Resource 8inl source
arm fir lattice init q31? source
arm fir ?cimate ?st q15? source
source11
arm correlate ?st q15? source
connector?s source
source8
register? source
passing values source
arm iir lattice init ?2? source
arm mult q31? source

więcej podobnych podstron