Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 12 maja 2024, o 16:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 25 sie 2015, o 12:47 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 18 gru 2014
Posty: 16
Lokalizacja: Szczecin
Pomógł: 0

Witajcie.

Pytanie: czy można za pomocą strlen() sprawdzić długość tablicy zapisanej w EEPROM ?

Próbowałem tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


dokładnie chodzi mi o użycie tego w pętli. Może są inne lepsze sposoby ?

i jeszcze jedno mam funkcję wyświetlającą na tablicy tekst, jej nagłówek to:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

czy przekazanie teraz tablicy char z pamięci EEPROM powinno wyglądać tak ?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sie 2015, o 13:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Nie, nie można.
Strlen operuje na RAM.
Strlen_P, Strlen_FP na FLASH.
A Strlen_E czeka na napisanie przez Ciebie :)

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.

ledt( eeprom_read_byte(&text) );
To może działać, o ile naprawdę wiesz co robisz, a na to się nie zanosi...

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sie 2015, o 15:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

W sumie gdyby przeciążył funkcję "strlen" 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.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Odnośnie przekazywania parametru do funkcji:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sie 2015, o 20:05 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 18 gru 2014
Posty: 16
Lokalizacja: Szczecin
Pomógł: 0

Nie mogę dać z tym rady :( 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

wygląda to tak jak by w strlen_E(text); cały program się zatrzymywał :/

main.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


może rozwiązaniem było by aby zmienna str która przechowuje długość była przesyłana do funkcji ledt(text, str)
i wtedy zamiast n=strlen_E; to n=str; ?
tylko jak to zapisać ? bo musi być zarazem w eeprom i widoczna w innych funkcjach czyli extern volatile

a czegoś takiego kompilator nie przyjmuje

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


pewnie śmiejecie się co tu wymyślam :D ale jestem początkującym i naprawdę już nie wiem jak to zrobić z tą pamięcią EEPROM



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sie 2015, o 21:10 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

Kolego Qba21, 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.

Pozdrawiam, QuadMan.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO