|
Bezmozachen
Ранг: Популярен
Регистриран на: Сря Апр 27, 2005 2:47 pm Мнения: 349 Местоположение: Varna
|
 18F и Hardware Stack
Един интересен проблем на който се натъкнах и за когото трябва да се внимава. По принцип в datasheets на Microchip изрично е споменато, когато се пипа TOS всички прекъсвания трябва да са забранени. Ако рагледаме работата на процесора на теория, това не би трябвало да е необходимо. И аз не го правя, но забелязах следното:
Ако се изпълнява следния код за запазване на стека (в нископриоритено прекъсване):
movff POSTDEC2,TempRegister1
Restore_Stack_Loop:
push
movff POSTDEC2,TOSH
movff POSTDEC2,TOSL
decfsz TempRegister1,F
bra Restore_Stack_Loop
и настъпи високо приоритено прекъсване по време на изпълнение на инструкция movff
Резултатът записан в TOSL или TOSH няма да е този който очакваме (Не съм изследвал проблема в подробности, но за това което пиша съм почти напълно обеден).
Едното решение е да се добавят инструкции bcf INTCON,GIEH след push и bsf INTCON,GIEH след последния movff.
Другото и по-добро според мен е movff инструкциите да се заменят с:
movf POSTDEC2,W
movwf TOSH
movf POSTDEC2,W
movwf TOSL
Някой може ли да допълни нещо по въпроса или да ме коригира, ако смята че в нещо греша.
p.s. Бях чел някъде из форомите за проблем с movff на 18-ки с extended instruction set и по специално movff FS,FD, където FD e WREG,STATUS, BSR и Fast Context Saving.
|