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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-11-12T20:27:56+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9208&amp;mode</id>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-11-12T20:27:56+01:00</updated>
<published>2014-11-12T20:27:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103616#p103616</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103616#p103616"/>
<title type="html"><![CDATA[Re: Strukturki]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103616#p103616"><![CDATA[
<div class="quotetitle">RafPe napisał(a):</div><div class="quotecontent"><br />A ja jako poczatkujacy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> zapytam czy nie powinnismy uzyc wskaznikow w tej funkcji ?<br /></div><br />Raczej nie jest to w tym przypadku dobrym pomysłem, chociaż wszystko oczywiście zależy od implementacji i konkretnych wymagań. Tutaj wymogiem była &quot;wiedza&quot; o numerze czujnika i wartości jego pól.<br />W przypadku wskaźników również jest to wykonalne, ale ciężko byłoby poznać numer czujnika. Najprostszym sposobem byłoby zastosowanie pola w strukturze które zawierałoby w właśnie taki numer (na wzór indeksu tablicy), jednak dla niewielkiej ilości czujników nie posiadających jakiś złożonych kilku-bajtowych identyfikatorów po prostu może to nie mieć sensu. Inny sposób jaki mi przychodzi do głowy to wyliczanie offsetu względem jakiegoś czujnika bazowego (powiedzmy zerowego), ale i w tym przypadku rodzi się problem gdyż kompilator może zarezerwować nieciągły obszar pamięci mimo sekwencyjnie zadeklarowanych zmiennych...<br />Można co prawda używać atrybutu &quot;aligned&quot; i sekcji programu definiowanych przez użytkownika, ale to raczej &quot;strzał z armaty do wróbla&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Edit:<br /><div class="quotetitle">jacekk232 napisał(a):</div><div class="quotecontent"><br />...<br />I ciało funkcji wyslij_temp<br />[syntax=c]void wyslij_temp(TTEMP *temperatura)<br />{<br />if(temperatura-&gt;nr_czujnika == 1) uart_puts(&quot;t1=&quot;);<br />else if(temperatura-&gt;nr_czujnika == 2) uart_puts(&quot;t2=&quot;);<br /><br />if(temperatura-&gt;ujemna) uart_putc('-'); //Jesli temp. ujemna wyslij znak minusa<br />uart_putint(temperatura-&gt;stopnie,10); //wyslij temperature(liczby calkowite)<br />uart_putc('.');//wyslij kropke<br />uart_putint(temperatura-&gt;ulamkistopni,10);<br />uart_puts(&quot;\n\r&quot;);<br />}[/syntax]<br /></div><br /> Widzę, że właśnie Kolega użył sposobu z wewnętrznym numerem czujnika. Tak jak pisałem sposób dobry, ale dający lepsze rezultaty w przypadku pobierania identyfikatorów czujników (np. adres czujnika na magistrali 1-wire).<br />Można by się pokusić również o odrzucenie instrukcji warunkowej, która dodatkowo ogranicza ilość możliwych do zainstalowania czujników (bez jej modyfikacji), a w zamian za to od razu wyświetlić numer:<br /><br />[syntax=c]...<br />sprintf(Buf, &quot;t%d=&quot;, temperatura-&gt;nr_czujnika);<br />uart_puts(Buf);<br />...[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 12 lis 2014, o 20:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-11-12T20:21:31+01:00</updated>
<published>2014-11-12T20:21:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103614#p103614</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103614#p103614"/>
<title type="html"><![CDATA[Re: Strukturki]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103614#p103614"><![CDATA[
Mi przyszedł do głowy taki pomysł z użyciem wskaźników<br />[syntax=c]typedef struct {<br />        uint8_t ujemna;<br />        uint8_t stopnie;<br />        uint8_t ulamkistopni;<br />        uint8_t nr_czujnika;<br /><br />}TTEMP;<br /><br />TTEMP t1, t2;[/syntax]<br /><br />W main przypisujemy odpowiednią wartość do zmiennej nr_czujnika<br />[syntax=c]t1.nr_czujnika = 1;<br />t2.nr_czujnika = 2;[/syntax]<br /><br />Wywołanie funkcji wyslij_temp<br />[syntax=c]wyslij_temp(&amp;t1);<br />wyslij_temp(&amp;t2);[/syntax]<br /><br />I ciało funkcji wyslij_temp<br />[syntax=c]void wyslij_temp(TTEMP *temperatura)<br />{<br />if(temperatura-&gt;nr_czujnika == 1) uart_puts(&quot;t1=&quot;);<br />else if(temperatura-&gt;nr_czujnika == 2) uart_puts(&quot;t2=&quot;);<br /><br />if(temperatura-&gt;ujemna) uart_putc('-'); //Jesli temp. ujemna wyslij znak minusa<br />uart_putint(temperatura-&gt;stopnie,10); //wyslij temperature(liczby calkowite)<br />uart_putc('.');//wyslij kropke<br />uart_putint(temperatura-&gt;ulamkistopni,10);<br />uart_puts(&quot;\n\r&quot;);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 12 lis 2014, o 20:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2014-11-12T20:08:01+01:00</updated>
<published>2014-11-12T20:08:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103608#p103608</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103608#p103608"/>
<title type="html"><![CDATA[Re: Strukturki]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103608#p103608"><![CDATA[
A ja jako poczatkujacy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> zapytam czy nie powinnismy uzyc wskaznikow w tej funkcji ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 12 lis 2014, o 20:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-11-12T19:16:19+01:00</updated>
<published>2014-11-12T19:16:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103595#p103595</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103595#p103595"/>
<title type="html"><![CDATA[Re: Strukturki]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103595#p103595"><![CDATA[
Jak najbardziej dobry trop <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />[syntax=c]#include &lt;stdio.h&gt;<br />...<br />temperatury czujnik&#91;2&#93;;<br />...<br />void wyslij_temp (uint8_t nrCzujnika) {<br />char Buf&#91;10&#93;;<br />sprintf(Buf, &quot;t%d=&quot;, nrCzujnika);//Potrzebna biblioteka stdio.h<br />uart_puts(Buf);<br />/*<br />//Ewentualnie można to bardziej rozpisać:<br />uart_putc('t');<br />uart_putint(nrCzujnika, 10);<br />uart_putc('=');<br />*/<br />if(czujnik&#91;nrCzujnika&#93;.ujemna) uart_putc('-'); //Jesli temp. ujemna wyslij znak minusa<br />uart_putint(czujnik&#91;nrCzujnika&#93;.stopnie, 10); //wyslij temperature(liczby calkowite)<br />uart_putc('.');//wyslij kropke<br />uart_putint(czujnik&#91;nrCzujnika&#93;.ulamkistopni,10);<br />uart_puts(&quot;\n\r&quot;);<br />}[/syntax]<br />Ogólnie nie wiem po co tak rozbijać na poszczególne pola skoro można użyć większego typu np. int16_t (ze znakiem) i zapisywać w niej znak, wartość całkowitą i ułamkową pomnożoną przez 10^(ilość miejsc po przecinku). W przypadku wartości zmiennoprzecinkowych odrzucenie pola &quot;ujemna&quot; jest również możliwe...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 12 lis 2014, o 19:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xamrex]]></name></author>
<updated>2014-11-12T18:44:04+01:00</updated>
<published>2014-11-12T18:44:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103590#p103590</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103590#p103590"/>
<title type="html"><![CDATA[Strukturki]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9208&amp;p=103590#p103590"><![CDATA[
Hej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /><br />Na wstępie chciałbym zaznaczyć, że przeczytałem ten poradnik:<br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2013/07/struktury-w-c-wyjasnijmy-sobie-dokadnie.html" >http://mirekk36.blogspot.com/2013/07/st ... adnie.html</a><!-- m --><br />Ale nie potrafię znaleźć tam wytłumaczenia na mój problem.<br /><span style="text-decoration: underline">Chodzi mi o pomiar temperatury z 2 czujników, </span> i wysłanie ich po RSie<br /><br />Zrobiłem sobie taką strukturkę:<br />[syntax=c]typedef struct {<br />uint8_t ujemna;<br />uint8_t stopnie;<br />uint8_t ulamkistopni;<br /><br />}temperatury;<br />temperatury t1,t2;[/syntax]<br /><br />Mam taką pętelkę:<br />[syntax=c]while(1)<br />{<br />//power extern<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br />_delay_ms(750);<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;t1.ujemna, &amp;t1.stopnie, &amp;t1.ulamkistopni) ){<br />wyslij_temp();<br />}<br />else {<br />uart_puts(&quot;ERROR-bład przy pomiarze temperatury z czujnika 1&quot;);<br />}<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;t2.ujemna, &amp;t2.stopnie, &amp;t2.ulamkistopni) ){<br />wyslij_temp2();<br />}<br />else {<br />uart_puts(&quot;ERROR-bład przy pomiarze temperatury z czujnika 2&quot;);<br />}<br />}[/syntax]<br />oraz 2 funkcje ktore wysyłają po RSie<br />[syntax=c]void wyslij_temp (){<br />uart_puts(&quot;t1=&quot;);<br />if(t1.ujemna) uart_putc('-'); //Jesli temp. ujemna wyslij znak minusa<br />uart_putint(t1.stopnie,10); //wyslij temperature(liczby calkowite)<br />uart_putc('.');//wyslij kropke<br />uart_putint(t1.ulamkistopni,10);<br />uart_puts(&quot;\n\r&quot;);<br />}<br /><br />void wyslij_temp2 (){<br />uart_puts(&quot;t2=&quot;);<br />if(t2.ujemna) uart_putc('-'); //Jesli temp. ujemna wyslij znak minusa<br />uart_putint(t2.stopnie,10); //wyslij temperature(liczby calkowite)<br />uart_putc('.');//wyslij kropke<br />uart_putint(t2.ulamkistopni,10);<br />uart_puts(&quot;\n\r&quot;);<br />}[/syntax]<br /><br />Chodzi mi o to, aby zamiast tych  funkcji <strong>wyslij_temp</strong> oraz <strong>wyslij_temp2</strong><br />Stworzyć jedną..<br /><br /><br />np. jakąś taką:<br />[syntax=c]void wyslij_temp (nrCzujnika){<br />uart_puts(&quot;nrCzujnika&quot;);<br />if(nrCzujnika.ujemna) uart_putc('-'); //Jesli temp. ujemna wyslij znak minusa<br />uart_putint(nrCzujnika.stopnie,10); //wyslij temperature(liczby calkowite)<br />uart_putc('.');//wyslij kropke<br />uart_putint(nrCzujnika.ulamkistopni,10);<br />uart_puts(&quot;\n\r&quot;);<br />}[/syntax]<br />Tylko nie bardzo wiem jak się za to wziąć<br /><br />Domyślam się, że chyba trzeba zrobić tablicę (2 elementową?) np. tab[0]=t1; tab[1]=t2; i potem jakos coś na wskaźnikach?? ale nie wiem czy idę dobrym tropem<br />Proszę o pomoc jak to załatwić <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=74">xamrex</a> — 12 lis 2014, o 18:44</p><hr />
]]></content>
</entry>
</feed>