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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-08-25T14:33:10+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=22510&amp;mode</id>
<entry>
<author><name><![CDATA[Semi]]></name></author>
<updated>2019-08-25T14:33:10+01:00</updated>
<published>2019-08-25T14:33:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221618#p221618</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221618#p221618"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221618#p221618"><![CDATA[
<div class="quotetitle">banita 17 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">Semi napisał(a):</div><div class="quotecontent"><div class="quotetitle">banita 17 napisał(a):</div><div class="quotecontent">Nie mniej polecam debugować programy bez optymalizacji <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /></div><br />Nie jest to dobry pomysł. Niektóre operacje ne peryferiach nie będą działać, bo pomiędzy zapisami będzie pauza większa niż 4 cykle zegara. Nie da się wiec zapisać EEPROM, ustawiać watchdoga, itp.</div><br /><br />Ciekawa teza aczkolwiek ostatecznie uważam, że nie masz racji. Masz jakieś doświadczenia z tym związane ? Jakaś opis który by to potwierdził ? (Jak coś to nie jestem złośliwy tylko ciekawy, chętnie się czegoś nowego dowiem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> )<br /></div><br />Skompiluj program bez optymalizacji i zobacz rozwinięcie asm.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20851">Semi</a> — 25 sie 2019, o 14:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[banita 17]]></name></author>
<updated>2019-08-25T10:52:42+01:00</updated>
<published>2019-08-25T10:52:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221617#p221617</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221617#p221617"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221617#p221617"><![CDATA[
<div class="quotetitle">Semi napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">banita 17 napisał(a):</div><div class="quotecontent">Nie mniej polecam debugować programy bez optymalizacji <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /></div><br />Nie jest to dobry pomysł. Niektóre operacje ne peryferiach nie będą działać, bo pomiędzy zapisami będzie pauza większa niż 4 cykle zegara. Nie da się wiec zapisać EEPROM, ustawiać watchdoga, itp.</div><br /><br />Ciekawa teza aczkolwiek ostatecznie uważam, że nie masz racji. Masz jakieś doświadczenia z tym związane ? Jakaś opis który by to potwierdził ? (Jak coś to nie jestem złośliwy tylko ciekawy, chętnie się czegoś nowego dowiem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> )<br /><br /><br />A co do autora wątku to nie musimy uciekać na prv. Będziesz musiał sam trochę popracować <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Możesz wstawić linijkę z wywołaniem funkcji: void parse_nrf_data ( char * buf, uint8_t len ) oraz linijkę w której pokazałbyś skąd dane biorą się w buforze którego wskaźnik przekazujesz do funkcji parse_nrf_data do argumentu 'buf'. <br /><br />I tak jak Mirek powiedział musisz zjeść tego słonia po kawałku tzn krok po kroku analizuj co i gdzie. Masz wyświetlacz, diody + do tego debugger to naprawdę spore możliwości. Musisz iść w stronę 'źródła' danych bufora 'buf' i sprawdzić w którym kroku dysponujesz danymi których faktycznie oczekujesz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=279">banita 17</a> — 25 sie 2019, o 10:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow]]></name></author>
<updated>2019-08-25T09:59:16+01:00</updated>
<published>2019-08-25T09:59:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221616#p221616</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221616#p221616"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221616#p221616"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />No i tak to bywa - debuger nie załatwi sam pewnych spraw za programistę ... Tak poczytałem ten wątek ... i aż troszkę strach bierze gdy kolega autor wątku pisze np takie coś:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><span style="color: #FF0000"><em>char str_95 PROGMEM = '_';<br />    strncmp_P(buf, str_95, 1);</em></span><br /></div><br /><br />Po prostu tragedia - proponuję jednak wrócić do podstaw i zastanowić się co to jest C-String, czyli string w C ... bo to nigdy w życiu nie jest stringiem, i jeśli korzystanie z funkcji strncmp_P() lub podobnych powoduje wykładanie się procka do góry nogami i jak kolega pisze powrót do main() ;) albo losowe działanie IF'ów to - .... to panie kochany .... [...[<br /></div><br />Tak gwoli ścisłości, to akurat ta dokładnie konstrukcja zadziała (przy założeniu, że zawartość <em>buf[]</em> jest zgodna z oczekiwaniami) i nie spowoduje wyłożenia się procka.<br />To jest str<span style="color: #FF2400"><strong>n</strong></span>cmp (ograniczony do jednego bajtu ostatnim argumentem), a nie strcmp.<br />Co prawda wygląda na to, że akurat strncmp_P jest napisane w asemblerze, ale typowa implementacja zwykłego strncmp wygląda mniej więcej tak jak niżej i sprawdzenie końca ciągu znaków odbywa się <em>explicite</em> tylko dla <strong>s1</strong><br />[syntax=c]int<br />strncmp(s1, s2, n)<br />register const char *s1, *s2;<br />register size_t n;<br />{<br />if (n == 0)<br />return (0);<br />do {<br />if (*s1 != *s2++)<br />return (*(unsigned char *)s1 - *(unsigned char *)--s2);<br />if (*s1++ == 0)<br />break;<br />} while (--n != 0);<br />// ^^^^^^^^^^<br />return (0);<br />}[/syntax]<br /><br />Czy jej użycie ma sens - to inna historia. Zasugerowałem ją, bo nie wiedziałem z pierwszego postu o co dokładnie chodzi... czy porównywany ma być pojedynczy znak, czy para znaków.<br />Dla pojedynczego znaku i przy pewności, że chodzi porównanie będzie dotyczyło pierwszego znaku w buforze - pewnie wystarczyłoby zwykłe<br />[syntax=c]if (95 == buf&#91;0&#93;) { /* coś tam */}[/syntax]<br />Co do pozostałych uwag - całkowicie się zgadzam :-) Niemniej z tego co Koledzy już zauważyli - problem jest raczej po stronie zawartości pamięci wskazywanej przez zmienną <em>buf</em> a nie samych porównań :-)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20760">moscow</a> — 25 sie 2019, o 09:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Semi]]></name></author>
<updated>2019-08-25T08:42:15+01:00</updated>
<published>2019-08-25T08:42:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221613#p221613</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221613#p221613"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221613#p221613"><![CDATA[
<div class="quotetitle">banita 17 napisał(a):</div><div class="quotecontent"><br />Nie mniej polecam debugować programy bez optymalizacji <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /></div><br />Nie jest to dobry pomysł. Niektóre operacje ne peryferiach nie będą działać, bo pomiędzy zapisami będzie pauza większa niż 4 cykle zegara. Nie da się wiec zapisać EEPROM, ustawiać watchdoga, itp.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20851">Semi</a> — 25 sie 2019, o 08:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-08-25T05:09:34+01:00</updated>
<published>2019-08-25T05:09:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221612#p221612</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221612#p221612"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221612#p221612"><![CDATA[
<div class="quotetitle">goslawen napisał(a):</div><div class="quotecontent"><br />program dalej zachowuje się dziwnie, czego nie jestem w stanie zrozumieć.<br /></div><br />No to twoim zadaniem jest WYIZOLOWAĆ problem. Czyli ? ...<br /><br />Skróć go tak jak się da - pokaż tylko ten fragment który ci nie działa i opisz co to znaczy, że zachowuje się dziwnie - bo wybacz ale to bez sensu - zadawać pytanie na forum typu:<br /><br />&quot;Panowie program zachowuje mi się dziwnie - pomożecie?&quot;<br /><br />Po tym co robisz widać, że nie ma to nic a nic wspólnego z jakimś NRF ... porzuć zatem ten projekt na chwilę, załóż nowy i wymyśl sobie prosty test do porównywania stringów - bo widać, że zdaje się z tym masz największy problem.<br /><br />Do tego wystarczy kawałek wyświetlacza LCD a zdaje się masz zestawik ATB to nie powinno być kłopotu napisać jakiś mały fragment kodu do przetestowania .... i zamiast też pisać, że <br /><br />&quot; ... mimo użycia czegoś tam - nadal mi nie działa&quot;<br /><br />Panie kod swój pokazuj jeśli wprowadzasz poprawki - mówię o tym testowym ok? No niestety tego też trzeba się nauczyć - to PODSTAWA PODSTAW jeśli chodzi o programowanie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 sie 2019, o 05:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[goslawen]]></name></author>
<updated>2019-08-24T23:16:59+01:00</updated>
<published>2019-08-24T23:16:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221608#p221608</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221608#p221608"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221608#p221608"><![CDATA[
Mirku,<br /><br />Jak wcześniej możesz zauważyć w moim kodzie nie było zupełnie<br /><br />[syntax=c]char str_95 PROGMEM = '_';<br />strncmp_P(buf, str_95, 1);[/syntax]<br /><br />czy<br /><br />[syntax=c]char str_95 PROGMEM = '_';[/syntax]<br /><br />Pisząc te kody koledzy wyjaśniali mi jakie mogą być potencjalne problemy.<br /><br />Dziękuję bardzo, bo trochę mi się to wszystko poukładało, a takie przykłady pozwalają dopiero to zrozumieć. Bez prób, często tych najgłupszych nigdy nie jestem w stanie czegoś zrozumieć do końca.<br /><br />Niestety mimo użycia <br /><br />[syntax=c]const char str_95&#91;&#93; PROGMEM = &quot;_&quot;;[/syntax]<br /><br />program dalej zachowuje się dziwnie, czego nie jestem w stanie zrozumieć.<br /><br />Jak zauważysz wyżej, po sugestii kolegi w buf[x] pojawiają się dziwne wartości, więc albo coś mocno sknociłem w kodzie w innym miejscu albo mam np.wadliwe nrf.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2353">goslawen</a> — 24 sie 2019, o 23:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-08-24T22:46:20+01:00</updated>
<published>2019-08-24T22:46:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221606#p221606</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221606#p221606"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221606#p221606"><![CDATA[
No i tak to bywa - debuger nie załatwi sam pewnych spraw za programistę ... Tak poczytałem ten wątek ... i aż troszkę strach bierze gdy kolega autor wątku pisze np takie coś:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br /><span style="color: #FF0000"><em>char str_95 PROGMEM = '_';<br />    strncmp_P(buf, str_95, 1);</em></span><br /></div><br /><br />Po prostu tragedia - proponuję jednak wrócić do podstaw i zastanowić się co to jest C-String, czyli string w C ... bo to nigdy w życiu nie jest stringiem, i jeśli korzystanie z funkcji strncmp_P() lub podobnych powoduje wykładanie się procka do góry nogami i jak kolega pisze powrót do main() <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> albo losowe działanie IF'ów to - .... to panie kochany ....<br /><br />1. to nie jest żaden powrót do main tylko &quot;pierdyknięcie stosu&quot; bo próbujesz porównywać nie stringa tylko np pół pamięci FLASH zanim funkcja porównująca dojdzie do końca tego rzekomego stringa czyli do zera<br /><br />2. to nie jest żadne losowe działanie IFów tylko mega PASKUDNY niestety czy tego chcesz czy nie babol programisty, który nie wie co to jest STRING w języku C<br /><br />i na to nie pomoże żaden DEBUGER jak widać - bo już od dłuższego czasu widzę walczysz z debugerem i wciąż ten sam efekt.<br /><br />---------------------------------<br /><br />Przypominam już w Bluebooku masz napisane co to jest C-String .... otóż taki STRING MUSI być Qurczę zakończony znakiem NULL czyli zerem<br /><br />to:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />char str_95 PROGMEM = '_';   <span style="color: #FF0000"><strong><span style="font-size: 150%; line-height: normal"> // to zajmie JEDEN koci bajt !!!</span></strong></span><br /></div><br /><br />nie jest żaden Qurdę string tylko jakaś definicja stałej dosłownej  - w tym wypadku jednego znaku i nie ZAKOŃCZONA zerem rozumiesz ? Już pomijam że brakuje specyfikatotra const<br /><br />TO jest STRING<br /><br />[syntax=c]const char str_95&#91;&#93; PROGMEM = &quot;_&quot;;   // to zajmie DWA bajty w pamięci FLASH , pierwszy to kod znaku &quot;_&quot; a drugi ZERO[/syntax]<br /><br />no to są PODSTAWY PODSTAW z Bluebooka i bardzo dobrze tam opisane. Jeśli się tego nie zrozumie - to się będzie miało do czynienia z GIGANTYCZNYMI KASZANAMI w kodzie i dlatego tak dużo miejsca temu poświęciłem. W języku C - trzeba zrozumieć co to jest STRING.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br />Stałe dosłowne, literały są często umiejscawiane w pamięci FLASH przez kompilator na samym początku przed kodem programu. Przez co za takim literałem nie zakończonym zerem mogą być kolejne znaki i kolejne aż w końcu kod programu i długo może nie być zera ... próba używania funkcji do operacji na stringach - którym daje się do jedzenia TAK NIESTRAWNE danie w postaci sztucznych zatrutych stringów - spowoduje, że procek dostanie niestrawności i wymiotów<br /><br />a na poważnie to i stos może się przekręcić aby na końcu zresetować procka - a tobie się wydaje, że program wraca w jakiś dziwny tajemniczy sposób do main(). Nie - nie wraca tylko następuje najzwyklejszy okrutny restart<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 24 sie 2019, o 22:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[goslawen]]></name></author>
<updated>2019-08-24T22:04:33+01:00</updated>
<published>2019-08-24T22:04:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221605#p221605</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221605#p221605"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221605#p221605"><![CDATA[
W związku z tym, że sprawdzenie mojego problemu rozbija się o miejsca w kodzie Mirka napisałem wiadomość prywatną, żeby nie udostępniać wycinków biblioteki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2353">goslawen</a> — 24 sie 2019, o 22:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[banita 17]]></name></author>
<updated>2019-08-24T21:39:25+01:00</updated>
<published>2019-08-24T21:39:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221604#p221604</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221604#p221604"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221604#p221604"><![CDATA[
Hmmm... czyli jednym słowem w zmiennej buf znajduje się coś czego zupełnie się nie spodziewamy. Wydaje mi się, że musisz 'pójść' z debuggerem wcześniej tzn przed wywołanie funkcji: void parse_nrf_data ( char * buf, uint8_t len ) i sprawdzić czy tam w którejś ze zmiennych które później przekazujemy do tablicy buff jest to czego byśmy się spodziewali. Bo liczba 192 jest poza zakresem tablicy ASCII.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=279">banita 17</a> — 24 sie 2019, o 21:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[goslawen]]></name></author>
<updated>2019-08-24T21:28:21+01:00</updated>
<published>2019-08-24T21:28:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221603#p221603</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221603#p221603"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221603#p221603"><![CDATA[
znak0 = buf[0]; - wartość 192<br />znak1 = buf[1]; - wartość 10<br />znak2 = buf[2]; - wartość 148<br />znak3 = buf[3]; - wartość 110<br />znak4 = buf[4]; - wartość 200<br /><br />Przez przypadek zauważyłem też, że zdarza się &quot;wylecieć&quot; programowi z powrotem do main().<br /><br />Po chwili - nadajnik ciągle wysyła -&gt; f<br /><br />znak0 = buf[0]; - wartość 192<br />znak1 = buf[1]; - wartość 7<br />znak2 = buf[2]; - wartość 12 <br />znak3 = buf[3]; - wartość 148<br />znak4 = buf[4]; - wartość 108<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2353">goslawen</a> — 24 sie 2019, o 21:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[banita 17]]></name></author>
<updated>2019-08-24T21:18:20+01:00</updated>
<published>2019-08-24T21:18:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221602#p221602</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221602#p221602"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221602#p221602"><![CDATA[
heheheh.. No tak. Śmieszna sprawa. Czym jest wskaźnik ? Wskaźnik to jest adres w pamięci programu. Czyli jednym słowem wartości wskaźnika to jest adres w pamięci. Czyli jak doczytujesz debuggerem zmienną 'buf' która jest zdefiniowana jako tablica np char buf[5] to debugger poda ci wartość czyli adres. Jeżeli chcesz podejrzeć jakie znaki znajdują się w tym buforze to musisz zrobić tak:<br /><br />char pierwszyZnakBufora = buf[0];<br />char drugiZnakBufora = buf[1];<br /><br />i teraz dopiero debuggerem/myszką najechać na zmienne 'pierwszyZnakBufora ' i 'drugiZnakBufora ' i wtedy dowiesz się jakie znaki faktycznie tam się znajdują. Analogicznie ze zmiennymi w pamięci PROGMEM. <br /><br />Mam nadzieję, że rozumiesz ? Jeżeli za słabo to wytłumaczyłem  to śmiało mów bardziej się wysilę <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=279">banita 17</a> — 24 sie 2019, o 21:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[goslawen]]></name></author>
<updated>2019-08-24T21:10:09+01:00</updated>
<published>2019-08-24T21:10:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221601#p221601</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221601#p221601"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221601#p221601"><![CDATA[
Nie wiedziałem, że mogę wykonać to źle <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Po prostu nakierowuję myszkę na zmienną i wyświetla się wartość.<br />W przypadku innych zmiennych tak to właśnie działa.<br />Można to podejrzeć inaczej?<br /><br />watch 1:<br /><br />name    | Value             |  Type<br />buf   |  0x0103 |   char*{data}@0x0acb ([R28]+1)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2353">goslawen</a> — 24 sie 2019, o 21:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[banita 17]]></name></author>
<updated>2019-08-24T21:07:42+01:00</updated>
<published>2019-08-24T21:07:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221600#p221600</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221600#p221600"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221600#p221600"><![CDATA[
Jesteś pewien, że na debuggerze podglądasz wartość zmiennej a nie adres w pamięci pod jakim zmienna się znajduje ? <br />Jak patrzysz na to:<br /><br />str_95 =0x00ac<br />str_97 =0x00ae<br /><br />to wcale nie wydaje mi się, żeby to był dobry wynik. Jak włączysz sobie tablicę ASCII to okaże się, że litera 'a' ma w decu wartość 97 a w hexie wartość 0x61 co nijak ma się do wartości 0x00ae. Upewnij się więc, że sprawdzasz faktycznie wartości zmiennych a nie adresy w pamięci pod jakimi te zmienne się znajdują<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=279">banita 17</a> — 24 sie 2019, o 21:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[goslawen]]></name></author>
<updated>2019-08-24T20:56:53+01:00</updated>
<published>2019-08-24T20:56:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221599#p221599</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221599#p221599"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221599#p221599"><![CDATA[
<div class="quotetitle">banita 17 napisał(a):</div><div class="quotecontent"><br />Jest możliwość, żebyś sprawdził co znajduje się w zmiennej buf ? za pomocą debuggera oczywiście.<br /></div><br /><br />W zmiennej buf aktualnie znajduje się:<br /><br />0x0103 // wysyłam b<br /><br />i teraz żeby było śmieszniej<br /><br />0x0103 // wysylam a<br /><br />teraz juz zdębiałem... <br /><br />str_95 =0x00ac<br />str_97 =0x00ae<br />// debugger wydaje się działać poprawnie...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2353">goslawen</a> — 24 sie 2019, o 20:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[banita 17]]></name></author>
<updated>2019-08-24T20:48:38+01:00</updated>
<published>2019-08-24T20:48:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221598#p221598</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221598#p221598"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221598#p221598"><![CDATA[
Optymalizacja zmieniła teraz tyle, że podczas debugowania nie ma problemów ze 'skaczącym' debuggerem ale nie mogła ona mieć wpływu na sposób wykonywania się programu. Nie mniej polecam debugować programy bez optymalizacji <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br />Jest możliwość, żebyś sprawdził co znajduje się w zmiennej buf ? za pomocą debuggera oczywiście. <br /><br />Bo szczerze mówiąc to wydaje się, że powinno to działać. Ewentualnie skompiluj sobie prosty/pusty program w w którym zrobisz coś takiego:<br /><br /><br />char str_97[] PROGMEM = &quot;a&quot;;<br />char buf[] = &quot;a&quot;<br /><br />if (!strncmp_P(buf, str_97, 1));<br />{<br />     // zrób coś np zapal diodę <br />}<br />else<br />{<br />     //zalap inną diodę<br />}<br /><br />Powinna się zapalić dioda z pierwszej klamerki jeżeli wszystko działa tak jak sobie wyobrażamy. Jeżeli nie zadziała zgodnie z oczekiwaniami no to wtedy trzeba będzie to dalej szlifować <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 4 minutach ]</span></strong><br /><br /><div class="quotetitle">goslawen napisał(a):</div><div class="quotecontent"><br />Faktycznie miałem włączoną optymalizację. <br />Dla sprawdzenia i upewnienia się:<br /><br />char znak[1]; // tablica 1 &quot;miejscowa&quot;<br />znak[0] = 'a' // &quot;miejsce&quot; zerowe w tablicy<br /><br />'a' -&gt; to po prostu a<br />&quot;a&quot; -&gt; to a + \0<br />string[] &quot;a&quot; - &gt; a+\0 <br /><br />Zgadza się?<br /></div><br /><br />Zgadza się. Aczkolwiek prawdę mówiąc to jak spojrzysz sobie na funkcję int strncmp_P(const char * s1,const char * s2, size_t n )  to ona sprawdza określoną liczbę znaków - określasz to parametrem size_t n. Wiec w tym przypadku nie ma wielkiego znaczenia czy porównujesz string do stringa czy string do tablicy ze znakami ale bez nulla na końcu. Ale gdybyś nie miał tutaj parametru size_t n to byłoby to niebezpieczne porównywać string do tablicy ze znakami/znakiem()bez nulla (w niektórych przypadkach mogłoby działać w innych by się wykrzaczyło z hukiem)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=279">banita 17</a> — 24 sie 2019, o 20:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[goslawen]]></name></author>
<updated>2019-08-24T20:30:50+01:00</updated>
<published>2019-08-24T20:30:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221597#p221597</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221597#p221597"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221597#p221597"><![CDATA[
Faktycznie miałem włączoną optymalizację. <br />Ustawia się ją w drzewku &quot;solution explorer&quot; -&gt; &quot;properties -&gt; toolchain -&gt; optimalizer -&gt; None (-O0).<br />Niestety niewiele to zmieniło.<br /><br />Po wprowadzeniu zmian w <br />const char str_95[] PROGMEM = &quot;_&quot;;<br />const char str_97[] PROGMEM = &quot;a'';<br />const char str_98[] PROGMEM = &quot;b&quot;;<br /><br />nadal debugger &quot;odwiedza&quot; każdy z IFów.<br />Zakładam, że teraz jest poprawnie po stronie odbiornika, więc może jakiś podobny problem jest z nadajnikiem?<br /><br />Przyznam szczerze, że do tej pory wydawało mi się, że rozumiem różnice pomiędzy większością zapisów dotyczących np. char[1] itp, ale gdy przyszło do praktyki zaczęło mi się strasznie wszystko mieszać.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 14 minutach ]</span></strong><br /><br />Dla sprawdzenia i upewnienia się:<br /><br />char znak[1]; // tablica 1 &quot;miejscowa&quot;<br />znak[0] = 'a' // &quot;miejsce&quot; zerowe w tablicy<br /><br />'a' -&gt; to po prostu a<br />&quot;a&quot; -&gt; to a + \0<br />string[] &quot;a&quot; - &gt; a+\0 <br /><br />Zgadza się?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2353">goslawen</a> — 24 sie 2019, o 20:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[banita 17]]></name></author>
<updated>2019-08-24T20:16:46+01:00</updated>
<published>2019-08-24T20:16:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221596#p221596</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221596#p221596"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221596#p221596"><![CDATA[
Bo funkcja strcmp_P() porównuje stringi tzn ciągi znaków. Brakuje jej znaku NULL na końcu. Spróbuj tak:<br /><br />const char str_95[] PROGMEM = &quot;_&quot;;<br />const char str_97[] PROGMEM = &quot;a'';<br />const char str_98[] PROGMEM = &quot;b&quot;;<br /><br /><br />Jeszcze jedna sprawa. Przy Twoich wcześniejszych próbach tzn: <br /><br />const char str_95 PROGMEM = '_';<br />const char str_97 PROGMEM = 'a';<br />const char str_98 PROGMEM = 'b';<br /><br />powinieneś użyć dodatkowo znaku '&amp;' przy wywołaniu funkcji strcmp_P() tzn: if (!strncmp_P(buf, &amp;str_97, 1)); z uwagi na to, że funkcja strcmp_P przyjmuje wskaźniki. tzn adres do komórki pamięci gdzie się znajduje ciąg znaków.<br /><br />w przypadku zmiennej 'buf' znaku '&amp;' nie trzeba używać bo jest to tablica a w języku C nazwa tablicy bez żadnych innych znaków jest adresem na jej pierwszy element. (buf oraz &amp;buf[0] jest tożsame)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=279">banita 17</a> — 24 sie 2019, o 20:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[goslawen]]></name></author>
<updated>2019-08-24T20:10:59+01:00</updated>
<published>2019-08-24T20:10:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221595#p221595</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221595#p221595"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221595#p221595"><![CDATA[
[syntax=c]char str_95 PROGMEM = '_';<br />    strncmp_P(buf, str_95, 1);[/syntax]<br /><br />W taki użyciu niestety zawsze mi wchodzi do każdego IFa.<br />Zadeklarowałem:<br />const char str_95 PROGMEM = '_';<br />const char str_97 PROGMEM = 'a';<br />const char str_98 PROGMEM = 'b';<br /><br />[syntax=c]if (!strncmp_P(buf, str_95, 1));<br />{<br />target=3*metr;<br />mknrf_flush_rx();<br />}<br /><br />if (!strncmp_P(buf, str_97, 1));<br />{<br />target=0*metr;<br />mknrf_flush_rx();<br />}<br /><br />if (!strncmp_P(buf, str_98, 1)); <br />{<br />target=3*metr;<br />mknrf_flush_rx();<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2353">goslawen</a> — 24 sie 2019, o 20:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[banita 17]]></name></author>
<updated>2019-08-24T20:03:07+01:00</updated>
<published>2019-08-24T20:03:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221594#p221594</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221594#p221594"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221594#p221594"><![CDATA[
Nie wiem jak jest w TrueStudio niemniej w konsoli podczas kompilacji powinieneś mieć jakieś logi (tylko się domyślam) i tam w opcjach kompilatora gdzieś powinien być zapis &quot;-O0&quot; jeżeli jest inny tzn. np -O1 to może być przyczyną 'dziwnie' zachowującego się debuggera. Przykładowy link z konsoli w którym widać wybraną optymalizację:<br /><br /><a href="https://obrazkiforum.atnel.pl/279/84d3e633d161e88a32465cfc3544bfdd.PNG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/279/84d3e633d161e88a32465cfc3544bfdd.PNG" alt="Obrazek" /></a><br /><br />a co do reszty problemów to tak jak mówił użytkownik 'moscow' powinieneś porównywać stringi co znaczy ciągi znaków. Zakładam, że wiesz czym różni się taki zapis:<br />char string[] = &quot;a&quot;;<br /><br />od takiego zapisu:<br />char znak[1];<br />znak[0] = 'a'<br /><br />W tym przypadku string przechowuje dwa znaki: znak litery 'a' oraz znak końca łańcucha znaków tzn NULL natomiast znak[0] przechowuje jedynie znak litery 'a'.<br /><br />Ponadto funkcja &quot;strcmp_P&quot; porównuje dwa ciągi znaków przy czym zakłada, że jeden z nich znajduje się w pamięci Flash (PROGMEM) myślę, że na to również powinieneś zwrócić uwagę<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=279">banita 17</a> — 24 sie 2019, o 20:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[goslawen]]></name></author>
<updated>2019-08-24T19:45:32+01:00</updated>
<published>2019-08-24T19:45:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221593#p221593</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221593#p221593"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221593#p221593"><![CDATA[
<div class="quotetitle">banita 17 napisał(a):</div><div class="quotecontent"><br />Cześć,<br /><br />odniosę się, przynajmniej na razie, do tego zdania:<br />&quot;W przypadku gdy wyślę np. 95 - program przeskakuje po ifach, jakby losowo (pewnie nie losowo, ale ja nie mogę zauważyć prawidłowości).&quot; <br /><br />Co to znaczy losowo ? Korzystasz z debuggera rozumiem ? Używasz tego na stmie ? nie masz przypadkiem włączonej optymalizacji przy kompilacji ?<br /></div><br /><br /><br />Cześć,<br />Dziękuję za odpowiedź.<br />Tak, używam debuggera ( Atmel-ICE). To niejako samoczynnie odpowiada na kolejne pytanie - używam tego w AVR- konkretniej ATmega 32u4.<br />Pracuję w AVR studio. Nie wiem czy mam włączoną optymalizację - faktycznie sprawdzę i przetestuję.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br /><div class="quotetitle">moscow napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">goslawen napisał(a):</div><div class="quotecontent">[...]<br />Problemem jest natomiast (tak mi się wydaje) nie zrozumienie przeze mnie funkcji parse_nrf_data.<br />Nie za bardzo wiem jak dużo mogę kodu zawierającego tą bibliotekę udostępniać, dlatego dam tylko wycinki.<br /><br />W miejscu przykładu wstawiłem: (odbiornik)<br /><br />[syntax=c]void parse_nrf_data ( char * buf, uint8_t len )<br /> {<br />if (!strcmp_P( buf , 95))<br />{<br />target=3*metr;<br />mknrf_flush_rx();<br />}<br /><br />if (!strcmp_P( buf , 96))<br />{<br />target=0*metr;<br />mknrf_flush_rx();<br />}<br /><br />if (!strcmp_P( buf , 97)) <br />{<br />target=3*metr;<br />mknrf_flush_rx();<br />}<br /><br />if (!strcmp_P( buf , 98)) <br />{<br />target=5*metr;<br />mknrf_flush_rx();<br />}<br /><br />}[/syntax]<br />[...]<br />W/g dokoumentacji &quot;The strcmp_P() function is similar to strcmp() except that s2 is pointer to a string in program space.&quot;<br /><br />Jeśli dobrze rozumiem - następujący zapis<br />[syntax=c]!strcmp_P( buf , 98)[/syntax]<br />prawdopodobnie porównuje bufor 'buf' z przypadkową zawartością pamięci programu<br /><br />Czy liczba 98 nie powinna być przypadkiem w &quot;ciapkach&quot;? (tzn. w cudzysłowach).<br />Najlepiej chyba jakby te stringi były zdeklarowane gdzieś jako progmem.<br /><br />czyli coś w tym stylu<br /><br />[syntax=c]char str_95&#91;&#93; PROGMEM = &quot;95&quot;;[/syntax]<br />a w ifach<br />[syntax=c]!strcmp_P( buf , str_95)[/syntax]<br /><br />i tak dalej. Na początek można też spróbować ze zwykłym strcmp np.<br />[syntax=c]!strcmp( buf , &quot;95&quot;)[/syntax]<br />co do kodu nadajnika - to niestety nie mam doświadczenia <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br /></div><br /><br />PS. Jeśli faktycznie porównanie miałoby być z pojedynczym znakiem o kodzie 95, to wtedy dla tego kodu string nie powinien być &quot;95&quot; tylko odpowiedni znak ASCII, ale zokończony terminującym zerem, czyli w &quot;ciapkach&quot; <br />[syntax=c]char str_95&#91;&#93; PROGMEM = &quot;_&quot;;[/syntax]<br /><br />lub trzeba by użyć funkcji strncmp_P z podaną długością 1<br />[syntax=c]char str_95 PROGMEM = '_';<br />strncmp_P(buf, str_95, 1);[/syntax]</div><br /><br /><br />Dziękuję za obszerną poradę, chwilę mi zajmie jej przeanalizowanie. Wrócę mam nadzieję z rozwiązaniem problemu lub co mniej optymistyczne z prośbą o kolejne rady.<br />Postaram się odpowiedzieć jeszcze dzisiaj.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2353">goslawen</a> — 24 sie 2019, o 19:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow]]></name></author>
<updated>2019-08-24T18:50:16+01:00</updated>
<published>2019-08-24T18:50:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221591#p221591</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221591#p221591"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221591#p221591"><![CDATA[
<div class="quotetitle">goslawen napisał(a):</div><div class="quotecontent"><br />[...]<br />Problemem jest natomiast (tak mi się wydaje) nie zrozumienie przeze mnie funkcji parse_nrf_data.<br />Nie za bardzo wiem jak dużo mogę kodu zawierającego tą bibliotekę udostępniać, dlatego dam tylko wycinki.<br /><br />W miejscu przykładu wstawiłem: (odbiornik)<br /><br />[syntax=c]void parse_nrf_data ( char * buf, uint8_t len )<br /> {<br />if (!strcmp_P( buf , 95))<br />{<br />target=3*metr;<br />mknrf_flush_rx();<br />}<br /><br />if (!strcmp_P( buf , 96))<br />{<br />target=0*metr;<br />mknrf_flush_rx();<br />}<br /><br />if (!strcmp_P( buf , 97)) <br />{<br />target=3*metr;<br />mknrf_flush_rx();<br />}<br /><br />if (!strcmp_P( buf , 98)) <br />{<br />target=5*metr;<br />mknrf_flush_rx();<br />}<br /><br />}[/syntax]<br />[...]<br />W/g dokoumentacji &quot;The strcmp_P() function is similar to strcmp() except that s2 is pointer to a string in program space.&quot;<br /><br />Jeśli dobrze rozumiem - następujący zapis<br />[syntax=c]!strcmp_P( buf , 98)[/syntax]<br />prawdopodobnie porównuje bufor 'buf' z przypadkową zawartością pamięci programu<br /><br />Czy liczba 98 nie powinna być przypadkiem w &quot;ciapkach&quot;? (tzn. w cudzysłowach).<br />Najlepiej chyba jakby te stringi były zdeklarowane gdzieś jako progmem.<br /><br />czyli coś w tym stylu<br /><br />[syntax=c]char str_95&#91;&#93; PROGMEM = &quot;95&quot;;[/syntax]<br />a w ifach<br />[syntax=c]!strcmp_P( buf , str_95)[/syntax]<br /><br />i tak dalej. Na początek można też spróbować ze zwykłym strcmp np.<br />[syntax=c]!strcmp( buf , &quot;95&quot;)[/syntax]<br />co do kodu nadajnika - to niestety nie mam doświadczenia :-)<br /></div><br /><br />PS. Jeśli faktycznie porównanie miałoby być z pojedynczym znakiem o kodzie 95, to wtedy dla tego kodu string nie powinien być &quot;95&quot; tylko odpowiedni znak ASCII, ale zokończony terminującym zerem, czyli w &quot;ciapkach&quot; <br />[syntax=c]char str_95&#91;&#93; PROGMEM = &quot;_&quot;;[/syntax]<br /><br />lub trzeba by użyć funkcji strncmp_P z podaną długością 1<br />[syntax=c]char str_95 PROGMEM = '_';<br />strncmp_P(buf, str_95, 1);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20760">moscow</a> — 24 sie 2019, o 18:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[banita 17]]></name></author>
<updated>2019-08-24T18:21:15+01:00</updated>
<published>2019-08-24T18:21:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221590#p221590</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221590#p221590"/>
<title type="html"><![CDATA[Re: NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221590#p221590"><![CDATA[
Cześć,<br /><br />odniosę się, przynajmniej na razie, do tego zdania:<br />&quot;W przypadku gdy wyślę np. 95 - program przeskakuje po ifach, jakby losowo (pewnie nie losowo, ale ja nie mogę zauważyć prawidłowości).&quot; <br /><br />Co to znaczy losowo ? Korzystasz z debuggera rozumiem ? Używasz tego na stmie ? nie masz przypadkiem włączonej optymalizacji przy kompilacji ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=279">banita 17</a> — 24 sie 2019, o 18:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[goslawen]]></name></author>
<updated>2019-08-24T17:55:39+01:00</updated>
<published>2019-08-24T17:55:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221588#p221588</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221588#p221588"/>
<title type="html"><![CDATA[NRF24l01 - biblioteka MKNRF - sprawdzanie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22510&amp;p=221588#p221588"><![CDATA[
Cześć,<br /><br />Pewnie znowu się zbłaźnię głupim pytaniem - ale czasami utykam w martwym punkcie, a pomoc od Was pomaga mi ruszyć dalej.<br /><br />Problem jest następujący. Używam NRF24L01 oraz bibliotek NRF24L01 oraz SPI.<br />Udało mi się po wielu próbach uruchomić komunikację.<br /><br />Problemem jest natomiast (tak mi się wydaje) nie zrozumienie przeze mnie funkcji parse_nrf_data.<br />Nie za bardzo wiem jak dużo mogę kodu zawierającego tą bibliotekę udostępniać, dlatego dam tylko wycinki.<br /><br />W miejscu przykładu wstawiłem: (odbiornik)<br /><br />[syntax=c]void parse_nrf_data ( char * buf, uint8_t len )<br /> {<br />if (!strcmp_P( buf , 95))<br />{<br />target=3*metr;<br />mknrf_flush_rx();<br />}<br /><br />if (!strcmp_P( buf , 96))<br />{<br />target=0*metr;<br />mknrf_flush_rx();<br />}<br /><br />if (!strcmp_P( buf , 97)) <br />{<br />target=3*metr;<br />mknrf_flush_rx();<br />}<br /><br />if (!strcmp_P( buf , 98)) <br />{<br />target=5*metr;<br />mknrf_flush_rx();<br />}<br /><br />}[/syntax]<br /><br />i co zabawne - działa tylko np. 97 (a), lub 98 (b).<br />target przyjmuje poprawną wartość zgodnie z konkretnym ifem.<br /><br />W przypadku gdy wyślę np. 95 - program przeskakuje po ifach, jakby losowo (pewnie nie losowo, ale ja nie mogę zauważyć prawidłowości).<br /><br />kod nadajnika: <br />[syntax=c]mknrf_puts_P(rData);<br />USART_Transmit(rData);<br />USART_Transmit('\r');<br />USART_Transmit('\n');<br />mknrf_flush_tx();[/syntax]<br /><br />I tu znowu dziwna rzecz:<br />Pobieram dane z UART - wpisuje je do rData i wysyłam przez NRF.<br />Jak wysyłam a(97), b(98) wszystko jest ok.<br />Gdy wyślę c(99) - układ się zawiesza (przestaje nadawać, pisać na UART) - muszę zresetować zasilanie. Wszystko potem wraca do normy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2353">goslawen</a> — 24 sie 2019, o 17:55</p><hr />
]]></content>
</entry>
</feed>