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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-07-07T10:15:21+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=15732&amp;mode</id>
<entry>
<author><name><![CDATA[Situs]]></name></author>
<updated>2016-07-07T10:15:21+01:00</updated>
<published>2016-07-07T10:15:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163563#p163563</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163563#p163563"/>
<title type="html"><![CDATA[Re: ATTINY 26 dziwnie wyświetla liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163563#p163563"><![CDATA[
Po prostu XORnij liczbę przez 0xFF<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 13 minutach ]</span></strong><br /><br />A przy 10 bitowej XORnij przez 0x3FF<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14339">Situs</a> — 7 lip 2016, o 10:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-07-07T06:24:37+01:00</updated>
<published>2016-07-07T06:24:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163557#p163557</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163557#p163557"/>
<title type="html"><![CDATA[Re: ATTINY 26 dziwnie wyświetla liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163557#p163557"><![CDATA[
<div class="quotetitle">asek5 napisał(a):</div><div class="quotecontent"><br />Tak działa. Można prosić o wytłumaczenie tego zapisu i dlaczego tak się dzieje w attiny .<br />[syntax=c]itoa (tym2, (char*)((int)bufor &amp; 0xff), 10);[/syntax]<br /></div><br />Tak się nie dzieje w attiny panie kochany - a TYLKO i WYŁĄCZNIE w ATtiny26 ... w innych prockach serii ATtiny nawet mniejszych jak ATtiny13 działa to poprawnie.<br /><br />Wszystko z tego powodu, że biedny ATtiny26 (staruszek) ma niby babola .... &quot;niby&quot; Atmel stwierdził w nocie w erracie/aktualizacji że nie działa mu rozkaz &quot;lpm Rd, Z+&quot; w asemblerze. Usunięto go z listy instrukcji asm jak zęba <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> u tego staruszka<br /><a href="https://obrazkiforum.atnel.pl/54/27c1523a10ef5830b724839c15c9f9ed.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/54/27c1523a10ef5830b724839c15c9f9ed.jpg" alt="Obrazek" /></a><br /><br />Natomiast po wykonaniu itoa() wywoływana jest funkcja strrev(), która odwraca kolejność bajtów bo itoa() układa je wspak na początku a strrev przywraca właściwy porządek .... <br /><br />Ale wskaźnik stosu w ATtiny26 jest tylko 8 bitowy (w pozostałych prockach 16-bitowy) więc brak funkcji o której mowa wyżej powoduje, że źle jest generowany kod dzięki któremu są porównywane wskaźniki do stringa dla funkcji strrev(), która nomen omen jest napisana jako wstawka asemblerowa, która zawsze liczy na to, że będzie działać ten &quot;wyrwany ząb&quot; czyli rozkaz omawiany wyżej - w połączeniu z 8-bitowym wskaźnikiem stosu powoduje błąd, bo próba realizacji <br /><br />Z = Z + 1;<br /><br />prowadzi tak na prawdę do operacji:<br /><br />Z = (Z + 1) &amp; 0x00FF;<br /><br />Stąd gościu, który wyśledził tego BUG'a w ATtiny26 ... śledząc żmudnie co dzieje się w asemblerze po kompilacji - w końcu doszedł do tego, żeby zrobić taki karkołomny zapis<br /><br />[syntax=c](char*)((int)text &amp; 0xff)[/syntax]<br /><br />co oznacza, żeby kompilator zanim weźmie pod uwagę wskaźnik do tekstu (char*), najpierw uznał ten wskaźnik na tekst jako liczbę typu int zamaskowaną wartością 0xFF, żeby wzięta została tylko wartość młodszego bajtu i dopiero po tym, uznał to za wskaźnik na char* <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> co spowoduje, że kompilator tak wygeneruje kod w asemblerze, że weźmie sobie pod uwagę to jak prawidłowo porównać wskaźniki bez użycia lpm Rd, Z+ <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... To tak ogólnie i obrazowo troszkę wyjaśniam bo trzeba byłoby rzeczywiście rzucać tutaj kupą tzw &quot;asemblerowego mięsa&quot; żeby pokazać o co chodzi...<br /><br />ale wszystko dość ciekawie opisane jest w wątku: <!-- m --><a class="postlink" href="https://www.mikrocontroller.net/topic/203143" >https://www.mikrocontroller.net/topic/203143</a><!-- m --> gdzie widać w jaki sposób user o nicku Joachim rozpruwa krok po kroku temat <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... Gdzie m.inn twórcy AVR GCC mówią mu po drodze, że nie można albo nie opłaca się robić specjalnego wyjątku w kompilatorze żeby obejść tę niedogodność w ATtiny26 związaną z brakiem tego rozkazu asemblerowego - że to wina procka, że to babol w procku a on na końcu im udowadnia, że w sumie to nie do końca wina procka bo i bez tego rozkazu da się to zrobić i dochodzi w ostatnim poście jak <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... i dalej już cisza<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 7 lip 2016, o 06:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[asek5]]></name></author>
<updated>2016-07-07T04:52:33+01:00</updated>
<published>2016-07-07T04:52:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163556#p163556</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163556#p163556"/>
<title type="html"><![CDATA[Re: ATTINY 26 dziwnie wyświetla liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163556#p163556"><![CDATA[
Tak działa. Można prosić o wytłumaczenie tego zapisu i dlaczego tak się dzieje w attiny .<br />[syntax=c]itoa (tym2, (char*)((int)bufor &amp; 0xff), 10);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5515">asek5</a> — 7 lip 2016, o 04:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-07-06T23:39:14+01:00</updated>
<published>2016-07-06T23:39:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163553#p163553</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163553#p163553"/>
<title type="html"><![CDATA[Re: ATTINY 26 dziwnie wyświetla liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163553#p163553"><![CDATA[
Nie mam ATtiny26, by to sprawdzić, ale podobno takie oto rozwiązanie rozwiąże twój problem z użyciem itoa():<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br /><br />int main(void)<br />{<br />lcd_init();<br /><br />uint8_t tym2 = 124;<br /><br />char bufor &#91;16&#93;;<br />//itoa (tym2, bufor, 10);<br />itoa (tym2, (char*)((int)bufor &amp; 0xff), 10);<br />lcd_str(bufor);<br /><br />while(1);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 6 lip 2016, o 23:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[asek5]]></name></author>
<updated>2016-07-06T21:49:46+01:00</updated>
<published>2016-07-06T21:49:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163547#p163547</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163547#p163547"/>
<title type="html"><![CDATA[ATTINY 26 dziwnie wyświetla liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15732&amp;p=163547#p163547"><![CDATA[
Witam zakupiłem ostatnio attiny 26 i mam problem z wyświetlaniem liczb na LCD (HD44780).<br />Po poleceniu <br />[syntax=c]uint8_t tym2=124;<br />lcd_int(tym2);[/syntax]<br />Na wyświetlaczu widzę 421. Na innych prockach jest ok.<br />Po podłączeniu do attiny  nadajnika nrf24l01 wysłaniu zmiennej  zamienionej itoa &quot;tym2=124&quot; do innego procka dane też są odwrócone dlaczego?<br />Wina procesora może to chińczyk, albo coś w eclipsie? Pomiary odczytane z ADC też są wyświetlane od tyłu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5515">asek5</a> — 6 lip 2016, o 21:49</p><hr />
]]></content>
</entry>
</feed>