Проблемка с прерыванием...
|
|
retas |
Дата: Вт, 10.01.2012, 16:51 | Сообщение # 31 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
доцент2, у вас в прерывах есть неприятности в виде пауз и gosub, но действительно ли здесь проблема, узнаете проследив стек на переполнение в Протеусе.
Сообщение отредактировал
retas - Вт, 10.01.2012, 18:19
|
|
|
|
доцент2 |
Дата: Ср, 11.01.2012, 09:03 | Сообщение # 32 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
293
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
спасибо. проблема была в том, что я воспользовался не совсем правильным переводом даташита на pic. переводчик перепутал название двух таблиц ADCON1 и ANSEL. поэтому возникла путаница с аналоговыми и цыфровыми каналами. А что касается стека я пока еще не очень в этом понимаю.
|
|
|
|
retas |
Дата: Ср, 11.01.2012, 16:22 | Сообщение # 33 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
Стек держит в памяти адреса возвратов когда вы даёте команду пойти на какую то метку с которой будет необходимо вернутся и продoлжать основную прогру. Так вот стек может запомнить определённое число адресов и неболее, иначе возникнет бардак. Ну и не делайте пауз в прерывах - с них надо стараться выйти как можно быстрее, чтоб основная програ их как бы и не почувствовала. Где и как можно посмотреть на стек в протеусе: Debug / PIC CPU / Stack .
|
|
|
|
доцент2 |
Дата: Чт, 12.01.2012, 00:11 | Сообщение # 34 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
293
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
пока для меня это филькина грамота. а пожете пояснить где сдесь что?
|
|
|
|
retas |
Дата: Чт, 12.01.2012, 00:40 | Сообщение # 35 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
В показанном вами стеке 8 мест, стелка показывает что с теперешнего места прогры она соскочит на адрес выше после отработки ПП, но если в теперешнем месте прогры опять появится указание типа call, gosub... (т.е. находясь в какой то ПП указано пойти на другую ПП), то стрелка опустится. Если представить, что стрелка стоит на 8-мом адресе а по вашей прогре сработал прерыв, в котором сидит gosub, то стеку негде будет запомнить куда воротится. Словом, если програ зашла по метке на какую то ПП, то после, она мах может зайти без возвратов ещё на 7 ПП, и потом должна вернутся в началную позицию через запусанные адреса.
|
|
|
|
доцент2 |
Дата: Чт, 12.01.2012, 09:01 | Сообщение # 36 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
293
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
спасибо. надо конечно переварить это все, но пока возникли вопросы: 1. размер стека определяется моделью контроллера? 2. если перед тем как выполнить ПП (са переходом по Gosub) надо запомнить адрес возврата, следовательно в программе для данного МК количество различных ПП (Gosub) не должно превышать количество адресов в стеке (или количество адресов минус один)? 3. это относиться только к ПП (Gosub) или Goto тоже? прокоментируйте если можно.
|
|
|
|