在.LST文件中,我看到如下:4141 000 0D0A C041 F060 MOVFF??高HISR + 17,BTEMP + 3 4142 000 0DE C040 F05F MOVFF??高HISR + 16,BTEMP + 2 4143 000 012 C03F F05E MOVFF??高HISR + 15,BTEMP + 1 4144 000 D16 C03E F05D MOVFF??高HISR + 14,BTEP 4145 000 0D1A C03D FFF5 MOVFF??高HISR + 13,TabLAT 4146 000 01E C03C FFF8 MOVFF??高HISR + 12,TBLPTRU 4147 000 D22 C03B FFF7 MOVFF??高HISR + 11,TBLPTRH 4148 000 026 C03A FFF6 MOVFF??高HISR + 10,TBLPTRL 4149 000 0D2A C039 FFF4 MOVFF??高HISR + 9,PRODH 4150 000 02E C038 FFF3 MOVFF??高HISR + 8,PRODL 4151 000 032 C037 FFDA MOVFF??高HISR + 7,FSR2H 4152 000 036 360FFD9 MOVFF??高HISR + 6,FSR2L 4153 000 0D3A C035 FFE2 MOVFF??高HISR + 5,FSR1H 4154 000 0D3E C034 FFE1 MOVFF??高HISR + 4,FSR1L 4155 000 D42 C033 FFEA MOVFF??高HISR + 3,FSR0H 4156 000 D46 C032 FFE9 MOVFF??高HISR + 2,FSR0L 4157 000 0D4A C031 FFFB MOVFF??高HISR + 1,PCLATU 4158 000 0D4E C030 FFFA MOVFF??高HISISR,PCLASE 4159 000 0D52 925D BCF BTEMP,1,C;清除编译器中断标志(级别2)4160 000 054 54 0011 RIFFE F 4161 000 056 56ON Enthi of HyHysISR:似乎BTEMP是长的,这将解释为什么在BTEP和缓冲器的开始之间有小于34个字节的缓冲区被覆盖。但是我不理解这个代码意味着什么以及它为什么在那里……(好的,在执行ISR之前和之后的某种上下文保存和恢复)
以上来自于百度翻译
以下为原文
In the .lst file I see the following:
4141 000D0A C041 F060 movff ??_high_isr+17,btemp+3
4142 000D0E C040 F05F movff ??_high_isr+16,btemp+2
4143 000D12 C03F F05E movff ??_high_isr+15,btemp+1
4144 000D16 C03E F05D movff ??_high_isr+14,btemp
4145 000D1A C03D FFF5 movff ??_high_isr+13,tablat
4146 000D1E C03C FFF8 movff ??_high_isr+12,tblptru
4147 000D22 C03B FFF7 movff ??_high_isr+11,tblptrh
4148 000D26 C03A FFF6 movff ??_high_isr+10,tblptrl
4149 000D2A C039 FFF4 movff ??_high_isr+9,prodh
4150 000D2E C038 FFF3 movff ??_high_isr+8,prodl
4151 000D32 C037 FFDA movff ??_high_isr+7,fsr2h
4152 000D36 C036 FFD9 movff ??_high_isr+6,fsr2l
4153 000D3A C035 FFE2 movff ??_high_isr+5,fsr1h
4154 000D3E C034 FFE1 movff ??_high_isr+4,fsr1l
4155 000D42 C033 FFEA movff ??_high_isr+3,fsr0h
4156 000D46 C032 FFE9 movff ??_high_isr+2,fsr0l
4157 000D4A C031 FFFB movff ??_high_isr+1,pclatu
4158 000D4E C030 FFFA movff ??_high_isr,pclath
4159 000D52 925D bcf btemp,1,c ;clear compiler interrupt flag (level 2)
4160 000D54 0011 retfie f
4161 000D56 __end_of_high_isr:
seems that btemp is a long and this would explain why the buffer is overwritten if there is less than
3 4 bytes between btemp and the start of the buffer.
But I do not understand what this code means and why it is there ...
(ok, some sort of context-saving and -restoring before and after the ISR is executed)