00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #define UCOSISR(signame) \
00031 void signame (void) __attribute__ ((naked)); \
00032 void signame (void)
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #define pushregs() \
00043 __asm__ __volatile__ ( \
00044 "push r0" "\n\t" \
00045 "push r1" "\n\t" \
00046 "push r2" "\n\t" \
00047 "push r3" "\n\t" \
00048 "push r4" "\n\t" \
00049 "push r5" "\n\t" \
00050 "push r6" "\n\t" \
00051 "push r7" "\n\t" \
00052 "push r8" "\n\t" \
00053 "push r9" "\n\t" \
00054 "push r10" "\n\t" \
00055 "push r11" "\n\t" \
00056 "push r12" "\n\t" \
00057 "push r13" "\n\t" \
00058 "push r14" "\n\t" \
00059 "push r15" "\n\t" \
00060 "push r16" "\n\t" \
00061 "push r17" "\n\t" \
00062 "push r18" "\n\t" \
00063 "push r19" "\n\t" \
00064 "push r20" "\n\t" \
00065 "push r21" "\n\t" \
00066 "push r22" "\n\t" \
00067 "push r23" "\n\t" \
00068 "push r24" "\n\t" \
00069 "push r25" "\n\t" \
00070 "push r26" "\n\t" \
00071 "push r27" "\n\t" \
00072 "push r28" "\n\t" \
00073 "push r29" "\n\t" \
00074 "push r30" "\n\t" \
00075 "push r31" "\n\t" \
00076 ::)
00077
00078 #ifdef RAMPZ
00079 #define pushrampz() __asm__ __volatile__ ( \
00080 "in r16,0x3b" "\n\t" \
00081 "push r16" "\n\t" \
00082 ::)
00083 #endif
00084
00085 #define pushsreg() __asm__ __volatile__ ( \
00086 "in r16,__SREG__" "\n\t" \
00087 "sbr r16,0x80" "\n\t" \
00088 "push r16" "\n\t" \
00089 ::)
00090
00091
00092 #define popregs() \
00093 __asm__ __volatile__ ( \
00094 "pop r31" "\n\t" \
00095 "pop r30" "\n\t" \
00096 "pop r29" "\n\t" \
00097 "pop r28" "\n\t" \
00098 "pop r27" "\n\t" \
00099 "pop r26" "\n\t" \
00100 "pop r25" "\n\t" \
00101 "pop r24" "\n\t" \
00102 "pop r23" "\n\t" \
00103 "pop r22" "\n\t" \
00104 "pop r21" "\n\t" \
00105 "pop r20" "\n\t" \
00106 "pop r19" "\n\t" \
00107 "pop r18" "\n\t" \
00108 "pop r17" "\n\t" \
00109 "pop r16" "\n\t" \
00110 "pop r15" "\n\t" \
00111 "pop r14" "\n\t" \
00112 "pop r13" "\n\t" \
00113 "pop r12" "\n\t" \
00114 "pop r11" "\n\t" \
00115 "pop r10" "\n\t" \
00116 "pop r9" "\n\t" \
00117 "pop r8" "\n\t" \
00118 "pop r7" "\n\t" \
00119 "pop r6" "\n\t" \
00120 "pop r5" "\n\t" \
00121 "pop r4" "\n\t" \
00122 "pop r3" "\n\t" \
00123 "pop r2" "\n\t" \
00124 "pop r1" "\n\t" \
00125 "pop r0" "\n\t" \
00126 "ret" "\n\t" \
00127 ::)
00128
00129 #ifdef RAMPZ
00130 #define poprampz() \
00131 __asm__ __volatile__ ( \
00132 "pop r16" "\n\t" \
00133 "out 0x3b,r16" "\n\t" \
00134 ::)
00135 #endif
00136
00137 #define popsreg() \
00138 __asm__ __volatile__ ( \
00139 "pop r16" "\n\t" \
00140 "out __SREG__,r16" "\n\t" \
00141 ::)
00142
00143
00144
00145
00146
00147
00148 #ifdef RAMPZ
00149 #define PushRS() {\
00150 pushregs();\
00151 pushrampz (); \
00152 pushsreg();}
00153 #else
00154 #define PushRS() {\
00155 pushregs();\
00156 pushsreg();}
00157 #endif
00158
00159 #ifdef RAMPZ
00160 #define PopRS() {\
00161 popsreg();\
00162 poprampz (); \
00163 popregs();}
00164 #else
00165 #define PopRS() {\
00166 popsreg();\
00167 popregs();}
00168 #endif
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180 #define SaveSP() \
00181 __asm__ __volatile__ ( \
00182 "in %A0,__SP_L__" "\n\t" \
00183 "in %B0,__SP_H__" "\n\t" \
00184 :"=r" (OSTCBCur->OSTCBStkPtr):)
00185