Микроконтроллеры | Ликбез по С для микроконтроллеров PIC |
|
---|---|---|
urry: clear_interrupt(int_RDA); - какой флаг Вы здесь сбрасываете и зачем ? |
|
|
Недавно бодался с прерываниями на ЦЦС, пока вот таким образом не сбрасывал, ничего не работало... Конкретно флаги переполнений счётчиков и внешнее. |
|
|
rfc: 1. Судя по приведённому выше фрагменту кода, разбором прерываний занимается сам css. т.е. программист предоставляет ему только обработчик конкретного прерывания. плюсы подобного подхода - простота использования, и сокрытие аппаратных тонкостей. минусы - увеличивается время входа в прерывание. 2. В других компиляторах (например HITECH или C18) разбор действительно возложен на программиста. Но. делать так: Прежде всего прочитай раздел справки: The compiler will generate code to jump to the function when the interrupt is detected. It will generate code to save and restore the machine state, and will clear the interrupt flag. To prevent the flag from being cleared add NOCLEAR after the #INT_xxxx. The application program must call ENABLE_INTERRUPTS(INT_xxxx) to initially activate the interrupt along with the ENABLE_INTERRUPTS(GLOBAL) to enable interrupts. The keywords HIGH and FAST may be used with the PCH compiler to mark an interrupt as high priority. A high-priority interrupt can interrupt another interrupt handler. An interrupt marked FAST is performed without saving or restoring any registers. You should do as little as possible and save any registers that need to be saved on your own. Interrupts marked HIGH can be used normally. See #DEVICE for information on building with high-priority interrupts. A summary of the different kinds of PIC18 interrupts: #INT_xxxx Normal (low priority) interrupt. Compiler saves/restores key registers. This interrupt will not interrupt any interrupt in progress. #INT_xxxx FAST High priority interrupt. Compiler DOES NOT save/restore key registers. This interrupt will interrupt any normal interrupt in progress. Only one is allowed in a program. #INT_xxxx HIGH High priority interrupt. Compiler saves/restores key registers. This interrupt will interrupt any normal interrupt in progress. #INT_GLOBAL Compiler generates no interrupt code. User function is located at address 8 for user interrupt handling. Есть там и управление сбросом флаг - авто\вручную и управление приоритетом... |
|
|
dosikus: Прежде всего прочитай раздел справки: Если дочитать ветку до конца, то станет ясно, что проблемы ни у кого нет. Обязательно копипастить по килобайту вырезок? ссылки, обычно, достаточно. |
|
|
rfc: Интересно, зачем мне читать справку от компилятора, которым я не пользуюсь? Мне от того, которым пользуюсь, чтива за глаза хватает. Что бы не делать скоропалительных выводов, сбивая других с толку. |
|
|
dosikus: Что бы не делать скоропалительных выводов, сбивая других с толку. |
|
|
Добрый день! Работаю в связке MPLAB+CCS уже почти год! Перешел с Hi-Tach. Из-за чего на работе на меня постоянно пытаются "наехать" - мол какой-то он глючный! До недавнего времени мне с легкостью удавалось отбиваться, но недавно столкнулся с проблемой! До этого проекта я использовал однолистинговую систему - т.е. писал всю программу в одном исходнике. А здесь поддался на уговоры и разделил на несколько листингов и тут началось! Отладчик перестал работать - не ставятся точки останова как при отладке в MPLAB SIM, так и при отладки через PICkit2. Неужели он не поддерживает такой способ написания программ? Может кто сталкивался с подобным? |
|
|
никаких проблем такого рода в хайтеке нет. Глючность присутствует при применении "про" версий компилятора, использовать "стд" вариант. |
|
|
Shokin: Работаю в связке MPLAB+CCS уже почти год! ... А здесь поддался на уговоры и разделил на несколько листингов и тут началось! |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |