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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2024-06-01T20:02:08+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=24652&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2024-06-01T20:02:08+01:00</updated>
<published>2024-06-01T20:02:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24652&amp;p=238124#p238124</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24652&amp;p=238124#p238124"/>
<title type="html"><![CDATA[Re: Niezrozumiałe zachowanie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24652&amp;p=238124#p238124"><![CDATA[
<div class="quotetitle">MarekSz napisał(a):</div><div class="quotecontent"><br />Jeśli zatem na potrzeby rejestru DDRx ktoś stworzył stałe o nazwie DDBn, a na potrzeby PORTxn stałe PINxn, to warto trzymać się tejże konwencji. Popatrz, jeśli tworzysz jakiś timer, który ma się uruchamiać co 3 sekundy i definiujesz to w stałej:<br /><br />#define MOJ_TIMER 3<br /><br />...to zadziała on tak samo, gdy zamiast stałej &quot;MOJ_TIMER&quot; podstawisz PINA3, bo wartość jest ta sama. Jednakże z punktu widzenia czytelności kodu, nie należy tego czynić. Dlatego właśnie przyznałem rację autorom dokumentacji Atmegi i dla rejestru DDR stosować zacznę stałe DDBn zamiast PINxn. Natomiast stałe PINxn dla PORTx.<br /></div><br /><br />Nie obraź się ale teraz to popłynąłeś nieźle - przede wszystkim z tym porównaniem <br /><br />[syntax=c]#define MOJ_TIMER    PINA3[/syntax]<br /><br /><img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><br /><br />no aż parsknąłem śmiechem - nie obraź się ale to tak jakby tłumaczyć komuś:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />&quot;jak kupisz sobie loda to nie wrzucaj go do wrzątku przed zjedzeniem&quot;<br /></div> <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><br /><br />Poza tym nawet autorom twojej dokumentacji atmegi nawet się nie śniły takie wyjaśnienia - a tym bardziej, że nie oni wyznaczają standardy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Po trzecie zaś i ostatnie - to panie, chłopie najkrótsza forma zapisu to:<br /><br />[syntax=c]DDRA |= (1&lt;&lt;PA0);<br /><br />PORTB |= (1&lt;&lt;PB3);<br /><br />if( PINC &amp; (1&lt;&lt;PC2) ) ...[/syntax]<br /><br />PA0, .... PB3, PB5 ... PC1.... PD0 jest najkrótsza i IDEALNIE pasuje do każdego kawałka kodu jak wyżej<br /><br />Na koniec - weź zajrzyj czasem do plików nagłówkowych AVR GCC - a szczególnie do pliku <strong><span style="color: #0040FF">portpins.h</span></strong> - masz tam jak <span style="color: #FF0000"><strong>BYK</strong></span>:<br /><br /><img src="https://obrazkiforum.atnel.pl/54/ed0e3c9a95f18915cea367938f4d4173.png" alt="Obrazek" /><br /><br />I najważniejsze - nie wymyślaj wyjaśnień na podstawie jak napisałeś:<br /><br /><div class="quotetitle">MarekSz napisał(a):</div><div class="quotecontent"><br />Wzięło się to z dokumentacji Atmega128 strona 69 - Reading pin value. Na końcu jest przykład kodu C. Przyznałem im rację, że z punktu logiki kodu powinienem używać &quot;dedykowany&quot; DDBn. W końcu DDR nie ma pinów<br /></div><br /><br />bo nawet nie rozumiesz, że w tych notach najczęściej posługują się implementacją kompilatora IAR AVR nie zaś AVR GCC<br /><br />--------------------------------------<br /><br />Krótko mówiąc i podsumowując twoje niestety mega niesłuszne domysły dobra praktyka programowania AVR to korzystanie właśnie ze skrótów typu<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />PB3 - Port B3<br /><br />PA0 - Port A0<br /></div><br /><br />co pasuje jak pokazałem wyżej do programowania każdego z rejestrów:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />DDRx<br />PORTX<br />PINx<br /></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 1 cze 2024, o 20:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2024-06-01T16:35:00+01:00</updated>
<published>2024-06-01T16:35:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24652&amp;p=238121#p238121</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24652&amp;p=238121#p238121"/>
<title type="html"><![CDATA[Re: Niezrozumiałe zachowanie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24652&amp;p=238121#p238121"><![CDATA[
<div class="quotetitle">MarekSz napisał(a):</div><div class="quotecontent"><br />Wzięło się to z dokumentacji Atmega128 strona 69 - Reading pin value. Na końcu jest przykład kodu C. Przyznałem im rację, że z punktu logiki kodu powinienem używać &quot;dedykowany&quot; DDBn. W końcu DDR nie ma pinów<br /></div><br /><br />Pisząc to niestety nie za bardzo widzę, że wiesz co w ogóle oznaczają te twoje STAŁE typu:<br /><br />DDB1<br />PB1<br /><br />itp - to jedno i to samo - stałe te są po prostu numerami bitów i nie ma ŻADNEGO znaczenia której używasz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 1 cze 2024, o 16:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2024-06-01T07:57:29+01:00</updated>
<published>2024-06-01T07:57:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24652&amp;p=238118#p238118</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24652&amp;p=238118#p238118"/>
<title type="html"><![CDATA[Re: Niezrozumiałe zachowanie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24652&amp;p=238118#p238118"><![CDATA[
<div class="quotetitle">MarekSz napisał(a):</div><div class="quotecontent"><br />Wykłada się oprogramowanie w tej linii, dioda nie miga. Co robię źle?<br /></div><br />W kodzie nic nie robisz źle żeby miał &quot;nie działać&quot; ... gdzieś indziej robisz błąd. Zastanów się przede wszystkim co robisz:<br /><br />[syntax=c]// definiujesz wskaźnik na funkcję<br />static void (*ptr)(void);[/syntax]<br /><br /><br />później w kodzie przypisujesz do wskaźnika wartość:<br /><br />[syntax=c]ptr = &amp;ledBlink;[/syntax]<br /><br />co miałby by być w tym złego co mogłoby psuć program????<br />Jedyne co na przyszłość to gdy przypisujesz wskaźnik funkcji to pamiętaj że nie MUISZ stosować operatora &amp; dla funkcji. Sama nazwa funkcji jest już wskaźnikiem w C. czyli tak:<br /><br />[syntax=c]ptr = ledBlink;[/syntax]<br /><br />Oczywiście to nie jest i nie może być powodem błędu, bo to samo co byś przypisał jakąś wartość do zmiennej np:<br /><br />[syntax=c]uint8_t a;<br />a = 5;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 1 cze 2024, o 07:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow]]></name></author>
<updated>2024-06-01T06:53:09+01:00</updated>
<published>2024-06-01T06:53:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24652&amp;p=238117#p238117</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24652&amp;p=238117#p238117"/>
<title type="html"><![CDATA[Re: Niezrozumiałe zachowanie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24652&amp;p=238117#p238117"><![CDATA[
Hej,<br /> wziąłem Twój kod tak jak stoi i odpaliłem (co prawda na innym procku Atmega 328PB, bo taki miałem pod ręką) i u mnie on działa, nawet jak zamiast wywołania &quot;ledBlink();&quot; daję &quot;ptr();&quot; w pętli main. Sprawdzone z ostatatnim polecanym Eclipse. <br /><br />Mały drobiazg - linijka &quot;DDRE |= (1&lt;&lt;DDB2);&quot;<br />powinna chyba brzmieć &quot;DDRE |= (1&lt;&lt;PE2);&quot;<br /><br />PS. Jeśli chodzi o moje osobiste preferencje, to wskażniki do funkcji raczej definiuję w ten sposób (przynajmniej dla mnie jest odrobinę czytelniej):<br /><br />[syntax=c]typedef void blinkFuncType(void);<br />static blinkFuncType *blinkFunc;<br />void ledBlink() {/* ... */}<br />// i potem<br />blinkFunc = &amp;ledBlink;[/syntax]<br /><br />Pozdrowienia,<br />-krzysiek-<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20760">moscow</a> — 1 cze 2024, o 06:53</p><hr />
]]></content>
</entry>
</feed>