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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-08-26T21:10:02+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=12748&amp;mode</id>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2015-08-26T21:10:02+01:00</updated>
<published>2015-08-26T21:10:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138405#p138405</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138405#p138405"/>
<title type="html"><![CDATA[Re: Ja sprawdzić długość przez strlen() w pamięci EEPROM ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138405#p138405"><![CDATA[
Witam,<br /><br />Kolego <strong>Qba21</strong>, Twój problem polega najprawdopodobniej na tym, że kopiujesz znaki z terminala do EEPROMA znak po znaku, a skopiowanego stringa nie kończysz znakiem /0, przynajmniej ja niczego nie widzę ( czysty EEPROM na 0xFF w komórkach ). To tłumaczy niepoprawne działanie funkcji strlen_E(text). Swoją drogą, nie bardzo rozumiem, po co w ogóle tak kombinować: Odczytywać bajt po bajcie stringa z pamięci EEPROM po to , by wyznaczyć jego długość, a później kopiować te same dane za pomocą read_block(...). Nie prościej kopiować dane od razu bajt po bajcie, aż do napotkania znaku /0 ? Przecież i tak deklarujesz stosunkowo niewielki rozmiar tego stringa w EEPROM-ie, więc zadeklarowanie tablicy w RAM-ie o takim samym rozmiarze nie powinno być problemem nawet na małych prockach.<br /><br />Pozdrawiam, QuadMan.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 26 sie 2015, o 21:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Qba21]]></name></author>
<updated>2015-08-25T20:05:03+01:00</updated>
<published>2015-08-25T20:05:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138318#p138318</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138318#p138318"/>
<title type="html"><![CDATA[Re: Ja sprawdzić długość przez strlen() w pamięci EEPROM ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138318#p138318"><![CDATA[
Nie mogę dać z tym rady  <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />  robiłem jak pisaliście już myślałem że działa ale okazało się że cały czas wgrywałem stary program gdzie działało bo nie było w pamięci EEPROM<br /><br />wygląda to tak jak by w strlen_E(text); cały program  się zatrzymywał :/<br /><br />main.c<br />[syntax=c]uint8_t licznik;<br />char c;<br />char EEMEM text&#91;225&#93; ;<br /><br />while(1)<br />{<br /><br />// ledt(&quot;TEST    &quot;);<br /><br />    size_t size = strlen_E(text);<br />    char *textRAM = (char*) malloc(sizeof(char) * (size + 1));<br />    eeprom_read_block(textRAM , text, size + 1);<br />    ledt(textRAM);<br />    free(textRAM);<br /><br /><br />//ledt( text );<br /><br />if(flag)<br />{<br />c = uart_getc();<br />if( c=='1') show_text();<br /><br /><br />}<br />}<br />void show_text( void ) <br />{<br />        int c=0;<br /><br />uint8_t ind=0;<br /><br />flag=0;<br /><br />while(1){<br /><br />if(flag) // flaga ++ gdy zostanie wciśnięty jakikolwiek przycisku w terminalu<br /><br />                        {<br />flag--;<br />                       c=uart_getc();<br /><br />                        if(c==0x0d)<br />                        {<br /><br />                        str=ind;<br />                        uart_puts(&quot;\r\n\n&quot;);<br /><br />                        uart_puts(&quot;Wprowadzony tekst: \r\n&quot;);<br /><br />                        for(ind=1;ind&lt;str;ind++) {uart_putc(eeprom_read_byte(&amp;text&#91;ind&#93;));}<br />                        uart_puts(&quot;\r\n&quot;);<br /><br />                        uart_puts(&quot;Długosc textu to :&quot;);<br />                        uart_putint(str, 10);<br /><br />                        ind=1;<br /><br />                        }<br />                        else{<br /><br /><br />                        eeprom_write_byte(&amp;text&#91;ind&#93;,c);<br />                        ind++;<br />                        uart_putc(c);<br /><br />                        }<br /><br />                        } // koniec flagi<br /><br /><br />if( c=='q') {<br />rysuj_menu();<br />break;<br />}<br />}<br />}<br /><br />void ledt(char text&#91;&#93;)<br />{<br />int i,n;<br />//n= strlen_E(text);<br />for(i=0;i&lt;(n);i++)<br />{<br />//if(flag) break;<br /><br />switch(text&#91;i&#93;)<br />{<br /><br />case 'A':<br />znak(0, 28, 34, 34, 34, 62, 34, 34, 34, 0);<br />break;<br /><br />case 'B':<br />znak(0, 60, 34, 34, 60, 34, 34, 34, 60, 0);<br />break;<br />...<br />i tak dalej <br />...<br /><br />size_t strlen_E(const char * text) {<br />    const char *s;<br />    for(s = text; eeprom_read_byte(s); ++s);<br />    return (s - text);<br />}[/syntax]<br /><br />może rozwiązaniem było by aby zmienna str która przechowuje długość była przesyłana do funkcji ledt(text, str)<br />i wtedy zamiast n=strlen_E; to n=str; ? <br />tylko jak to zapisać ? bo musi być zarazem w eeprom i widoczna w innych funkcjach czyli extern volatile<br /><br />a czegoś takiego kompilator nie przyjmuje <br /><br />[syntax=c]extern volatile char EEMEM str;[/syntax]<br /><br />pewnie śmiejecie się co tu wymyślam <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> ale jestem początkującym i naprawdę już nie wiem jak to zrobić z tą pamięcią EEPROM<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7315">Qba21</a> — 25 sie 2015, o 20:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2015-08-25T15:12:09+01:00</updated>
<published>2015-08-25T15:12:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138311#p138311</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138311#p138311"/>
<title type="html"><![CDATA[Re: Ja sprawdzić długość przez strlen() w pamięci EEPROM ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138311#p138311"><![CDATA[
W sumie gdyby przeciążył funkcję &quot;strlen&quot; to można by było sprawdzić długość tablicy zapisanej w EEPROM, ale aby uniknąć konfliktów lepiej stworzyć odrębną funkcję jak proponuje Kolega barney.<br /><br />[syntax=c]uint16_t strlen_E(uint8_t *text)<br />{<br />uint16_t i = 0;<br />while (eeprom_read_byte(text++))<br />i++;<br />return i;<br />}<br /><br />strlen_E(text);[/syntax]<br />Odnośnie przekazywania parametru do funkcji:<br /><br />[syntax=c]size_t size = strlen_E(text);<br />char *textRAM = (char*)malloc(size);<br />eeprom_read_block(textRAM , text, size);<br />ledt(textRAM);<br />free(textRAM);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 25 sie 2015, o 15:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[barney]]></name></author>
<updated>2015-08-25T13:13:52+01:00</updated>
<published>2015-08-25T13:13:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138299#p138299</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138299#p138299"/>
<title type="html"><![CDATA[Re: Ja sprawdzić długość przez strlen() w pamięci EEPROM ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138299#p138299"><![CDATA[
Nie, nie można.<br />Strlen operuje na RAM.<br />Strlen_P, Strlen_FP na FLASH.<br />A Strlen_E czeka na napisanie przez Ciebie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Pokaż minimalny, kompletny kod, bo tak to można zgadywać. Ten for to jakiś kosmiczny jest, skoro działa to znaczy, że jest w całości wyliczany przez kompilator.<br /><br />ledt( eeprom_read_byte(&amp;text) );<br />To może działać, o ile naprawdę wiesz co robisz, a na to się nie zanosi...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=973">barney</a> — 25 sie 2015, o 13:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Qba21]]></name></author>
<updated>2015-08-25T12:47:47+01:00</updated>
<published>2015-08-25T12:47:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138297#p138297</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138297#p138297"/>
<title type="html"><![CDATA[Ja sprawdzić długość przez strlen() w pamięci EEPROM ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12748&amp;p=138297#p138297"><![CDATA[
Witajcie.<br /><br /><span style="font-size: 150%; line-height: normal">Pytanie: czy można za pomocą strlen() sprawdzić długość tablicy zapisanej w <span style="color: #FF0000">EEPROM</span> ?</span><br /><br />Próbowałem tak:<br />[syntax=c]for(ind=1;ind&lt;(strlen(eeprom_read_byte(&amp;text)));ind++) uart_putc(eeprom_read_byte(&amp;text&#91;ind&#93;));[/syntax]<br /><br />dokładnie chodzi mi o użycie tego w pętli. <span style="color: #00BF40">Może są inne lepsze sposoby ?</span><br /><br /><span style="color: #400000">i jeszcze jedno mam funkcję wyświetlającą na tablicy tekst, jej nagłówek to:</span><br /><br />[syntax=c]void ledt(char text&#91;&#93;);[/syntax]<br />czy przekazanie teraz tablicy char z  pamięci EEPROM powinno wyglądać tak ?<br /><br />[syntax=c]ledt( eeprom_read_byte(&amp;text) );[/syntax]<br /><br /><br /><span style="font-size: 85%; line-height: normal"><span style="color: #0000FF">Gdyby ktoś był ciekawy to robię wyświetlacz led w którym przez RS232 można edytować napis dlatego w programie mam tablicę typu char i muszę ją umieścić w  EEPROM  żeby po wyłączeniu zasilania dalej był widoczny teks</span> </span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7315">Qba21</a> — 25 sie 2015, o 12:47</p><hr />
]]></content>
</entry>
</feed>