Отговори на тема  [ 49 мнения ]  Отиди на страница Предишна  1, 2, 3, 4  Следваща
Моля за малко помощ 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Авг 18, 2011 3:44 pm
Мнения: 27
Мнение Re: Моля за малко помощ
Може ли малко разяснения относно "бекъп-а" и по точно какво представлява?


Пон Авг 22, 2011 10:20 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12764
Местоположение: София
Мнение Re: Моля за малко помощ
stojo написа:
Може ли малко разяснения относно "бекъп-а" и по точно какво представлява?

Това което Тони е кръстил бекъп е променлива. Като настъпи прекъсване, и присвояваш стойността на порта който те интересува или на бит от него.


Пон Авг 22, 2011 10:55 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение Re: Моля за малко помощ
Да, при инициализация да речем си записвасш
old_b=portb;

при влизане в прекъсване.
new_b=portb;
if(!bit_test(new_b,4)==bit_test(old_b,4))
{}
if(!bit_test(new_b,4)==bit_test(old_b,4))
{}
if(!bit_test(new_b,4)==bit_test(old_b,4))
{}
if(!bit_test(new_b,4)==bit_test(old_b,4))
{}
old_b=new_b;

Това за да ти стане ясно, този начин е неефективен от към ресурси.

int temp;
temp=portb;
new_b=old_b^portb;
if(new_b&0x08)
{}
if(new_b&0x04)
{}
if(new_b&0x02)
{}
if(new_b&0x01)
{}
old_b=temp;
това е доста по ефективен код, горе долу 4 пъти ако да речем всички са променени. Най-общо каква е идеята, temp запазва състоянието на порта в момента в който влезеш в прекъсване. new_b=old_b^temp така правиш XOR между старата стойност на порта и новата, в new_b имаш единици там където има разлика в старото и новото състояние.
След това в if-а проверяваш къде има 1-ца като правиш and между резултата от XOR-а и число с 1-ца в бита който искаш да провериш.
Накрая записваш новото състояние на порта като старо.


Пон Авг 22, 2011 11:43 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Авг 18, 2011 3:44 pm
Мнения: 27
Мнение Re: Моля за малко помощ
Не е ли също като
if (PORTx.Bx == 1) {}


Вто Авг 23, 2011 11:04 am
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение Re: Моля за малко помощ
не е, защото по време на изпълнение на инструкцията порта може да се е променил


Вто Авг 23, 2011 3:49 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение Re: Моля за малко помощ
Не можеш да го сравняваш с 1, защото не знаеш колко е бил, т.е. дали се епроменил или не. За да знаеш трябва да пазиш старото му състояние. Можеш да го пазиш побитово, в този случай можеш да правиш сравнение м-у битов апроменлива и състоянието на порта, или пък да направиш XOR между две битови, което обаче за процесора е все тая, той ще направи XOR м-у два байта, при което ще им присво стойности, катооперации не мисля ще е по малко.


Вто Авг 23, 2011 8:01 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение Re: Моля за малко помощ
флага ти се вдига при първата промяна на произволен порт, оттам нататък кво става е твоя грижа


Сря Авг 24, 2011 9:40 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Авг 18, 2011 3:44 pm
Мнения: 27
Мнение Re: Моля за малко помощ
А как да стои в прекъсването, докато бутонът не бъде освободен?


Чет Авг 25, 2011 2:49 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение Re: Моля за малко помощ
Първо, какво за теб е стоене в прекъсване?
Второ, като изключим претрепването на ключа, освобождаването му е условие за ново прекъсване


Чет Авг 25, 2011 3:39 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение Re: Моля за малко помощ
stojo написа:
А как да стои в прекъсването, докато бутонът не бъде освободен?


Вземете вече запомнете, че: бутони, клавиатури, дисплеи и разни тем подобни не се четат, пишат, опресняват или обработват в прекъсване!


Чет Авг 25, 2011 3:46 pm
Профил ICQ WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Авг 18, 2011 3:44 pm
Мнения: 27
Мнение Re: Моля за малко помощ
didofen raif да си стои 1 докато бутонът не бъде освободен....


Чет Авг 25, 2011 3:54 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение Re: Моля за малко помощ
stojo, флага ни за прекъсване, сиреч натиснат бутон не се нулира сам, така че като излезеш от прекъсване, пак ще се върнеш там, т.е. никога няма да излезеш


Чет Авг 25, 2011 4:22 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение Re: Моля за малко помощ
Не знам какво точно ти създава проблем. Ако това е бутон, в тия ифове само си вдигай флаг кой е натиснатият бутон, ако искаш си вземай и тайм щамп, ако имаш пуснат таймер за целта. За да избегнеш проблема с трептенетона контактите трябва да сложиш времеви филтър, това е много пъти дискутирано, може да стане по много начини, вътре или вън от прекъсването без да ти отнема особенно време за изпълнението му. От там нататък,какво се случва след катооткриеш че бутона е натиснат е съвсем друг въпрос, и да както relays писа е по добре да се прави извън прекъсване. В прекъсване с естои възможно най-кратко, в твоя случай за д аопределиш кой бутон е натиснат, и венентуално някоя операция свързана с филтъра.


Чет Авг 25, 2011 8:14 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Авг 18, 2011 3:44 pm
Мнения: 27
Мнение Re: Моля за малко помощ
Ами ако имам входящ импулс, на който трябва да увелича периода с някакво време, не е ли това най удачния подход?


Чет Авг 25, 2011 9:16 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12764
Местоположение: София
Мнение Re: Моля за малко помощ
Провери за конкретния компилатор точния синтаксис за обработване на прекъсването. След обработването му, нулираш ли флага?

Ако не е секретен проекта, няма да е лошо да дадеш малко по-подробна информация, че за момента е доста разпокъсана и не става ясно какво трябва да се получи.

Също така може да изясниш и за себе си кое и как, като си начертаеш алгоритъма. По класическият начин - с ромбчета, квадратчета и стрелки.


Пет Авг 26, 2011 12:38 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 49 мнения ]  Отиди на страница Предишна  1, 2, 3, 4  Следваща

Кой е на линия

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


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

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