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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-10-04T19:56:00+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21343&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-10-04T19:56:00+01:00</updated>
<published>2018-10-04T19:56:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212250#p212250</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212250#p212250"/>
<title type="html"><![CDATA[Re: Printf i UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212250#p212250"><![CDATA[
<div class="quotetitle">szymanskim napisał(a):</div><div class="quotecontent"><br />Dzięki. Swoją droga czy w bluebooku w kodzie do obsługi nie brakuje załączenia wszystkich przerywań przynajmniej w Atmega328p musiałem dodać SREG |= 0x80 zeby kod ruszył. Chyba, że domyśnie w atmega32 przerywania są włączone.<br /><br />Michał<br /></div><br /><br />Nic nie brakuje, a przerwania włącza się poleceniem w C dla AVR:<br /><br />sei();<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 paź 2018, o 19:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szymanskim]]></name></author>
<updated>2018-10-04T19:31:41+01:00</updated>
<published>2018-10-04T19:31:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212248#p212248</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212248#p212248"/>
<title type="html"><![CDATA[Re: Printf i UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212248#p212248"><![CDATA[
Dzięki. Swoją droga czy w bluebooku w kodzie do obsługi nie brakuje załączenia wszystkich przerywań przynajmniej w Atmega328p musiałem dodać SREG |= 0x80 zeby kod ruszył. Chyba, że domyśnie w atmega32 przerywania są włączone.<br /><br />Michał<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17916">szymanskim</a> — 4 paź 2018, o 19:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-10-03T17:38:26+01:00</updated>
<published>2018-10-03T17:38:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212208#p212208</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212208#p212208"/>
<title type="html"><![CDATA[Re: Printf i UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212208#p212208"><![CDATA[
<div class="quotetitle">szymanskim napisał(a):</div><div class="quotecontent"><br />i z tego co na razie zrozumiałem &quot;wiążę&quot; to strumień z naszą funkcją do wysłania znaku (a właściwie do wrzucenia znaku do bufora)<br /></div><br />Chciałbym jeszcze tylko wyjaśnić, że jeśli już zdecydujesz się na użycie printf, to ta przykładowa funkcja podana przez Ciebie (czy też ta w dokumentacji biblioteki <a href="https://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html"  class="postlink">stdio z avr-libc</a>) blokuje mikrokontroler na czas wysłania całego ciągu znaków przez UART, a więc na dość długo (szczególnie przy małych prędkościach transmisji). Zdecydowanie lepiej byłoby właśnie napisać funkcję, która (tak jak podałeś w nawiasie) dodaje tylko znak do bufora (cyklicznego), a transmisja odbywa się z wykorzystaniem przerwań.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 3 paź 2018, o 17:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szymanskim]]></name></author>
<updated>2018-10-03T12:58:26+01:00</updated>
<published>2018-10-03T12:58:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212198#p212198</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212198#p212198"/>
<title type="html"><![CDATA[Re: Printf i UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212198#p212198"><![CDATA[
Ok, rozumiem. W C i innych językach  programuję już 20  lat i to w ramach normalnej pracy (i w tym czasie tekstów naparsowałem się bez liku) tak więc 'mniej więcej' wiem o co w tym chodzi z tym że programowałem duże systemy serwerowe, użycie słowa &quot;rzutowanie&quot; było skrótem myślowym.<br /><br />Co do pytania &quot;jak to robicie&quot; zdaje sobie sprawy, że nie ma rozwiązania uniwersalnego chodziło o dobre praktyki. W dużych systemach nikt się nie bawi nawet w używanie w printf (czy jak mowa o javie system System.out.println)  bo są bibloteki typu log4j, tylko zdaje sobię sprawę że programowanie mikrokontrolerów  rządzi się swoimi prawami i to co w programowaniu serwerów jest normą (typu programowanie obiektowe, dążenie do jak największej czytelności/łatwości utrzymania kodu kosztem np. pamięci) w kontrolerach wygląda inaczej. Z tego powodu chciałem się podpytać co sugerujecie , bo może np. użycie printf jest to armata na muchę.<br /><br />Tak czy inaczej dzięki za informację <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=17916">szymanskim</a> — 3 paź 2018, o 12:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-10-03T12:36:43+01:00</updated>
<published>2018-10-03T12:36:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212196#p212196</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212196#p212196"/>
<title type="html"><![CDATA[Re: Printf i UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212196#p212196"><![CDATA[
Już wyżej kolega andrews odpisał ci precyzyjnie:<br /><br /><!-- l --><a class="postlink-local" href="https://forum.atnel.pl/post212091.html#p212091" >post212091.html#p212091</a><!-- l --><br /><br />a ty wciąż zadajesz ....hmm sorki wybacz, troszkę dziwne pytanie: &quot;jak wy to robicie?&quot; Toż to zależy od programisty, indywidualnych potrzeb, założeń projektu itp itd - nie ma uniwersalnej odpowiedzi.<br /><br />Z praktyki mogę tylko powiedzieć, choć mogę się mylić oczywiście, że rzadko kto sobie przełącza strumień do printfa - skoro i tak używa jakiejś biblioteki do obsługi UARTA, która jeśli już jest to zwykle serwuje różne gotowe funkcje....<br /><br /><div class="quotetitle">szymanskim napisał(a):</div><div class="quotecontent"><br />gdzie 20C jest brane z inta to muszę to zrzutować na string a później ten string<br /></div><br />ło matko <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ..... ja bym ci jednak polecił zapoznać się z podstawami języka C zanim będziesz pisał o takich rzeczach ... których delikatnie mówiąc nie ma w C <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> jakie rzutowanie inta na stringa ? Jak masz miejsce we Flash to wystarczy zrobić<br /><br />[syntax=c]char buf&#91;50&#93;;<br />uint8_t temperatura = 20;<br /><br />sprintf_P( buf, &quot;Aktualna temperatura %dC&quot;, temperatura );[/syntax]<br /><br />i wysłać bufor czyli tak utworzony string przez UARTA<br /><br />[syntax=c]uart_puts( buf );[/syntax]<br /><br />i po zawodach.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />oczywiście można i bez sprintf() .... można samemu tworzyć w locie string, można posługiwać się funckjami do sklejania stringów jak strcat() , itoa() itp itd itp<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 paź 2018, o 12:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szymanskim]]></name></author>
<updated>2018-10-03T12:09:17+01:00</updated>
<published>2018-10-03T12:09:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212195#p212195</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212195#p212195"/>
<title type="html"><![CDATA[Re: Printf i UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212195#p212195"><![CDATA[
To ja wiem i w kodzie mam bufor cykliczny i przerywania , chyba zbyt mało precyzyjnie napisałem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  oczywiście można użyć tą funkcję która ze stringa przepisuje do bufowa.<br />Ja się o co innego pytam, jeśli przykładow chciałbym przesłać na putty taki tekst &quot;Aktualna temperatura 20C&quot;  gdzie 20C jest brane z inta to muszę to zrzutować na string a później ten string przesłać przez UART'a.<br />Pytanie czy używacie printf czy po prostu używacie sprintf a później w pętli uart_putc ?<br />Znalazłem jakieś przykłady gdzie jest taka konstrukcja:<br /><br />FILE uart_str = FDEV_SETUP_STREAM(uart_putc , NULL, _FDEV_SETUP_WRITE);<br /><br />chociąż nie bardzo rozumiem z przykładu implementacje uart_putc<br /><br />[syntax=c]uart_putchar(char c, FILE *stream)<br />{<br />  if (c == '\a')<br />    {<br />      fputs(&quot;*ring*\n&quot;, stderr);<br />      return 0;<br />    }<br />  if (c == '\n')<br />    uart_putchar('\r', stream);<br />  loop_until_bit_is_set(UCSR0A, UDRE0);<br />  UDR0 = c;<br />  return 0;<br />}[/syntax]<br /><br />Zastanawiam się jaki sens jest parametru &quot;stream&quot; chyba, że on po prostu musi być i tyle.<br /><br />i z tego co na razie zrozumiałem &quot;wiążę&quot; to strumień z naszą funkcją do wysłania znaku (a właściwie do wrzucenia znaku do bufora) i jak to zrobimy po prostu można używać printf.  Co prawda jeszcze tego nie testowałem, zrobię to jak wróce do domu - pytanie jakie rozwiązanie jest przez was rekomendowane.<br /><br /><br /><br />Michał<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17916">szymanskim</a> — 3 paź 2018, o 12:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-10-03T11:59:30+01:00</updated>
<published>2018-10-03T11:59:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212194#p212194</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212194#p212194"/>
<title type="html"><![CDATA[Re: Printf i UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212194#p212194"><![CDATA[
<div class="quotetitle">szymanskim napisał(a):</div><div class="quotecontent"><br />To może inaczej zadam pytanie. Jak tworzycie soft na atmege to domyslam sie, ze uzywacie UARTa aby przez putty miec wglad co wykonuje procek - pytanie uzywacie jakies gotowej bibloteki czy po prostu tworzycie stringi i uzywacie w petli funkcji uart_putc i wysylacie cały string?<br /></div><br />Panie - wysyłanie danych czy to w trybie ASCII czy binarnym to NAJMNIEJSZY problem, przy większych prędkościach nie wymaga nawet praktycznie buforowania - a więc można wysyłać w oparciu o fragment kodu praktycznie wprost z noty PDF (jak chodzi o pojedynczy znak) bo przecież później wysyłanie stringa to tylko<br /><br />[syntax=c]uart_puts( char * str ) {<br />    char znak;<br />    while( (znak = *str ) ) uart_putc( *str++ );<br />}[/syntax]<br /><br />więc tu żadnej filozofii nie ma .... Ale jeśli chce się mieć buforowanie cykliczne nadawanych danych, co ma szczególne znaczenie gdy np korzysta się z niskich prędkości żeby nie blokowało programu głównego - no to wtedy warto oprzeć wszystko o jakiegoś LIB'sa - napisać go samemu nawet .... a przykład i DOKŁADNE omówienie w jaki sposób to zrobić masz w Bluebooku:<br /><br /><!-- m --><a class="postlink" href="https://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >https://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br />tyle że NAJWAŻNIEJSZE jest jednak odbieranie danych ..... bo tu PRAKTYCZNIE zawsze (no może nie zawsze) ale stosuje się buforowanie (bufory cykliczne) niezależnie od baudrate, żeby nie tracić danych<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 paź 2018, o 11:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szymanskim]]></name></author>
<updated>2018-10-03T11:47:03+01:00</updated>
<published>2018-10-03T11:47:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212193#p212193</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212193#p212193"/>
<title type="html"><![CDATA[Re: Printf i UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212193#p212193"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">tonygryps napisał(a):</div><div class="quotecontent">Słuchaj co to znaczy standardowa biblioteka...<br /></div><br /><a href="https://pl.wikibooks.org/wiki/C/Biblioteka_standardowa"  class="postlink">https://pl.wikibooks.org/wiki/C/Biblioteka_standardowa</a><br /><br />Funkcja <em>printf</em> należy do biblioteki standardowej avr-libc <strong><a href="https://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html"  class="postlink">stdio</a></strong><br />.</div><br /><br /><br />To może inaczej zadam pytanie. Jak tworzycie soft na atmege to domyslam sie, ze uzywacie UARTa aby przez putty miec wglad co wykonuje procek - pytanie uzywacie jakies gotowej bibloteki czy po prostu tworzycie stringi i uzywacie w petli funkcji uart_putc i wysylacie cały string?<br /><br />Michał<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17916">szymanskim</a> — 3 paź 2018, o 11:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-09-28T20:55:30+01:00</updated>
<published>2018-09-28T20:55:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212091#p212091</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212091#p212091"/>
<title type="html"><![CDATA[Re: Printf i UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212091#p212091"><![CDATA[
<div class="quotetitle">tonygryps napisał(a):</div><div class="quotecontent"><br />Słuchaj co to znaczy standardowa biblioteka...<br /></div><br /><a href="https://pl.wikibooks.org/wiki/C/Biblioteka_standardowa"  class="postlink">https://pl.wikibooks.org/wiki/C/Biblioteka_standardowa</a><br /><br />Funkcja <em>printf</em> należy do biblioteki standardowej avr-libc <strong><a href="https://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html"  class="postlink">stdio</a></strong><br />Zgodnie z tym cytatem:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />The standard streams stdin, stdout, and stderr are provided, but contrary to the C standard, since avr-libc has no knowledge about applicable devices, these streams are not already pre-initialized at application startup. Also, since there is no notion of &quot;file&quot; whatsoever to avr-libc, there is no function fopen() that could be used to associate a stream to some device. (See note 1.) Instead, the function fdevopen() is provided to associate a stream to a device, where the device needs to provide a function to send a character, to receive a character, or both.<br /></div><br />biblioteka ta nie zawiera funkcji wysyłających czy też odbierających dane przez UART. Użytkownik biblioteki musi sobie taką funkcję napisać sam. To od niego zależy, czy będzie używał przerwań czy też nie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 28 wrz 2018, o 20:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tonygryps]]></name></author>
<updated>2018-09-28T19:24:48+01:00</updated>
<published>2018-09-28T19:24:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212088#p212088</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212088#p212088"/>
<title type="html"><![CDATA[Re: Printf i UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212088#p212088"><![CDATA[
Słuchaj co to znaczy standardowa biblioteka dla Mirka jego jest standardowa dla mnie Moja dla kogoś innego jego jest standardowa chce Ci przez to powiedzieć że to nie forum wróżek jak chcesz uzyskać pomoc to wklej kod albo jak masz bibliotekę z BB lub GB to napisz że chodzi o te.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12014">tonygryps</a> — 28 wrz 2018, o 19:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szymanskim]]></name></author>
<updated>2018-09-27T13:29:23+01:00</updated>
<published>2018-09-27T13:29:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212049#p212049</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212049#p212049"/>
<title type="html"><![CDATA[Printf i UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21343&amp;p=212049#p212049"><![CDATA[
Witam,<br />Zapewne pytanie banalne, ale w przypadku użycia skonfigurowaniu UART i skorzystanie z printf() z standardowej bibloteki  to czy do wysylki odbioru to wykorzystywane jest przerywanie czy na czas wysyłki program jest blokowany i całość jest robiona w programie głównym?<br /><br />Michał Szymanski<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17916">szymanskim</a> — 27 wrz 2018, o 13:29</p><hr />
]]></content>
</entry>
</feed>