| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| 18F и Hardware Stack http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=1030 |
Страница 1 от 1 |
| Автор: | Bezmozachen [ Пон Сеп 19, 2005 3:32 pm ] |
| Заглавие: | 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. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|