<?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=8&amp;t=20975&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-07-11T08:30:47+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=20975&amp;mode</id>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2018-07-11T08:30:47+01:00</updated>
<published>2018-07-11T08:30:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209678#p209678</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209678#p209678"/>
<title type="html"><![CDATA[Re: Liczba uint32_t w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209678#p209678"><![CDATA[
Czasem rzeczy są znane i nie są tajemnicą, ale wystarczy wskazać palcem i stają się oczywiste.<br />Dziękuję za pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 11 lip 2018, o 08:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-07-11T08:21:38+01:00</updated>
<published>2018-07-11T08:21:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209677#p209677</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209677#p209677"/>
<title type="html"><![CDATA[Re: Liczba uint32_t w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209677#p209677"><![CDATA[
<div class="quotetitle">Tom277 napisał(a):</div><div class="quotecontent"><br />ale czy mógłbyś mi wskazać gdzie jest &quot;podwójne odkładanie i pobieranie rejestrów na stosie&quot; ?<br /></div><br />Tzn pewnie wiesz, że każde przerwanie czy tego chcesz ma swój prolog i epilog - czyli MUSI odłożyć na stosie używane rejestry wewnątrz przerwania a w prologu czyli przed wyjściem z przerwania musi je zdjąć ze stosu.<br /><br />Jak myślisz ? jak działają funkcje ? W końcu procedura obsługi przerwania to też pewien rodzaj funkcji <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... a więc takie same zasady ... przecież wchodząc w funkcję gdy kompilator musi użyć rejestrów, które mogłyby być wykorzystywane przed jej wywołaniem - MUSI zrobić dokładnie to samo ... tzn oczywiście jest pewna różnica w stosunku do przerwania bo w przypadku funkcji działa mocno optymalizator, który może oczywiście przy niewielkim programie użyć innych (wcześniej nie używanych) rejestrów i nic nie będzie odkładał na stosie. W przypadku o którym tu mowa trzeba byłoby zajrzeć do pliku *.lss czyli kodu asemblerowego tego co napisałeś i sam byś się szybko przekonał czy zostały odłożone czy nie - istnieje taka możliwość, że z powodu optymalizacji ta twoja funkcja może w ogóle zniknąć i jej ciało pojawi się po prostu w przerwaniu ... no ale trzeba mieć na uwadze, że optymalizacja może się zmieniać po każdej często nawet drobnej modyfikacji programu. Wziąwszy wszystko pod uwagę - oczywiście to że dwa razy odkładają się rejestry na stosie jak mówię może być na wyrost w tym wypadku ale warto wiedzieć jak to działa na przyszłość.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 lip 2018, o 08:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2018-07-11T08:00:18+01:00</updated>
<published>2018-07-11T08:00:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209675#p209675</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209675#p209675"/>
<title type="html"><![CDATA[Re: Liczba uint32_t w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209675#p209675"><![CDATA[
Ok rozumiem, masz rację z tą niepotrzebną funkcją. Skok dotyczy obsługi funkcji i zapis stanu &quot;programu&quot; na stosie, ale czy mógłbyś mi wskazać gdzie jest &quot;podwójne odkładanie i pobieranie rejestrów na stosie&quot; ? Tego nie wiem, nie widzę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 11 lip 2018, o 08:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-07-11T07:08:55+01:00</updated>
<published>2018-07-11T07:08:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209672#p209672</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209672#p209672"/>
<title type="html"><![CDATA[Re: Liczba uint32_t w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209672#p209672"><![CDATA[
<div class="quotetitle">Tom277 napisał(a):</div><div class="quotecontent"><br />To jeszcze dopytam. <br />Czyli tak, nieważne jaka zmienna jest w przerwaniu bo jeśli nie zrobię tego specjalnie to przerwania nie przerwie mi inne przerwanie i cała nawet 32 bitowa zmienna zostanie &quot;obrobiona&quot; w całości. Dopiero po zakończeniu obsługi przerwania może nastąpić inne które np. zmodyfikuje mi w/w 32 bitową zmienną, ale też w całości. Dopiero dostęp do tej zmiennej np w pętli głównej może zostać przerwany (przerwaniem) bo odbywa się na raty po 8 bitów i tu mogą wystąpić przekłamania, problemy? Po to stosuje się dostęp atomowy?<br /></div><br /><br />DOKŁADNIE co do joty tak jest jak piszesz.<br /><br />Ja jedynie bym podpowiedział, żeby nie robić niepotrzebnych skoków do funkcji z wewnątrz przerwania - w twoim kodzie wydaje się to być całkowicie niepotrzebne. Ciało tej funkcji spokojnie można umieścić w przerwaniu, a tak to wykonujesz jeden niepotrzebny skok i powrót a co gorsze podwójne odkładanie i pobieranie rejestrów na stosie. Raz w przerwaniu a raz w samej funkcji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 lip 2018, o 07:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2018-07-11T07:05:26+01:00</updated>
<published>2018-07-11T07:05:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209671#p209671</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209671#p209671"/>
<title type="html"><![CDATA[Re: Liczba uint32_t w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209671#p209671"><![CDATA[
To jeszcze dopytam. <br />Czyli tak, nieważne jaka zmienna jest w przerwaniu bo jeśli nie zrobię tego specjalnie to przerwania nie przerwie mi inne przerwanie i cała nawet 32 bitowa zmienna zostanie &quot;obrobiona&quot; w całości. Dopiero po zakończeniu obsługi przerwania może nastąpić inne które np. zmodyfikuje mi w/w 32 bitową zmienną, ale też w całości. Dopiero dostęp do tej zmiennej np w pętli głównej może zostać przerwany (przerwaniem) bo odbywa się na raty po 8 bitów i tu mogą wystąpić przekłamania, problemy? Po to stosuje się dostęp atomowy?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 11 lip 2018, o 07:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szpilek]]></name></author>
<updated>2018-07-10T19:49:17+01:00</updated>
<published>2018-07-10T19:49:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209663#p209663</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209663#p209663"/>
<title type="html"><![CDATA[Re: Liczba uint32_t w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209663#p209663"><![CDATA[
Nie widzę problemu, używaj śmiało:D<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2485">szpilek</a> — 10 lip 2018, o 19:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2018-07-10T19:19:09+01:00</updated>
<published>2018-07-10T19:19:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209661#p209661</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209661#p209661"/>
<title type="html"><![CDATA[Liczba uint32_t w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20975&amp;p=209661#p209661"><![CDATA[
Witam<br />Mam zamiar użyć liczby 32 bitowej w przerwaniu INT_0 tak jak poniżej<br /><br />[syntax=c]volatile uint32_t ktory_czujnik;<br /><br />int main(void)<br />{<br />     Ini_interrup();<br />     <br />     sei();<br /><br />     while(1)<br />     {<br />      <br />      //tu coś tam będę robił ze zmienną  &quot;ktory_czujnik&quot;<br /><br />     }<br />}<br /><br />ISR(INT0_vect)<br />{<br />ktory_czujnik = Odczytaj_czujniki(); //tu funkcja odczytuje 3 x expander wejść po 8 bitów, wynik wpisuje do 32 bitowej zmiennej.<br />}<br /><br /><br />uint32_t Odczytaj_czujniki(void)//odczyt (expander) 24 wejść<br />{<br />uint32_t Key = 0;<br />SL_H;<br />for(uint8_t i=24;i&gt;0;i--)<br />{<br />CLK_L;<br />Key = Key &lt;&lt; 1;<br />if (SK2_L) Key++;<br />CLK_H;<br />}<br />SL_L;<br />CLK_L;<br />  return(Key);//zwróć stan czujników<br />}[/syntax]<br /><br />Moje obawy dotyczą użycia tak dużej (w moim mniemaniu) liczby w przerwaniu a następnie różnych operacji na tej liczbie w programie. W pętli while zabezpieczę liczbę atomowym dostępem choć nie do końca jestem pewien czy to konieczne, ponieważ specyfika programu i odczytu czujników powoduje, że nic się nie stanie jeśli wdanym obiegu pętli nie wszystkie czujniki zostaną odczytane jako aktywne. Po prostu przy następnym obiegu wartość zostanie zaktualizowana, no i też nie będzie się zmieniać za często, ale to inna historia, nie w tym sedno pytania. Mnie zastanawia czy nie popełniam jakiegoś błędu wpychając sporą liczbę w przerwanie. Można tak robić? Wydaje mi się, że nie jest to skucha, dobrze mi się wydaje?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 10 lip 2018, o 19:19</p><hr />
]]></content>
</entry>
</feed>