Отговори на тема  [ 94 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5, 6, 7  Следваща
Пикльовци - съвети 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Ми ето къде се срещат такива работи :D


Вто Апр 19, 2005 12:25 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
...


Последна промяна на Пон Яну 30, 2012 4:21 am, променена общо 1 път



Вто Апр 19, 2005 12:34 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Това е една от причините да мразя PIC. Прекъсванията им са нещо много ужасно и недомислено. И аз съм ползвал повече прекъсвания в един PIC16, и единствения начин да си реша проблема със случайните отмахвания беше да направя проверката дали след нулиране на GIE той наистина е нулиран. Другият начин е да имаш само едно прекъсване - напр. таймер и там да пулираш всички възможни източници на заявки. Ама софта става една красота...


Вто Апр 19, 2005 1:15 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Пирев, продължавам да не схващам. Днес явно ми ден в който съм тъп. Напоследък ми се случва често.

Добре де как едно прекъсване може да затрупа друго? При положение че веднъж напъхал се в първото, прекъсванията са забранени - не от теб, а от ядрото, как така ще се активира второ та да затрупа първото?

Иначе спор няма, че когато искаш да забраниш прекъсванията и те не се забранят, могат да последват неприятности.

А иначе пикльовците (особенно 16) - спор няма, имат слаба ситема за прекъсвания. Което е и нормално, това не е процесор за компютър, това е процесор за автоаларма.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Вто Апр 19, 2005 1:25 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 10, 2005 11:43 am
Мнения: 58
Мнение PIC Interrupt
Сега не съм на вълна PIC-ве и не съм гледал как е при най-новите чипове , но при 16 серия не може да стане прекъсване в прекъсване, ако не вземеш принудителни мерки . При самото прекъсване апаратно GIE става 0 и не позволява повтроно прекъсване . Ако в подпрограмата на прекъсването вдигнеш GIE в 1
трябва да се погрижиш да избегнеш конфликтите(най-малкото да нулираш преди това флага който ти е предизвикал прекъсването). :lol:

Като не Ви харесва do { GIE = 0; } while (GIE ); можете да забраните
директно IE флаговете в INTCON и тогава няма да имате такива проблеми:
MOVLW 0x7 // или 0x87
ANDWF INTCON,F ; DISABLE PEIE,T0IE,INTE,RBIE


Wise
Може да изглежда тъпичко, но аз си слагах винаги една след друга 2 инструкции bcf INTCON,GIE Ако възникне IRQ на първата...

Не е тъпичко, за някои случаи върши работа. Например ако имаш едно прекъсване от таймер на някакъв период. Защото е почти сигурно, че няма да има две прекъсвания едно след друго.

Но в общия случаи не работи и трябва да ползваш цикъл , за да си сигурен,че GIE е останал в 0 за седващите инструкции. Или да използваш директно маскарине на IE битовете.


Вто Апр 19, 2005 2:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
...


Последна промяна на Пон Яну 30, 2012 4:21 am, променена общо 1 път



Вто Апр 19, 2005 3:06 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
...


Последна промяна на Пон Яну 30, 2012 4:21 am, променена общо 1 път



Вто Апр 19, 2005 3:12 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Абе за забрана от програмата съм по съгласен, ама това самия той да не ги забранява .. мммммммм не ми се вярва, досега съм нямал проблем с това ..... то всъщност аз много рядко прибягвам до глобална забрана на прекъсвания, обикновенно забранявам едно или група ... та тоя проблем не ми се е появил .. ще го експериментирам. Ноиначе в момент имам пред мен у-во което получава прекъсване от таймер 0, таймер 1, UART, PortbB change, ext_in .. верно че последните две са с ниска честота, да не каза че ext е бутон ... ама съм нямал проблеми, но и никъде нямам забрана на глобално.


Вто Апр 19, 2005 5:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Дек 19, 2004 6:26 pm
Мнения: 1628
Местоположение: Сливен
Мнение 
Понеже сме в "Академия" си позволявам пак да пиша за това.
Не съм имал случай на нежелано прекъсване, когато ползвам 2 инструкции една след друга за глобална забрана. Идеята е, че ядрото не може да изпълни две прекъсвания едно след друго. Винаги се изпълнява поне една инструкция от основната програма. Така си пише в бумагите и на практика си е така. Ако първата не сработи поради ненавременно прекъсване, то не виждам как следващата няма да свали флага.


Вто Апр 19, 2005 6:19 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 10, 2005 11:43 am
Мнения: 58
Мнение 
Wise
Ако първата не сработи поради ненавременно прекъсване, то не виждам как следващата няма да свали флага.

Напълно е възможно GIE да остане 1 и след две инструкции BCF INTCON,GIE.
Ако имаш например две прекъсвания от таймер и от USART със сигурност в определен момент ще се получи конфликт . В общия случаий тези прекъсвания са асинхронни едно спрямо друго и е
напълно възможно заявкaта за прекъсване от таймера да постъпи след завършване на прекъсването от USARТ и обратно. Ако заявката от USART е постъпила при изпълнението на първата инструкция BCF INTCON,GIE тя няма да бъде блокирана и резултата след RETFIE (вече стана ясно) е GIE=1 . След връщане започва изпълнение на следващата BCF INTCON,GIE , но в този момент постъпва прекъсва от
другия източник. Ситуацията се повтаря: прекъсването не може да се блокира и резултата GIE=1. Ако имаш по вече прекъсвания вероятноста от последователно постъпващи заявки нараства.
С няколко последователни инструкции може би се намалява вероятноста конфликта да се появи но и това не е сигурно. 100 % има само с цикъл или директно маскиране на IE.
Като погледнах стари програми, ползавал съм предимно директно маскиране и не съм имал проблеми.


Вто Апр 19, 2005 7:33 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
...


Последна промяна на Пон Яну 30, 2012 4:22 am, променена общо 1 път



Сря Апр 20, 2005 5:23 am
Профил WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 10, 2005 11:43 am
Мнения: 58
Мнение Lino
Да, конфликтите с вероятностен характер могат да доведат доста
неприятности и загуба на време. :)


