Отговори на тема  [ 12 мнения ] 
Две равнозначни прекъсвания с максимален приоритет 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение Две равнозначни прекъсвания с максимален приоритет
Тези от вас, които са с повече опит, трябва да са се сблъсквали с подобна ситуация. Постановката е следната: фирмуера обработва около 10 прекъсвания, като 2 от тях са от жизнено важно значение за устройството - ако не се обработят, когато възникнат, в работата възникват сериозни отклонения. Двете са абсолютно равнозначни, т.е. могат да се прекъсват едно друго, защото ако не могат, може да възникне ситуация, в която едното не се изпълнява, от което следват отклоненията в работата. Въпросът е в това, че поради ред причини (най-често обработка на общи глобални ресурси, недостатъчно бързодействие и др.), е необходимо да се забранят всички други прекъсвания. Тоест, както споменах по-горе, важното прекъсване може да бъде прекъснато само от другото важно прекъсване и от нищо друго. От което следва, че в началото на обработващата ф-я трябва да има инструкции за "забрана на всички прекъсвания освен едно". Получава се глупава ситуация - забраната на всички, без едно не може да стане с една инструкция, трябват минимум две (за процесора, който ползвам), от което автоматично следва, че преди да се изпълнят всички инструкции за забрана, някое от другите прекъсвания може да се изпълни преди да бъде забранено.
Има ли решение на проблема?


Пет Окт 29, 2004 1:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
По принцип прекъсване с по-висок приоритет не се прекъсва от друго с по-нисък : това е решено хардуерно в ядрото на процесора. Не би следвало да имаш проблеми.


Пет Окт 29, 2004 2:43 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Необходимо пояснение - приоритетите са софтуерни, т.е. аз сам съм си решил кои прекъсвания са важни и кои - не. :) Освен това две от тях са абсолютно равнозначни.


Пет Окт 29, 2004 4:11 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
каква е машината?


Пет Окт 29, 2004 4:21 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
bateAz написа:
каква е машината?


AVR mega16


Пет Окт 29, 2004 4:27 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Отврат! това не го знам.


Пет Окт 29, 2004 4:31 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
bateAz написа:
Отврат! това не го знам.


Супер е процесора, много по-добър от ПИКльовците. :)


Пет Окт 29, 2004 5:11 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Хм ..... това е кофти ситуация .....с колко инструкции сетваш флаг ....на всяко прекъсване му даваш приоритетен флаг, при влизане го сетваш, тези с нисъкприоритет проверяват дали няма вдигнат флаг на друго с по висок, ако има си сетват техния флаг и след това се връщат обратно. така за минимално време си обратно в прекъсването. Те атмегите са с вектор на прекъсванетонали, не ги полираш за да разбереш кой те е прекъснал ? Като излизаш от всяко прекъсване проверяваш за вдигнати флагове на прекъсвания с по нисък приоритет.Пробвай така .... за момента друго не се сещам.


Пет Окт 29, 2004 7:02 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Знаеш ли, неволно ми даде една идейка. :) Някак си до момента не се замислях, че може да има нещо различно от масив от указатели към обработващите ф-ии за всяко прекъсване. И при AVR-a и при 80x06 е такава система, не знаех, че може да има процесори, където за всички прекъсвания има само 1 обработваща ф-я. Идеята е това - да насоча всички прекъсвания към обща ф-я, където приоритета да се осигурява чрез реда на проверка на флаговете. Ще изисква доста сериозна преработка, но ще стане.


Пет Окт 29, 2004 7:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Хм ... това да имаш вектор за всяко прекъсване е плюс, аз не бих го преработил, просто бихсложил проверка в началото на всяко прекъсване дали в момента не се изпълняват такива с по висок приоритет и това е ... ще е доста по културно и ще си спестиш многократното влизане в тази програма .. да не говорим че като се замисля може да ти се препълни стека по някое време, нямам представа колко е при атмегата.


Пет Окт 29, 2004 7:22 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Имаш право. :) Обаче така ще яде повече процесорно време.


Пет Окт 29, 2004 8:01 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Е ако ще имаш много прекъсвания .. и то само докато ги забраниш ....в крайна сметка нали ще го направиш в един момент .... въпреки че не знам как е там организацията, флаговете им остават ли вдигнати че ги е имало за да можеш после да ги обработиш ? когато се насъберет повечко прекъсвания става интересно. Аз днес оптимизирах моите, ама щъ не щъ ги оставих по големички ... едното ми е 250 инструкции .. което е доста много сопред мен нио няма как ....или по скоро не мис е преправя толкова генерално ..... но пък при тоя контролер няма бързи процеси,най-бързите сигнали са с продължителност около 1-2 ms така че не мога да ги изпусна посмъртно .... но пък пренаписвах цялата комуникация, тя е копие на една готова, та е ASCI измислица .. и за по лесно бях набутал printf-ове .. ама като имам да предавам 50 байта и тея printf са един след друг става страшно .... при 9600 не си е малко време .. та я направих истинска .. с прекъсване :)


Пет Окт 29, 2004 8:09 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 12 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни