<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=2742&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-04-04T09:17:46+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2742&amp;mode</id>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2013-04-04T09:17:46+01:00</updated>
<published>2013-04-04T09:17:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=33104#p33104</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=33104#p33104"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=33104#p33104"><![CDATA[
świetnie, Panowie bardzo dziękuje za wyjaśnienia. Każdy taki szczegółowy opis poszerza horyzonty nawet jeśli coś się niby już wie.<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Wiem ze to może być oczywiste ale nie dla każdego.<br /></div> może i oczywiste ale ja o tym w ten sposób nie myślałem. dzięki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 4 kwi 2013, o 09:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PawelGaj]]></name></author>
<updated>2013-04-03T21:48:36+01:00</updated>
<published>2013-04-03T21:48:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=33053#p33053</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=33053#p33053"/>
<title type="html"><![CDATA[Re: Odp: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=33053#p33053"><![CDATA[
Co do LCD to można to zrobić na obkrętkę,robisz sobie bufor 16 char, w przerwaniu cos sobie do niego zapisujesz i ustawiasz jakaś zmienną na 1 a w pętli głównej sprawdzasz warunek i jak jest 1 to zapisujesz bufor do wyświetlacza. Wiem ze to może być oczywiste ale nie dla każdego. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":smile:" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=784">PawelGaj</a> — 3 kwi 2013, o 21:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[staneq]]></name></author>
<updated>2013-04-03T11:58:16+01:00</updated>
<published>2013-04-03T11:58:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32912#p32912</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32912#p32912"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32912#p32912"><![CDATA[
<div class="quotetitle">rezasurmar napisał(a):</div><div class="quotecontent"><br />No ale to w zasadzie zawsze zajmuje tyle samo czasu, więc sobie można odjąć od wyniku,<br /></div><br /><br />No i to napisałem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />A gotowy klon można na allegro kupić za ok 100zł w ładnej obudowie i kabelkami, sam sobie taki kupiłem i nie narzekam <br /><br /><br /><div class="quotetitle">Tom277 napisał(a):</div><div class="quotecontent"><br />Choć analizując twoje programy i kolegów tu na forum widzę, że w przerwaniach np. timera pojawiają się więcej niż tylko flaga<br /></div><br /><br />No i tak jest że czasami dając samą flagę w przerwaniu nie uzyskamy efektu na jakim nam zależy czyli np podczas multipleksowania wyświetlacza 7seg. Jeżeli ustawimy częstotliwość po 50Hz/cyfre mając 4 cyfry to przerwanie powinno się wykonywać ok 200Hz czyli 0,005s czyli 5ms<br />a w pętli głównej będziemy mieli (w najgorszym razie) funkcje któa będzie się wykonywać np 10ms no i w związku z tym np jedna cyfra może nie świecić bo nim nieskończona pętla przejdzie do sprawdzania flagi to flaga zmieni się 2 razy i jakaś cyfra zostanie pominięta.<br /><br />Mam nadzieję że zrozumiale <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=770">staneq</a> — 3 kwi 2013, o 11:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-04-03T11:48:56+01:00</updated>
<published>2013-04-03T11:48:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32910#p32910</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32910#p32910"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32910#p32910"><![CDATA[
Tom277 ---&gt; oczywiście masz rację - no ale widzisz więcej urodzi się z konkretnych pytań ... bo niestety OGÓLNIE nie da się tego opowiedzieć w 2-3 zdaniach, ale też prawdą jest to co napisałem wyżej że liczenie każdego taktu mija się z celem programując w C.<br /><br />A zatem - skoro jak piszesz znasz już jakby te podstawy (fajnie) .... to powiem znowu coś co może zaburzy tok twoich myśli ale postaram się doprecyzować. Otóż w niebieskiej książce mówię o flagach i nawet podaję taki jaskrawy przykład z przerwaniem INTx przy obsłudze PCF8583 gdzie zdaje się jedyna rzecz jaką robię w przerwaniu to ustawienie flagi i później sprawdzanie jej w pętli głónej. Ale to też tylko powstało do celów dydaktcznych i może się zdziwisz ale tak wręcz NIE NALEŻY robić jeśli w przerwaniu miałbyś TYLKO ustawiać flagę - bo po co? tworzyć flagę programową przerwania ?? tracić na nią cenną komórkę RAM ?? skoro przecież masz rejestr sprzętowy ze SPRZĘTOWYMI FLAGAMI przerwań i równie dobrze można je wykorzystać w pętli głównej ... pomyśl jaka oszczędność czasu , pamięci i kodu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />zaglądamy szybko do noty PDF np procka ATmega8 , spójrz na rejestr GIFR - widzisz? masz tam dwie sprzętowe flagi INTF0 oraz INTF1<br /><br />można je w pętli głównej wykorzystać wprost zamiast tej programowej którą pokazałem w książce<br /><br />[syntax=c]while(1) {<br /><br />    if( GIFR &amp; (1&lt;&lt;INTF0) ) {<br />        // zrób coś - np odczyt z PCF8583<br />        GIFR |= (1&lt;&lt;INTF0); // uwaga pomimo dziwnego zapisu ale TAK KASUJEMY sprzętową flagę w AVR<br />    }<br /><br />}[/syntax]<br />widzisz ? Mógłbyś zapytać - no dobra to po co pan panie kardaś wprowadzasz ludzi w błąd ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... nie - nie wprowadzam - ponieważ o wiele łatwiej wg mnie dotrzeć mi do początkującego i opowiedzieć mu o znaczeniu flag na takim przykładzie jak ja to opisałem bo tutaj jakbym podał z tym rejestrem - to początkująca osoba - popatrzy na to często i pomyśli - O! jakieś czary-mary pokazał i mądry - a ja nadal nie czaję o co chodzi z tymi kocimi flagami.<br /><br />No ale też zdarza się że później ktoś np nie poczyta dalej albo całej książki i na podstawie tej informacji np zaczyna pisać sobie obsługę przerwania UART i zdarzało się , że nadsyła mi czytelnik kod w którym w przerwaniu UART'a wkleja też TYLKO TAKĄ flagę programową jak w tym przykładzie z PCF a później w pętli głównej chce odczytywać np UDR itp itd ... a ja pytam - a czytałeś pan dalej ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> przecież czym dalej w las tym pokazuję że więcej drzew i coraz bardziej różne podejście ....<br /><br />REASUMUJĄC - w 10000% warto sobie zdać sprawę co to są flagi i jak się nimi posługiwać - nawet jeśli początkujący miałby tylko taką programową flagę majstrować zamiast używać tej sprzętowej - a dlaczego ? Ano dlatego że przygotowuję go do WAŻNEJ RZECZY w dalszej części książki jaką są np TIMERY PROGRAMOWE ! ..... to jest TO - na czym mi głównie zależy - do czego prowadzę ..... choć często początkująca osoba nie chce iść dalej w książce obawiając się że tam na końcu to coś gryzie i jest za trudno - zatrzymując się na jej początku bo też już coś zaczyna wychodzić i brnie czasem błądząc mocno dalej<br /><br />Tymczasem jeszcze raz - flagę programową wprowadzaj wtedy jeśli w przerwaniu jeszcze inne rzeczy użyjesz np wyobraź sobie timer sprzętowy do obsługi multipleksowania.... działa sobie taki z częstotliwością np 200-300Hz .... no i coś tam robi - obraca tymi segmentami prawda? długo to nie trwa ale zawsze coś robi. No i wtedy - po co powoływać do życia nowy timer sprzętowy który miałby wyznaczać jakąś podstawę czasu żeby np migać sobie jakąś diodą LED co sekundę - jeśli mogę dodać kilka linijek do obsługi przerwania multipleksowania i zliczać te każde np 5ms (przy 200Hz) ... i gdy zliczę ich tyle że minie 1s to wtedy ustawię sobie flagę <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i w pętli głównej przy okazji niejako będę miał poza fajnym multipleksowaniem to jeszcze flagę co 1s <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... czyt tylko co 1s ? nie jak chcę to wprowadzę drugą np co 500ms albo i trzecią co 100ms .... tyle że zliczanie impulsów 5-cio milisekundowych będę realizował nadal w przerwaniu. <br /><br />Dlatego też w takim wypadku nie ma co korzystać ze sprzętowej flagi przerwania ponieważ zostaje ono w sposób wypasiony użyte i to do wielu celów naraz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />a zatem czytaj dalej książkę ale co najważniejsze - staraj się ćwiczyć każdy przykład na 100 różnych sposobów i nie opuszczaj ostatnich rozdziałów a szczególnie<br /><br />&quot;Wstępu do systemów czasu rzeczywistego&quot; bo to jest CEL do którego Cię i każdego czytelnika staram się doprowadzić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 kwi 2013, o 11:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2013-04-03T11:19:58+01:00</updated>
<published>2013-04-03T11:19:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32908#p32908</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32908#p32908"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32908#p32908"><![CDATA[
Wielokrotnie mówiłeś Mirku, żadnych delay-ów, LCD-ków i takich tam w przerwaniu i jest to dla mnie oczywiste i logiczne, tyle że chciałbym wiedzieć co robię i chciałby robić coś świadomie nie na zasadzie bo tak ma być. Jeśli to tylko możliwe staram się w przerwaniu umieszczać flagę, a w funkcji głównej resztę. Choć analizując twoje programy i kolegów tu na forum widzę, że w przerwaniach np. timera pojawiają się więcej niż tylko flaga. Dlatego pytam żeby nie postępować bezmyślnie a świadomie. Być może można coś napisać dużo prościej pisząc coś w przerwaniu niż wyciągać to na zewnątrz. Byłoby fajnie wiedzieć ile dana procedura zajmuje czasu i jak obciąża procesor bo może się okazać że do końca  jeszcze bardzo dużo czasu i nie muszę się martwić. Rozumiem też że wiele przychodzi z czasem ale od czegoś trzeba zacząć. Tak w ogóle to fajnie jest wiedzieć co się pisze. Dzięki za wnikliwą odpowiedź.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 3 kwi 2013, o 11:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-04-03T10:52:40+01:00</updated>
<published>2013-04-03T10:52:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32903#p32903</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32903#p32903"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32903#p32903"><![CDATA[
Tom277 --&gt; tak na prawdę gdy programujesz w C to de'facto odcinasz się od asemblera i liczenie cykli zegara w przerwaniu to totalna strata czasu..... Bo po co ? spróbuj to sam sobie uzasadnić - to zobaczysz że nie dojdziesz do porządnych wniosków <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />A gdybyś chciał powiedzieć, że robisz coś gdzie STRASZNIE zależy ci na każdym cyklu zegara w przerwaniu - to wtedy gdy taka ostateczność przychodzi - choć rzadko - to robisz wstawkę asemblerową i sam piszesz - wtedy dopiero uzyskasz STAŁĄ dla ciebie liczbę cykli zegara - bo kompilator po każdej kompilacji gdy wprowadzisz delikatne zmiany w programie może na nowo i całkiem inaczej tłumaczyć na asembler fragmenty swojego kodu.<br /><br />Zatem sięganie z tego powodu do debugera - to wg mnie oczywiście ale to jest moje subiektywne zdanie, mija się już TOTALNIE z celem a szczególnie wykorzystaniem debugera. <br /><br />1. Napisz sobie proste przerwanie<br />2. zajrzyj do pliku *.lss<br />3. zobacz jak wygląda sam prolog i epilog<br />4. łatwo znajdziesz ciało przerwania - np zapis jakiejś liczby do portu - będzie to jeden rozkaz asemblerowy pewnie<br /><br />i wtedy jak wyżej kolega pisał - zajrzyj nawet do noty PDF gdzie masz podane liczby cykli na każdy rozkaz asm <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... gdy częściej to będziesz robił to zaczniesz później nawet na pamięć - tak na szybko zliczać ... tak mniej więcej ....<br /><br />ale im dłużej będziesz programował w C tym mniej będziesz to robił w 99% przypadków bo to nie ma sensu<br /><br />gdy rozumiesz zasady pisania procedur obsługi przerwań które sprowadzają się do prostej rzeczy<br /><br />- przerwanie powinno trwać jak najkrócej (co nie oznacza że musi być w nim mało kodu bo to dwie różne rzeczy)<br /><br />oczywiście dla wielu początkujących to jest wręcz ZASADNICZE pytanie - co to znaczy &quot;jak najkrócej&quot; i np zaczynają się pytania typu:<br /><br />1. a czy mogę użyć np _delay_us() w przerwaniu bo wiem że _delay_ms() jest za długie<br />2. a czy mogę użyć obsługi LCD w przerwaniu ?<br />3. a czy mogę użyć obsługi XXX w przerwaniu ???<br /><br />dla początkującego podpowiedź jest prosta - ŻADNYCH _dleay, żadnych pętli które mogą się nie skończyć, żadnej obsługi LCD, bo ta obsługa albo zawiera sporo _delayów albo zawiera oczekiwanie na BusyFlag - żadnych takich <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />i wystarczy się tego na początek trzymać i dużo próbować pisać kombinować i sprawdzać w praktyce na żywym organiźmie procka a nie na symulatorach i debugerach - wtedy szybciej załapiesz praktykę i zobaczysz że także dla ciebie stanie się proste co można w przerwaniu a czego nie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 kwi 2013, o 10:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2013-04-03T10:21:54+01:00</updated>
<published>2013-04-03T10:21:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32899#p32899</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32899#p32899"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32899#p32899"><![CDATA[
aaaa.... to już trochę jaśniej.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br />A czy w AVRStudio nie można? Jest gdzieś jakiś opis jak zrobić to za pomocą symulatora w AVRStudio? Coś kiedyś słyszałem/widziałem, ale nie znam AS więc nie wiem czy to jest to.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 3 kwi 2013, o 10:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-04-03T10:19:50+01:00</updated>
<published>2013-04-03T10:19:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32898#p32898</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32898#p32898"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32898#p32898"><![CDATA[
<div class="quotetitle">staneq napisał(a):</div><div class="quotecontent"><br />Tylko że to też nie da idealnie czasu trwania przerwania bo ustawienie stanu wysokiego/niskiego też &quot;zajmuje&quot; ale to są grosze<br /></div><br /><br />No ale to w zasadzie zawsze zajmuje tyle samo czasu, więc sobie można odjąć od wyniku, ale fakt bez oscyloskopu ani rusz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />, ale zawsze można sobie strzelić jakiś DYI analizator w stylu seale 8, koszt samej płytki z scalaczkiem to ok 65zł <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<p>Statystyki: Napisane przez Gość — 3 kwi 2013, o 10:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[staneq]]></name></author>
<updated>2013-04-03T10:08:48+01:00</updated>
<published>2013-04-03T10:08:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32895#p32895</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32895#p32895"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32895#p32895"><![CDATA[
<div class="quotetitle">Tom277 napisał(a):</div><div class="quotecontent"><br />Wybaczcie może laickie pytanie<br /></div><br /><br />Tu nie ma takich pytań <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />W katalogu projektu dajesz REALSE i plik nazwa_projektu.lss i tak masz rozpisane w asm<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br /><div class="quotetitle">rezasurmar napisał(a):</div><div class="quotecontent"><br />Mnie się bardziej podoba myk z zmianą stanu na porcie<br /></div><br /><br />Mi też ten myk się najbardziej podaoba tylko trzeba niestety mieć oscyloskop a najlepiej analizator stanów logicznych i jakieś wolne wyprowadzenie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 8 minutach ]</span></strong><br /><br />Tylko że to też nie da idealnie czasu trwania przerwania bo ustawienie stanu wysokiego/niskiego też &quot;zajmuje&quot; ale to są grosze<br /><br />instrukcja ASM SBI i CBI zajmują po 2 cykle więc od wyniku będziesz musiał odjąć 4 cykle zegarowe<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=770">staneq</a> — 3 kwi 2013, o 10:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-04-03T10:08:08+01:00</updated>
<published>2013-04-03T10:08:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32894#p32894</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32894#p32894"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32894#p32894"><![CDATA[
Trochę to na piechotę......chyba że jest jakiś prostszy myk z użyciem debuggera, SunRiver opisywał na forum użycie Debuggera w eclipsie, poszukaj jego postów.<br /><br />Mnie się bardziej podoba myk z zmianą stanu na porcie, bo dzięki temu masz rzeczywisty czas działania funkcji czy procedury.......no i szybciej bo to tylko raptem dwie linijki kodu. Sama zmiana wpłynie w nieznaczny sposób na długość wykonywania kodu......no chyba, że potrzebujesz faktycznie walczyć z każdym cyklem, no to tylko debugger, albo najlepiej przejście na czysty asembler <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />. Przynajmniej w procedurach (funkcjach) w których liczy się każda mikro sekunda.<p>Statystyki: Napisane przez Gość — 3 kwi 2013, o 10:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[staneq]]></name></author>
<updated>2013-04-03T10:02:18+01:00</updated>
<published>2013-04-03T10:02:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32893#p32893</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32893#p32893"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32893#p32893"><![CDATA[
Tak naprawdę to musiałbyś zajrzeć do kodu w Asemblerze i zobaczyć na jakie instrukcje zostały rozpisane Twoje rozkazy. A potem zobaczyć ile cykli zegarowych się wykonuje dana instrukcja np stąd: <!-- m --><a class="postlink" href="http://www.atmel.com/Images/doc1022.pdf" >http://www.atmel.com/Images/doc1022.pdf</a><!-- m --><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br />rezasurmar mnie uprzedził <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />taj to jest odejść na 3 minutki od kompa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=770">staneq</a> — 3 kwi 2013, o 10:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2013-04-03T09:59:26+01:00</updated>
<published>2013-04-03T09:59:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32891#p32891</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32891#p32891"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32891#p32891"><![CDATA[
Wybaczcie może laickie pytanie, ale jak przetłumaczony na asembler? W jaki sposób to się robi np. w Eclipsie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 3 kwi 2013, o 09:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-04-03T09:59:41+01:00</updated>
<published>2013-04-03T09:56:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32889#p32889</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32889#p32889"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32889#p32889"><![CDATA[
Patrzysz w kod przetłumaczony na asembler, a potem sprawdzasz sobie ile dana instrukcja zajmuje cykli procesora <!-- m --><a class="postlink" href="http://proton.ucting.udg.mx/tutorial/AVR/" >http://proton.ucting.udg.mx/tutorial/AVR/</a><!-- m --><br /><br />Pewnie można jakoś prościej, za pomocą debuggera.<br /><br />PS. Można użyć też &quot;Myku&quot; z zmianą stanu portu na początku procedury. Zmieniasz stan wybranego portu na początku procedury, potem zmieniasz stan na końcu procedury, mierzysz oscyloskopem, lub czym tam masz pod ręką i siup już wiesz ile czasu ona zajmuje <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />.<p>Statystyki: Napisane przez Gość — 3 kwi 2013, o 09:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2013-04-03T09:39:02+01:00</updated>
<published>2013-04-03T09:39:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32886#p32886</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32886#p32886"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32886#p32886"><![CDATA[
Jak policzyć poszczególne rozkazy? Ile zajmuje &quot;jakaś tam&quot; procedura? Jak to można sobie policzyć? Skąd wiadomo, że dany rozkaz wykonuje się w tylu, a tylu cyklach?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 3 kwi 2013, o 09:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-04-02T19:51:56+01:00</updated>
<published>2013-04-02T19:51:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32837#p32837</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32837#p32837"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32837#p32837"><![CDATA[
Funkcje obsługi przerwania powinny być krótkie czasowo, aby nie blokować innych przerwań jak również pętli głównej programu. Nie chodzi tu raczej o ilość linii, bo _delay_ms(10); to jedna linia, a zajmuje dużo czasu. Przy taktowaniu 1MHz jeden (typowy) rozkaz trwa 1us, a 1000 rozkazów - 1ms.<br />Z wywołaniem funkcji wewnątrz przerwania nie ma problemu, ale trzeba wiedzieć ile czasu zajmuje taka funkcja. Może nawet nie być jawnie podane ile, bo funkcje obsługi wyświetlacza LCD z odczytem flagi zajętości czekają, aż wyświetlacz będzie gotowy do przyjmowania kolejnych rozkazów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 2 kwi 2013, o 19:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[nixie]]></name></author>
<updated>2013-04-02T19:43:58+01:00</updated>
<published>2013-04-02T19:43:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32834#p32834</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32834#p32834"/>
<title type="html"><![CDATA[Re: Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32834#p32834"><![CDATA[
Jeśli projektujesz timer programowy to zostaw tam tylko i wyłącznie ustawianie liczników a całą resztę przenieś do programu głównego. Mirek pięknie opisał istotę tworzenia timerów programowych.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 6 minutach ]</span></strong><br /><br /><div class="quotetitle">Ledes napisał(a):</div><div class="quotecontent"><br />[syntax=c]if(cnt &gt; 65530)// &quot;przekrecenie&quot; licznika<br />{<br />cnt = 0;<br />}<br />}[/syntax]<br /></div><br /><br />Nie musisz przekręcać licznika, on się sam przekręci.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=358">nixie</a> — 2 kwi 2013, o 19:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ledes]]></name></author>
<updated>2013-04-02T19:35:57+01:00</updated>
<published>2013-04-02T19:35:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32831#p32831</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32831#p32831"/>
<title type="html"><![CDATA[Ilość kodu w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2742&amp;p=32831#p32831"><![CDATA[
Witam, zrobiłem sobie timer programowy w oparciu o timer sprzętowy w trybie CTC od timera2 (ATmega32A)<br />Zastanawiam się, ile kodu może znaleźć się w procedurze obsługi przerwania, z tego co kojarzę to nie może tam być za dużo kodu.<br />Czy mogą być tam wywołania funkcji (powiedzmy jakiś średnio rozbudowanych)?<br /><br />Przerwanie zaskakuje z częstotliwością 100Hz.<br />I wygląda póki co tak:<br />[syntax=c]// ciało procedury obsługi przerwania Compare Match Timera2<br />// fBazowa = 100Hz<br />ISR( TIMER2_COMP_vect )<br />{<br />static uint16_t cnt; // definicja naszego licznika PWM<br />static uint16_t measCnt;<br /><br />static bool isMeasTime = false;<br /><br />switch(measSpeed)<br />{<br />case mS_1:<br />if(cnt % 100 == 0)<br />{<br />isMeasTime = true;<br />}<br />break;<br /><br /><br />case mS_2:<br />if(cnt % 50 == 0)<br />{<br />isMeasTime = true;<br />}<br />break;<br /><br /><br />case mS_5:<br />if(cnt % 20 == 0)<br />{<br />isMeasTime = true;<br />}<br />break;<br /><br /><br />case mS_10:<br />if(cnt % 10 == 0)<br />{<br />isMeasTime = true;<br />}<br />break;<br />}<br /><br />if(isMeasTime == true)<br />{<br />isMeasTime = false;<br /><br />for(int i=0; i&lt;8; i++)<br />{<br />movAvgRes.meas&#91;measCnt%MOVING_AVER_SIZE&#93;.sensor&#91;i&#93; = measADC(i);<br />}<br /><br />measCnt++;<br /><br />if(measCnt &gt;= MOVING_AVER_SIZE)<br />{<br />for(int i=0; i&lt;8; i++)<br />{<br />measRes.sensor&#91;i&#93; = 0;<br /><br />for(int j=0; j&lt;MOVING_AVER_SIZE; j++)<br />{<br />measRes.sensor&#91;i&#93; += movAvgRes.meas&#91;j&#93;.sensor&#91;i&#93;;<br />}<br />measRes.sensor&#91;i&#93; /= MOVING_AVER_SIZE;<br />measRes.sensor&#91;i&#93; = adc2temp(measRes.sensor&#91;i&#93;);<br />}<br />}<br />}<br /><br /><br />// 10Hz, 10/s<br />if(cnt % 10 == 0)<br />{<br /><br />}<br /><br />// 5Hz, 5/s<br />if(cnt % 20 == 0)<br />{<br /><br />}<br /><br />// 2Hz, 2/s<br />if(cnt % 50 == 0)<br />{<br /><br />}<br /><br />// 1Hz, 1/s<br />if(cnt % 100 == 0)<br />{<br /><br />}<br /><br />cnt++;// zwiększanie licznika o 1<br /><br />if(cnt &gt; 65530)// &quot;przekrecenie&quot; licznika<br />{<br />cnt = 0;<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=355">Ledes</a> — 2 kwi 2013, o 19:35</p><hr />
]]></content>
</entry>
</feed>