|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 7:00 pm
|
Страница 1 от 1
|
[ 12 мнения ] |
|
Две равнозначни прекъсвания с максимален приоритет
| Автор |
Съобщение |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
 Две равнозначни прекъсвания с максимален приоритет
Тези от вас, които са с повече опит, трябва да са се сблъсквали с подобна ситуация. Постановката е следната: фирмуера обработва около 10 прекъсвания, като 2 от тях са от жизнено важно значение за устройството - ако не се обработят, когато възникнат, в работата възникват сериозни отклонения. Двете са абсолютно равнозначни, т.е. могат да се прекъсват едно друго, защото ако не могат, може да възникне ситуация, в която едното не се изпълнява, от което следват отклоненията в работата. Въпросът е в това, че поради ред причини (най-често обработка на общи глобални ресурси, недостатъчно бързодействие и др.), е необходимо да се забранят всички други прекъсвания. Тоест, както споменах по-горе, важното прекъсване може да бъде прекъснато само от другото важно прекъсване и от нищо друго. От което следва, че в началото на обработващата ф-я трябва да има инструкции за "забрана на всички прекъсвания освен едно". Получава се глупава ситуация - забраната на всички, без едно не може да стане с една инструкция, трябват минимум две (за процесора, който ползвам), от което автоматично следва, че преди да се изпълнят всички инструкции за забрана, някое от другите прекъсвания може да се изпълни преди да бъде забранено.
Има ли решение на проблема?
|
| Пет Окт 29, 2004 1:23 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
По принцип прекъсване с по-висок приоритет не се прекъсва от друго с по-нисък : това е решено хардуерно в ядрото на процесора. Не би следвало да имаш проблеми.
|
| Пет Окт 29, 2004 2:43 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Необходимо пояснение - приоритетите са софтуерни, т.е. аз сам съм си решил кои прекъсвания са важни и кои - не.  Освен това две от тях са абсолютно равнозначни.
|
| Пет Окт 29, 2004 4:11 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
каква е машината?
|
| Пет Окт 29, 2004 4:21 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
|
| Пет Окт 29, 2004 4:27 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Отврат! това не го знам.
|
| Пет Окт 29, 2004 4:31 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Супер е процесора, много по-добър от ПИКльовците. 
|
| Пет Окт 29, 2004 5:11 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Хм ..... това е кофти ситуация .....с колко инструкции сетваш флаг ....на всяко прекъсване му даваш приоритетен флаг, при влизане го сетваш, тези с нисъкприоритет проверяват дали няма вдигнат флаг на друго с по висок, ако има си сетват техния флаг и след това се връщат обратно. така за минимално време си обратно в прекъсването. Те атмегите са с вектор на прекъсванетонали, не ги полираш за да разбереш кой те е прекъснал ? Като излизаш от всяко прекъсване проверяваш за вдигнати флагове на прекъсвания с по нисък приоритет.Пробвай така .... за момента друго не се сещам.
|
| Пет Окт 29, 2004 7:02 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Знаеш ли, неволно ми даде една идейка.  Някак си до момента не се замислях, че може да има нещо различно от масив от указатели към обработващите ф-ии за всяко прекъсване. И при AVR-a и при 80x06 е такава система, не знаех, че може да има процесори, където за всички прекъсвания има само 1 обработваща ф-я. Идеята е това - да насоча всички прекъсвания към обща ф-я, където приоритета да се осигурява чрез реда на проверка на флаговете. Ще изисква доста сериозна преработка, но ще стане.
|
| Пет Окт 29, 2004 7:18 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Хм ... това да имаш вектор за всяко прекъсване е плюс, аз не бих го преработил, просто бихсложил проверка в началото на всяко прекъсване дали в момента не се изпълняват такива с по висок приоритет и това е ... ще е доста по културно и ще си спестиш многократното влизане в тази програма .. да не говорим че като се замисля може да ти се препълни стека по някое време, нямам представа колко е при атмегата.
|
| Пет Окт 29, 2004 7:22 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Имаш право.  Обаче така ще яде повече процесорно време.
|
| Пет Окт 29, 2004 8:01 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Е ако ще имаш много прекъсвания .. и то само докато ги забраниш ....в крайна сметка нали ще го направиш в един момент .... въпреки че не знам как е там организацията, флаговете им остават ли вдигнати че ги е имало за да можеш после да ги обработиш ? когато се насъберет повечко прекъсвания става интересно. Аз днес оптимизирах моите, ама щъ не щъ ги оставих по големички ... едното ми е 250 инструкции .. което е доста много сопред мен нио няма как ....или по скоро не мис е преправя толкова генерално ..... но пък при тоя контролер няма бързи процеси,най-бързите сигнали са с продължителност около 1-2 ms така че не мога да ги изпусна посмъртно .... но пък пренаписвах цялата комуникация, тя е копие на една готова, та е ASCI измислица .. и за по лесно бях набутал printf-ове .. ама като имам да предавам 50 байта и тея printf са един след друг става страшно .... при 9600 не си е малко време .. та я направих истинска .. с прекъсване 
|
| Пет Окт 29, 2004 8:09 pm |
|
|
|
Страница 1 от 1
|
[ 12 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|