| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Две равнозначни прекъсвания с максимален приоритет http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=79 |
Страница 1 от 1 |
| Автор: | Реконструктор [ Пет Окт 29, 2004 1:23 pm ] |
| Заглавие: | Две равнозначни прекъсвания с максимален приоритет |
Тези от вас, които са с повече опит, трябва да са се сблъсквали с подобна ситуация. Постановката е следната: фирмуера обработва около 10 прекъсвания, като 2 от тях са от жизнено важно значение за устройството - ако не се обработят, когато възникнат, в работата възникват сериозни отклонения. Двете са абсолютно равнозначни, т.е. могат да се прекъсват едно друго, защото ако не могат, може да възникне ситуация, в която едното не се изпълнява, от което следват отклоненията в работата. Въпросът е в това, че поради ред причини (най-често обработка на общи глобални ресурси, недостатъчно бързодействие и др.), е необходимо да се забранят всички други прекъсвания. Тоест, както споменах по-горе, важното прекъсване може да бъде прекъснато само от другото важно прекъсване и от нищо друго. От което следва, че в началото на обработващата ф-я трябва да има инструкции за "забрана на всички прекъсвания освен едно". Получава се глупава ситуация - забраната на всички, без едно не може да стане с една инструкция, трябват минимум две (за процесора, който ползвам), от което автоматично следва, че преди да се изпълнят всички инструкции за забрана, някое от другите прекъсвания може да се изпълни преди да бъде забранено. Има ли решение на проблема? |
|
| Автор: | bateAz [ Пет Окт 29, 2004 2:43 pm ] |
| Заглавие: | |
По принцип прекъсване с по-висок приоритет не се прекъсва от друго с по-нисък : това е решено хардуерно в ядрото на процесора. Не би следвало да имаш проблеми. |
|
| Автор: | Реконструктор [ Пет Окт 29, 2004 4:11 pm ] |
| Заглавие: | |
Необходимо пояснение - приоритетите са софтуерни, т.е. аз сам съм си решил кои прекъсвания са важни и кои - не. |
|
| Автор: | bateAz [ Пет Окт 29, 2004 4:21 pm ] |
| Заглавие: | |
каква е машината? |
|
| Автор: | Реконструктор [ Пет Окт 29, 2004 4:27 pm ] | |||||||||
| Заглавие: | ||||||||||
AVR mega16 |
||||||||||
| Автор: | bateAz [ Пет Окт 29, 2004 4:31 pm ] |
| Заглавие: | |
Отврат! това не го знам. |
|
| Автор: | Реконструктор [ Пет Окт 29, 2004 5:11 pm ] | |||||||||
| Заглавие: | ||||||||||
Супер е процесора, много по-добър от ПИКльовците. |
||||||||||
| Автор: | ToHu [ Пет Окт 29, 2004 7:02 pm ] |
| Заглавие: | |
Хм ..... това е кофти ситуация .....с колко инструкции сетваш флаг ....на всяко прекъсване му даваш приоритетен флаг, при влизане го сетваш, тези с нисъкприоритет проверяват дали няма вдигнат флаг на друго с по висок, ако има си сетват техния флаг и след това се връщат обратно. така за минимално време си обратно в прекъсването. Те атмегите са с вектор на прекъсванетонали, не ги полираш за да разбереш кой те е прекъснал ? Като излизаш от всяко прекъсване проверяваш за вдигнати флагове на прекъсвания с по нисък приоритет.Пробвай така .... за момента друго не се сещам. |
|
| Автор: | Реконструктор [ Пет Окт 29, 2004 7:18 pm ] |
| Заглавие: | |
Знаеш ли, неволно ми даде една идейка. |
|
| Автор: | ToHu [ Пет Окт 29, 2004 7:22 pm ] |
| Заглавие: | |
Хм ... това да имаш вектор за всяко прекъсване е плюс, аз не бих го преработил, просто бихсложил проверка в началото на всяко прекъсване дали в момента не се изпълняват такива с по висок приоритет и това е ... ще е доста по културно и ще си спестиш многократното влизане в тази програма .. да не говорим че като се замисля може да ти се препълни стека по някое време, нямам представа колко е при атмегата. |
|
| Автор: | Реконструктор [ Пет Окт 29, 2004 8:01 pm ] |
| Заглавие: | |
Имаш право. |
|
| Автор: | ToHu [ Пет Окт 29, 2004 8:09 pm ] |
| Заглавие: | |
Е ако ще имаш много прекъсвания .. и то само докато ги забраниш ....в крайна сметка нали ще го направиш в един момент .... въпреки че не знам как е там организацията, флаговете им остават ли вдигнати че ги е имало за да можеш после да ги обработиш ? когато се насъберет повечко прекъсвания става интересно. Аз днес оптимизирах моите, ама щъ не щъ ги оставих по големички ... едното ми е 250 инструкции .. което е доста много сопред мен нио няма как ....или по скоро не мис е преправя толкова генерално ..... но пък при тоя контролер няма бързи процеси,най-бързите сигнали са с продължителност около 1-2 ms така че не мога да ги изпусна посмъртно .... но пък пренаписвах цялата комуникация, тя е копие на една готова, та е ASCI измислица .. и за по лесно бях набутал printf-ове .. ама като имам да предавам 50 байта и тея printf са един след друг става страшно .... при 9600 не си е малко време .. та я направих истинска .. с прекъсване |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|