<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.mcselec.com/bavr/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=%24FRAMEPROTECT%2Fde</id>
		<title>$FRAMEPROTECT/de - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=%24FRAMEPROTECT%2Fde"/>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=$FRAMEPROTECT/de&amp;action=history"/>
		<updated>2026-04-17T13:01:52Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.18.6</generator>

	<entry>
		<id>http://wiki.mcselec.com/bavr/index.php?title=$FRAMEPROTECT/de&amp;diff=1934&amp;oldid=prev</id>
		<title>Admin: 1 revision</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=$FRAMEPROTECT/de&amp;diff=1934&amp;oldid=prev"/>
				<updated>2013-02-15T19:06:58Z</updated>
		
		<summary type="html">&lt;p&gt;1 revision&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:06, 15 February 2013&lt;/td&gt;
		&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://wiki.mcselec.com/bavr/index.php?title=$FRAMEPROTECT/de&amp;diff=1933&amp;oldid=prev</id>
		<title>Admin at 19:31, 6 February 2013</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=$FRAMEPROTECT/de&amp;diff=1933&amp;oldid=prev"/>
				<updated>2013-02-06T19:31:49Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== (**COPIED FROM ENGLISH PAGE**) === &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Action&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
This directive will enable or disable interrupt frame protection.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Syntax&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;$FRAMEPROTECT =&amp;amp;nbsp;&amp;lt;/span&amp;gt;value&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Remarks&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Value must be a constant expression that evaluates to false (0) or true (&amp;lt;&amp;gt;0).&lt;br /&gt;
&lt;br /&gt;
By&amp;amp;nbsp;&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;default&amp;amp;nbsp;&amp;lt;/span&amp;gt;the frame protection is&amp;amp;nbsp;&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;off&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
When a user function/sub passes parameters with byval, a copy is created and passed to the user sub/function.&lt;br /&gt;
&lt;br /&gt;
When an interrupt is executed, and it calls user sub/functions with parameters passed with byval, the values can get corrupted.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
When activated, the compiler disables interrupts before passing variables, and enables interrupts (when they were enabled) inside the user sub/function. This ensures that the values can not get corrupted from an interrupt which is calling other user sub/functions.&lt;br /&gt;
&lt;br /&gt;
When you do not call user sub/functions from inside your interrupt you can omit the $frameprotect directive or set it to 0 in order to reduce code.&lt;br /&gt;
&lt;br /&gt;
In version 2075 the compiler had frame protection as a default, and the $NOFRAMEPROTECT served as an override. While you can still use $NOFRAMEPROTECT, it is off by default in 2076 to the preferred switch is $FRAMEPROTECT = 0|1&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
When you activate frame protection the internal constant named _FPROTECT will be set to 1.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
When you have a user function that calls an ASM library, you must include code to restore the I-flag.&lt;br /&gt;
&lt;br /&gt;
The bcd.lib user lib sample demonstrates this with this code&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;IF _FPROTECT&lt;br /&gt;
&lt;br /&gt;
Out sreg,r3 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;; restore I flag&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;ENDIF&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;See also&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;[[$NOFRAMEPROTECT]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Example&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;source lang=&amp;quot;bascomavr&amp;quot;&amp;gt;&lt;br /&gt;
'************************************************&lt;br /&gt;
' TESTING THE FRAME PARAMETER PASSING&lt;br /&gt;
' UNDER HEAVY INTERRUPT LOAD&lt;br /&gt;
'************************************************&lt;br /&gt;
 &lt;br /&gt;
' file: frame_pass_test.bas&lt;br /&gt;
 &lt;br /&gt;
$regfile = &amp;quot;m88def.dat&amp;quot;&lt;br /&gt;
$crystal = 8000000&lt;br /&gt;
$hwstack = 100&lt;br /&gt;
$swstack = 100&lt;br /&gt;
$framesize = 100&lt;br /&gt;
 &lt;br /&gt;
$noframeprotect ' in this sample, disabling the frame protection will result in errors&lt;br /&gt;
$frameprotect=0 ' from version 2076, this is the preferred method&lt;br /&gt;
 &lt;br /&gt;
Dim Ww As Word , Www As Word , Wwww As Word&lt;br /&gt;
Declare Sub Stack_checking(byval Identifier As Integer )&lt;br /&gt;
 &lt;br /&gt;
$baud = 19200&lt;br /&gt;
Open &amp;quot;com1:&amp;quot; For Binary As #1&lt;br /&gt;
 &lt;br /&gt;
Const T0_idozito = 100&lt;br /&gt;
Config Timer0 = Timer , Prescale = 1024 '256 --&amp;gt; 4.096 msec egység, 1024 --&amp;gt; 16.384 msec&lt;br /&gt;
On Ovf0 Timer0_interrupt&lt;br /&gt;
Enable Timer0&lt;br /&gt;
Start Timer0&lt;br /&gt;
Load Timer0 , T0_idozito&lt;br /&gt;
 &lt;br /&gt;
' These routines are called under the timer interrupt&lt;br /&gt;
Declare Sub Under_it_pass_1(byval Inpar1_uit As Word )&lt;br /&gt;
Declare Sub Under_it_pass_2(byval Inpar2_uit As Word )&lt;br /&gt;
Declare Sub Test()&lt;br /&gt;
' These routines are called in the main loop&lt;br /&gt;
Declare Sub Inmain_test_routine_1(byval Im1_par1 As Word , Byval Im1_par2 As Word , Byval Im1_par3 As Word , Byval Im1_par4 As Word , Byval Im1_par5 As Word , Byval Im1_par6 As Word )&lt;br /&gt;
Declare Sub Inmain_test_routine_2(byval Im2_par1 As Word , Byval Im2_par2 As Word , Byval Im2_par3 As Word , Byval Im2_par4 As Word , Byval Im2_par5 As Word , Byval Im2_par6 As Word )&lt;br /&gt;
Declare Sub Inmain_test_routine_3(byval Im3_par1 As Word , Byval Im3_par2 As Word , Byval Im3_par3 As Word , Byval Im3_par4 As Word , Byval Im3_par5 As Word , Byval Im3_par6 As Word )&lt;br /&gt;
 &lt;br /&gt;
' Routine-1 parameters are stored here&lt;br /&gt;
Dim Dim1_p1 As Word&lt;br /&gt;
Dim Dim1_p2 As Word&lt;br /&gt;
Dim Dim1_p3 As Word&lt;br /&gt;
Dim Dim1_p4 As Word&lt;br /&gt;
Dim Dim1_p5 As Word&lt;br /&gt;
Dim Dim1_p6 As Word&lt;br /&gt;
 &lt;br /&gt;
' Routine-3 parameters are stored here&lt;br /&gt;
Dim Dim3_p1 As Word&lt;br /&gt;
Dim Dim3_p2 As Word&lt;br /&gt;
Dim Dim3_p3 As Word&lt;br /&gt;
Dim Dim3_p4 As Word&lt;br /&gt;
Dim Dim3_p5 As Word&lt;br /&gt;
Dim Dim3_p6 As Word&lt;br /&gt;
 &lt;br /&gt;
Program_begins_here:&lt;br /&gt;
 Enable Interrupts&lt;br /&gt;
 Print #1 , &amp;quot;PROGRAM BEGIN&amp;quot;&lt;br /&gt;
 Do&lt;br /&gt;
 Call Inmain_test_routine_1(&amp;amp;Haaaa , &amp;amp;HAAAA , &amp;amp;HAAAA , &amp;amp;HAAAA , &amp;amp;HAAAA , &amp;amp;HAAAA )&lt;br /&gt;
 &lt;br /&gt;
 Call Inmain_test_routine_2(&amp;amp;Haaaa , &amp;amp;HAAAA , &amp;amp;HAAAA , &amp;amp;HAAAA , &amp;amp;HAAAA , &amp;amp;HAAAA )&lt;br /&gt;
 &lt;br /&gt;
 Call Inmain_test_routine_3(&amp;amp;Haaaa , &amp;amp;HAAAA , &amp;amp;HAAAA , &amp;amp;HAAAA , &amp;amp;HAAAA , &amp;amp;HAAAA )&lt;br /&gt;
 Loop&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
' All the three routines always gets all parameters as &amp;amp;hAAAA, if they see anything else, they print an error&lt;br /&gt;
' routine_1 stores to DIM area and checks the stored values&lt;br /&gt;
' routine 2 check immediately the incoming parameters&lt;br /&gt;
' routine_3 completely identical to routine_1, except the parameter passing protection&lt;br /&gt;
'&lt;br /&gt;
 &lt;br /&gt;
Sub Inmain_test_routine_1(byval Im1_par1 As Word , Byval Im1_par2 As Word , Byval Im1_par3 As Word , Byval Im1_par4 As Word , Byval Im1_par5 As Word , Byval Im1_par6 As Word )&lt;br /&gt;
 Dim1_p1 = Im1_par1 : Dim1_p2 = Im1_par2 : Dim1_p3 = Im1_par3 : Dim1_p4 = Im1_par4 : Dim1_p5 = Im1_par5 : Dim1_p6 = Im1_par6&lt;br /&gt;
 If Dim1_p1 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Dim1_p2 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Dim1_p3 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Dim1_p4 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Dim1_p5 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Dim1_p6 &amp;lt;&amp;gt; &amp;amp;HAAAA Then&lt;br /&gt;
 Print #1 , &amp;quot; PAR ERROR R1 &amp;quot; ; Hex(dim1_p1 ) ; &amp;quot; &amp;quot; ; Hex(dim1_p2 ) ; &amp;quot; &amp;quot; ; Hex(dim1_p3 ) ; &amp;quot; &amp;quot; ;&lt;br /&gt;
 Print #1 , Hex(dim1_p4 ) ; &amp;quot; &amp;quot; ; Hex(dim1_p5 ) ; &amp;quot; &amp;quot; ; Hex(dim1_p6 )&lt;br /&gt;
 End If&lt;br /&gt;
End Sub&lt;br /&gt;
 &lt;br /&gt;
Sub Inmain_test_routine_2(byval Im2_par1 As Word , Byval Im2_par2 As Word , Byval Im2_par3 As Word , Byval Im2_par4 As Word , Byval Im2_par5 As Word , Byval Im2_par6 As Word )&lt;br /&gt;
 If Im2_par1 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Im2_par2 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Im2_par3 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Im2_par4 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Im2_par5 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Im2_par6 &amp;lt;&amp;gt; &amp;amp;HAAAA Then&lt;br /&gt;
 Print #1 , &amp;quot; PAR ERROR R2 &amp;quot; ; Hex(im2_par1 ) ; &amp;quot; &amp;quot; ; Hex(im2_par2 ) ; &amp;quot; &amp;quot; ; Hex(im2_par3 ) ; &amp;quot; &amp;quot; ;&lt;br /&gt;
 Print #1 , Hex(im2_par4 ) ; &amp;quot; &amp;quot; ; Hex(im2_par5 ) ; &amp;quot; &amp;quot; ; Hex(im2_par6 )&lt;br /&gt;
 End If&lt;br /&gt;
End Sub&lt;br /&gt;
 &lt;br /&gt;
Sub Inmain_test_routine_3(byval Im3_par1 As Word , Byval Im3_par2 As Word , Byval Im3_par3 As Word , Byval Im3_par4 As Word , Byval Im3_par5 As Word , Byval Im3_par6 As Word )&lt;br /&gt;
 Dim3_p1 = Im3_par1 : Dim3_p2 = Im3_par2 : Dim3_p3 = Im3_par3 : Dim3_p4 = Im3_par4 : Dim3_p5 = Im3_par5 : Dim3_p6 = Im3_par6&lt;br /&gt;
 If Dim3_p1 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Dim3_p2 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Dim3_p3 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Dim3_p4 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Dim3_p5 &amp;lt;&amp;gt; &amp;amp;HAAAA Or Dim3_p6 &amp;lt;&amp;gt; &amp;amp;HAAAA Then&lt;br /&gt;
 Print #1 , &amp;quot; PAR ERROR R3 &amp;quot; ; Hex(dim3_p1 ) ; &amp;quot; &amp;quot; ; Hex(dim3_p2 ) ; &amp;quot; &amp;quot; ; Hex(dim3_p3 ) ; &amp;quot; &amp;quot; ;&lt;br /&gt;
 Print #1 , Hex(dim3_p4 ) ; &amp;quot; &amp;quot; ; Hex(dim3_p5 ) ; &amp;quot; &amp;quot; ; Hex(dim3_p6 )&lt;br /&gt;
 End If&lt;br /&gt;
End Sub&lt;br /&gt;
 &lt;br /&gt;
Dim Under_it_store_1 As Word&lt;br /&gt;
Dim Under_it_store_2 As Word&lt;br /&gt;
 &lt;br /&gt;
' these two routines are called under timer IT&lt;br /&gt;
' They don't do much, except use the frame for parameter passing&lt;br /&gt;
 &lt;br /&gt;
Sub Under_it_pass_1(byval Inpar1_uit As Word )&lt;br /&gt;
 Under_it_store_1 = Inpar1_uit&lt;br /&gt;
End Sub&lt;br /&gt;
 &lt;br /&gt;
Sub Under_it_pass_2(byval Inpar2_uit As Word )&lt;br /&gt;
 Under_it_store_2 = Inpar2_uit&lt;br /&gt;
End Sub&lt;br /&gt;
 &lt;br /&gt;
' Timer IT calling two routines which use the frame&lt;br /&gt;
 &lt;br /&gt;
Timer0_interrupt:&lt;br /&gt;
 Load Timer0 , T0_idozito&lt;br /&gt;
 Call Under_it_pass_1(&amp;amp;H5555 )&lt;br /&gt;
 Call Under_it_pass_2(&amp;amp;H3333 )&lt;br /&gt;
Return&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/source&amp;gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BASCOM Language Reference/de]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>