Сря Апр 20, 2005 7:14 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Т.е. искате да кажете че той дори не може да си забрани прекъсването когато е в самото прекъсване влязъл така ли , а не смао когато аз му правя GIE=0? Това вече не ми се вярва много .....а и това лесно може да се провери ... ако е така, това си е бъг, но аз не съм виждал досега случай в който да обслужвам едно прекъсване по време на друго, това при потребителска забрана по мога да го приема,и сигурно е така.


Сря Апр 20, 2005 7:21 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Абе говорим си за неща които наистина са трудно доказуеми. Как пък да предизвикам асинхронно прекъсване, баш кога влизам в прекъсване, та да го проверим. По принцип е възможно и тая дивотия да я има, ама .... Шанса да се получи, та да изкочи бъга е малък. Точно такъв че да изгърми при клиента, а не на масата.
Дивотия.
Както и да е, не пречи да се забраняват прекъсванията с bcf, btfsc.

Но виж в прекъсване да го правя не ми харесва.
Още повече че ако тоя втория проблем съществува, по цялата логика do,while цикъла няма да помогне. Той по същество не блокира "лошото" прекъсване, а просто се грижи флага да остане нулиран след неговото вмешателство. Което значи че бидейки в първото прекъсване, активирането на второто ще го сгащи, ще му утепа стека (ако е на ръба на преливането), и после и да му връщаш бита в 0 е безмислено, умрял си. Ако всичко това с прекъсването в прекъсване е вярно.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Сря Апр 20, 2005 9:46 am
Профил ICQ
Мнение Lino
Áëîêà çà ïðåêúñâàíå, êîãàòî çàïî÷íå ïðåêúñâàíå íóëèðà
GIE=0 , ïðîãðàìàòà çà îáñëóæâàíå çàâúðøâà ñ êîìàíäà RETFIE
êîÿòî ïðàâè GIE=1.

Ïðîâåðêàòà å ìíîãî ëåñíî:
Ïóñíåòå åäèí òàéìåð è ðàçðåøåòå ïðåêúñâàíå-> GIE=1, Ò0IE=1.
 ïðîãðàìàòà íèêúäå íå íóëèðàéòå GIE.
Ñëîæåòå åäèí ñòîï â ïîäïðîãðàìàòà çà îáñëóæâàíå íà ïðåêúñâàíåòî
è êîãàòî ñïðåòå ùå âèäèòå GIE=0 ñëåä òîâà ïðåìèíåòå ïðåç RETFIE è ùå âèäèòå GIE=1. Àêî èñêàòå â ïîäïðîãðàìàòà çà îáñëóæâàíå íà ïðåêúñâàíåòî ñëîæåòå êîìàíäè bcf INCON,GIE , ðåçóëòàòà ùå áúäå
ñúùèÿ (GIE àïàðàòíî e ñòàíàë âå÷å 0 îùå â íà÷àëîòî íà ïðåêúñâàíåòî, ìîæå ñàìî çà îïèò äà ãî íàïðàâèòå 1 íî ùå ðàçðåøèòå ïðåêúñâàíå â ïðåêúñâàíå ).

Èñêàòå äà õâàíåòå ïðåêúñâàíå ïîñòúïâàùî åäíîâðåìåííî ñ èçïúëíåíèåòî íà bcf INCON,GIE , êîåòî íå ìîæå äà áúäå áëîêèðàíî è ïðåâêëþ÷âà GIE=1 ïðè âðúùàíå.

Ïóñíåòå êîëêîòî ìîæå ïîâå÷å ïðåêúñâàíèÿ è
ñ òîçè öèëúë â ïðîãðàìàòà òðÿáâà äà óñïååòå ãî çàñå÷åòå:

loop: bsf INCON,GIE //enable INT
nop
nop
nop

bcf INCON,GIE // try disable INT
nop //
btfss INCON,GIE // DISABLE INT ???
goto loop1 //success GIE=0

ERROR: LED_0N // INTERRUPT NOT DISABLE

Òàçè îñîáåíîñò å ñàìî çà GIE íå âàæè çà äðóãèòå IE ôëàãîâå. Ïðîñòî RETFIE íÿìà âúçäåéñòâèå âúðõó òÿõ.


Сря Апр 20, 2005 12:50 pm
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 94 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5, 6, 7  Следваща

Кой е на линия

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


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

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