135 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			135 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
|  | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | ||
|  | 
 | ||
|  | <!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
 | ||
|  | original version by:  Nikos Drakos, CBLU, University of Leeds | ||
|  | * revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan | ||
|  | * with significant contributions from: | ||
|  |   Jens Lippmann, Marek Rouchal, Martin Wilck and others --> | ||
|  | <HTML> | ||
|  | <HEAD> | ||
|  | <TITLE>3.10 Functions using private banks</TITLE> | ||
|  | <META NAME="description" CONTENT="3.10 Functions using private banks"> | ||
|  | <META NAME="keywords" CONTENT="sdccman"> | ||
|  | <META NAME="resource-type" CONTENT="document"> | ||
|  | <META NAME="distribution" CONTENT="global"> | ||
|  | 
 | ||
|  | <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> | ||
|  | <META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release"> | ||
|  | <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> | ||
|  | 
 | ||
|  | <LINK REL="STYLESHEET" HREF="sdccman.css"> | ||
|  | 
 | ||
|  | <LINK REL="next" HREF="node30.html"> | ||
|  | <LINK REL="previous" HREF="node28.html"> | ||
|  | <LINK REL="up" HREF="node19.html"> | ||
|  | <LINK REL="next" HREF="node30.html"> | ||
|  | </HEAD> | ||
|  | 
 | ||
|  | <BODY > | ||
|  | <!--Navigation Panel--> | ||
|  | <A NAME="tex2html682" | ||
|  |  HREF="node30.html"> | ||
|  | <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A>  | ||
|  | <A NAME="tex2html676" | ||
|  |  HREF="node19.html"> | ||
|  | <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A>  | ||
|  | <A NAME="tex2html670" | ||
|  |  HREF="node28.html"> | ||
|  | <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A>  | ||
|  | <A NAME="tex2html678" | ||
|  |  HREF="node1.html"> | ||
|  | <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A>  | ||
|  | <A NAME="tex2html680" | ||
|  |  HREF="node61.html"> | ||
|  | <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A>  | ||
|  | <BR> | ||
|  | <B> Next:</B> <A NAME="tex2html683" | ||
|  |  HREF="node30.html">3.11 Absolute Addressing</A> | ||
|  | <B> Up:</B> <A NAME="tex2html677" | ||
|  |  HREF="node19.html">3. Using SDCC</A> | ||
|  | <B> Previous:</B> <A NAME="tex2html671" | ||
|  |  HREF="node28.html">3.9 Naked Functions</A> | ||
|  |    <B>  <A NAME="tex2html679" | ||
|  |  HREF="node1.html">Contents</A></B>  | ||
|  |    <B>  <A NAME="tex2html681" | ||
|  |  HREF="node61.html">Index</A></B>  | ||
|  | <BR> | ||
|  | <BR> | ||
|  | <!--End of Navigation Panel--> | ||
|  | 
 | ||
|  | <H2><A NAME="SECTION000410000000000000000"> | ||
|  | 3.10 Functions using private banks</A> | ||
|  | </H2> | ||
|  | 
 | ||
|  | <P> | ||
|  | The <I>using</I> attribute (which tells the compiler to use a register | ||
|  | bank other than the default bank zero) should only be applied to <I>interrupt</I> | ||
|  | functions (see note 1 below). This will in most circumstances make | ||
|  | the generated ISR code more efficient since it will not have to save | ||
|  | registers on the stack. | ||
|  | 
 | ||
|  | <P> | ||
|  | The <I>using</I> attribute will have no effect on the generated code | ||
|  | for a <I>non-interrupt</I> function (but may occasionally be useful | ||
|  | anyway<A NAME="tex2html1" | ||
|  |  HREF="footnode.html#foot531"><SUP>1</SUP></A>). | ||
|  | <BR> | ||
|  | <I>(pending: I don't think this has been done yet)</I> | ||
|  | 
 | ||
|  | <P> | ||
|  | An <I>interrupt</I> function using a non-zero bank will assume that | ||
|  | it can trash that register bank, and will not save it. Since high-priority | ||
|  | interrupts can interrupt low-priority ones on the 8051 and friends, | ||
|  | this means that if a high-priority ISR <I>using</I> a particular bank | ||
|  | occurs while processing a low-priority ISR <I>using</I> the same bank, | ||
|  | terrible and bad things can happen. To prevent this, no single register | ||
|  | bank should be <I>used</I> by both a high priority and a low priority | ||
|  | ISR. This is probably most easily done by having all high priority | ||
|  | ISRs use one bank and all low priority ISRs use another. If you have | ||
|  | an ISR which can change priority at runtime, you're on your own: I | ||
|  | suggest using the default bank zero and taking the small performance | ||
|  | hit. | ||
|  | 
 | ||
|  | <P> | ||
|  | It is most efficient if your ISR calls no other functions. If your | ||
|  | ISR must call other functions, it is most efficient if those functions | ||
|  | use the same bank as the ISR (see note 1 below); the next best is | ||
|  | if the called functions use bank zero. It is very inefficient to call | ||
|  | a function using a different, non-zero bank from an ISR.  | ||
|  | 
 | ||
|  | <P> | ||
|  | <HR> | ||
|  | <!--Navigation Panel--> | ||
|  | <A NAME="tex2html682" | ||
|  |  HREF="node30.html"> | ||
|  | <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A>  | ||
|  | <A NAME="tex2html676" | ||
|  |  HREF="node19.html"> | ||
|  | <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A>  | ||
|  | <A NAME="tex2html670" | ||
|  |  HREF="node28.html"> | ||
|  | <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A>  | ||
|  | <A NAME="tex2html678" | ||
|  |  HREF="node1.html"> | ||
|  | <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A>  | ||
|  | <A NAME="tex2html680" | ||
|  |  HREF="node61.html"> | ||
|  | <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A>  | ||
|  | <BR> | ||
|  | <B> Next:</B> <A NAME="tex2html683" | ||
|  |  HREF="node30.html">3.11 Absolute Addressing</A> | ||
|  | <B> Up:</B> <A NAME="tex2html677" | ||
|  |  HREF="node19.html">3. Using SDCC</A> | ||
|  | <B> Previous:</B> <A NAME="tex2html671" | ||
|  |  HREF="node28.html">3.9 Naked Functions</A> | ||
|  |    <B>  <A NAME="tex2html679" | ||
|  |  HREF="node1.html">Contents</A></B>  | ||
|  |    <B>  <A NAME="tex2html681" | ||
|  |  HREF="node61.html">Index</A></B>  | ||
|  | <!--End of Navigation Panel--> | ||
|  | <ADDRESS> | ||
|  | <I>Johan Knol</I> | ||
|  | <BR><I>2001-07-13</I> | ||
|  | </ADDRESS> | ||
|  | </BODY> | ||
|  | </HTML> |