logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

attiny2313 – poprawne użycie eeprom_write_block i eeprom_read_block, błąd kompilacji

20rafalo 30 Cze 2012 18:47 5703 51
Najlepsze odpowiedzi

Jak poprawnie zapisywać i odczytywać pojedynczą zmienną int w EEPROM ATtiny2313, żeby uniknąć błędu kompilacji?

Dla pojedynczej zmiennej `int` w ATtiny2313 użyj `eeprom_write_word()` i `eeprom_read_word()`, a nie wersji blokowych. Zapis powinien wyglądać tak: `eeprom_write_word(&i_ee, i);` [#11067815], a odczyt tak: `i = eeprom_read_word(&i_ee);` [#11062207] Błąd `too many arguments` wynikał z tego, że do `eeprom_read_word()` podawano dodatkowy argument `sizeof(...)`, którego ta funkcja nie przyjmuje [#11063292] Jeśli chcesz używać funkcji blokowych, to dla pojedynczej zmiennej też jest to możliwe, ale wtedy przekazuje się źródło, adres EEPROM i rozmiar; w tym wątku jednak najprościej i najczytelniej było przejść na wersję `word` [#11062249]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA
  • #1 11058369
    20rafalo
    Poziom 19  
    Posty: 506
    Ocena: 6
    Witam
    Przeglądałem forum, jednak zastosowane propozycje nie dały rezultatów.. ;/
    mam problem z zapisem i odczytem z pamięci eeprom.
    Jak mają wyglądać te instrukcje poprawnie??
    Robię tak(fragment kodu dot eeprom):
    
    int i=1;
    static EEMEM int i_ee;
    
    eeprom_write_block(&i, &i_ee, sizeof(i));
    eeprom_read_block(&i, &i_ee,sizeof(i));
    

    Robiłem wiele innych opcji ale ciągle wyskakuje błąd kompilatora... ;/
    
    make all 
    Building file: ../main.c
    Invoking: AVR Compiler
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=attiny2313 -DF_CPU=1000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o"main.o" "../main.c"
    Finished building: ../main.c
     
    Building file: ../in avrstudio/ava.c
    Invoking: AVR Compiler
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=attiny2313 -DF_CPU=1000000UL -MMD -MP -MF"in avrstudio/ava.d" -MT"in\ avrstudio/ava.d" -c -o"in avrstudio/ava.o" "../in avrstudio/ava.c"
    ../in avrstudio/ava.c:7:1: warning: "F_CPU" redefined
    <command-line>: warning: this is the location of the previous definition
    ../in avrstudio/ava.c: In function 'zapisz':
    ../in avrstudio/ava.c:77: warning: passing argument 1 of '__eewr_byte_tn2313' from incompatible pointer type
    ../in avrstudio/ava.c: In function 'odczytaj':
    ../in avrstudio/ava.c:82: warning: passing argument 1 of '__eerd_byte_tn2313' from incompatible pointer type
    ../in avrstudio/ava.c:82: error: too many arguments to function '__eerd_byte_tn2313'
    ../in avrstudio/ava.c:82: warning: statement with no effect
    make: *** [in avrstudio/ava.o] Error 1
    

    Co jest źle i jak poprawić?
    pzdr
  • REKLAMA
  • #2 11058482
    drzasiek
    Specjalista CNC
    Posty: 2212
    Pomógł: 106
    Ocena: 3233
    Przecież kompilator pisze co mu dolega.. Nie czytałeś tego co wypluł tylko tu wrzuciłeś od razu?
  • #3 11058728
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    Takich "podpowiedzi" ostatnio pełno na forum więc postaram ci się pomóc.

    Po pierwsze - popełniasz błąd bo definiujesz gdzieś w programie

    #define F_CPU

    a już jest ono w makefile wstawione pewnie przez środowisko więc niepotrzebnie to robisz albo sam zdefiniowałeś to kilka razy

    poza tym nie pokazałeś całego kodu a błędy które ujawniłeś wcale nie dotyczą tylko tego małego fragmentu, który przedstawiłeś

    Wklej więc większą część kodu albo całość to uda się coś bardziej precyzyjnie podpowiedzieć - gdzie robisz błędy.
  • #4 11059417
    alagner
    Poziom 26  
    Posty: 768
    Pomógł: 85
    Ocena: 29
    Spróbuj zrzutować wskaźniki na void.
  • #5 11059443
    20rafalo
    Poziom 19  
    Posty: 506
    Ocena: 6
    mirekk36 napisał:
    Po pierwsze - popełniasz błąd bo definiujesz gdzieś w programie

    #define F_CPU

    a już jest ono w makefile wstawione pewnie przez środowisko więc niepotrzebnie to robisz albo sam zdefiniowałeś to kilka razy

    w eclipse nie trzeba dawać tej linijki i dlatego. Ale w AVRStudio trzeba. Kod wklejony z eclipse.
    To ostrzeżenie nie robi problemu.
    To mnie zastanawia: "error: too many arguments to function '__eerd_byte_tn2313' "
    Jutro wkleję kod. Dodam, że bez linijek związanych z eeprom (wklejone poprzednio) program działa.
    Ale potrzebuje dostępu do eeprom ;/
  • #6 11059492
    drzasiek
    Specjalista CNC
    Posty: 2212
    Pomógł: 106
    Ocena: 3233
    20rafalo napisał:
    Ale w AVRStudio trzeba.

    Kto powiedział, że trzeba?
    Można ,ale nie jest zalecane i na pewno nie trzeba.
    Jakie AVR Studio używasz?
  • REKLAMA
  • #7 11059650
    gaskoin
    Poziom 38  
    Posty: 4159
    Pomógł: 436
    Ocena: 102
    A co ma IDE do preprocesora ?

    Zarówno W AVRS jak i w Eclipsem jak i w notatniku można dodać parametr -D do wywołania kompilatora a można też dać sobie #define.

    Zaleca się jednak dodać stałą globalną -DF_CPU=8923642945UL
  • REKLAMA
  • #8 11060510
    20rafalo
    Poziom 19  
    Posty: 506
    Ocena: 6
    drzasiek napisał:
    20rafalo napisał:
    Ale w AVRStudio trzeba.

    Kto powiedział, że trzeba?
    Można ,ale nie jest zalecane i na pewno nie trzeba.
    Jakie AVR Studio używasz?

    Panowie nie rozdzielajmy włosa na czworo...
    Może takie przejęzyczenie- można, trzeba, powinno się.. - pomińmy to.
    Problemem jest zapisanie do eeprom...
    zaraz dam kod...
  • #9 11060541
    drzasiek
    Specjalista CNC
    Posty: 2212
    Pomógł: 106
    Ocena: 3233
    20rafalo -> nie chodzi o przejęzyczenie. Po prostu napisałeś że w Eclipse nie trzeba a w AVR Studio trzeba. A to jest tak, że ani w jednym ani w drugim nie trzeba a nawet nie powinno się. To było tylko sprostowanie. Czekamy na kod.
  • #10 11060593
    20rafalo
    Poziom 19  
    Posty: 506
    Ocena: 6
    dondu coś o tym wiem ;P -kiedyś też tylko definiowałem, a tak naprawdę fusebity to ustawiają.
    Jest to trochę mylące (ustawianie za pomocą #define), ale jak na razie nie skupiam się nad częstotliwością pracy..
    Panowie często mnie się zdarzało tak: program nie działa choć powinien, po resecie+ nowy projekt oraz skopiowaniu kodu działa- i tym razem tak jest.
    Uszczupliłem kod do minimum, tak, aby zająć się tylko problemem zapisu i odczytu z pamięci eeprom
    Kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Panowie chciałem aby zmienna "i" została zapisywana do pamięci i potem z niej odczytywana.
    Problem- odcinanie zasilania uC - które jest założeniem w projekcie.
    Po załączeniu zasilania- zliczanie powinno zacząć się od poprzedniej wartości.
    if (we_on) - załącza się po ponownym dostaniu napięcia przez uC.

    (Dalej mam warunki wykrycia stanu "0" , tak aby pętla nie zliczała non stop - nie zamieszczałem.)

    Ilość cykli nie będzie duża- maks 50tyś przez cały okres przydatności układu. Także te kwestie pomińmy ;P
    PS fajnie jak by podtrzymać zasilanie na uC przez chwile - do wykonania się pętli wykrywającej "0" - jakie kondensatory polecacie?
    Z góry dzięki ;)
  • REKLAMA
  • #11 11060631
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    20rafalo napisał:
    dondu coś o tym wiem ;P -kiedyś też tylko definiowałem, a tak naprawdę fusebity to ustawiają.
    Jes to trochę mylące (ustawianie za pomocą #define), ...

    Nie obraź się, ale fusebity to jedno, a F_CPU to drugie :)
    Z tej wypowiedzi wynika, że nie znasz różnicy, a to bardzo istotne tym bardziej, że używasz delay().

    Wklejając kod wyskoczyło Ci czerwone ostrzeżenie - czemu do niego się nie zastosowałeś?
    Później w trakcie wysyłania posta wyskoczył pop-up - także zignorowałeś.
  • #12 11062207
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Ponieważ ani I ani i_ee nie są tablicami, tylko zmiennymi 16-bit, powinieneś użyć eeprom_read_word/eeprom_write_word
  • #13 11062249
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    LordBlick napisał:
    pinieważ ani I ani i_ee nie są tablicami, tylko zmiennymi 16-bit, powinieneś użyć eeprom_read_word/eeprom_write_word

    Tak byłoby logiczniej ale nie oznacza to chyba, że zapis typu:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    jest błędny w tym przypadku i nie zadziała. Bo zadziała i odniesie taki sam skutek. Zapis bloku wcale przecież nie musi się odnosić do tablic a z drugiej strony to nawet zmienna typu uint8_t jest tablicą jakby nie patrzeć, tyle że jednoelementową biorąc pod uwagę że przekażemy jej adres z operatorem &.
  • #14 11062423
    20rafalo
    Poziom 19  
    Posty: 506
    Ocena: 6
    dondu napisał:
    Z tej wypowiedzi wynika, że nie znasz różnicy, a to bardzo istotne tym bardziej, że używasz delay()

    Za ich pomocą można ustawiać bez problemu - zresztą niech inni Ci powiedzą...
    I z tym jak na razie nie mam problemu. Kiedyś jak ustawiałem programowo to były..
    Sprawdź sobie w AVRStudio...

    dondu napisał:
    Wklejając kod wyskoczyło Ci czerwone ostrzeżenie - czemu do niego się nie zastosowałeś?

    Później w trakcie wysyłania posta wyskoczył pop-up - także zignorowałeś.

    teraz to już cie nie rozumiem. Jak to zignorowałem??
    Kod był napisany poprawnie składniowo i błąd wyświetlony przez kompilator był fałszywy.
    Wystarczyło uruchomić od nowa całe środowisko i się kompiluje bez problemu. Wrzuć sobie i skompiluj jak nie wierzysz... zresztą...
    Pisałem o tym wcześniej!
    mirekk36 czyli jest ok... W takim razie teraz zapisze i odczyta zmienną "i" w takich warunkach jak pisałem poprzednio?
  • #15 11062442
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    Tak, ale rzeczywiście jeśli zapisujesz/odczytujesz tylko jedną zmienną dwubajtową to pomyśl o tych funkcjach o których wspomniał LordBlick: eeprom_read_word/eeprom_write_word
  • #16 11062451
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    Po pierwsze nie denerwuj się, gdyż prosiłem na wstępie, byś się czasem nie obraził, co dodatkowo wytłuściłem.
    Dodam, że nie chcę Ci wytykać czegokolwiek, tylko pomóc.

    20rafalo napisał:
    dondu napisał:
    Z tej wypowiedzi wynika, że nie znasz różnicy, a to bardzo istotne tym bardziej, że używasz delay()

    Za ich pomocą można ustawiać bez problemu - zresztą niech inni Ci powiedzą...
    I z tym jak na razie nie mam problemu. Kiedyś jak ustawiałem programowo to były..

    Po drugie z Twoich wypowiedzi nie wynika, że rozumiesz różnicę między ustawianiem zegara fusebitami, a za pomocą F_CPU. I tylko na to zwracam Ci uwagę, byś w tym zakresie wiedzę poszerzył, bo nie ja będę czas tracił, tylko Ty :)


    20rafalo napisał:
    dondu napisał:
    Wklejając kod wyskoczyło Ci czerwone ostrzeżenie - czemu do niego się nie zastosowałeś?
    Później w trakcie wysyłania posta wyskoczył pop-up - także zignorowałeś.

    teraz to już cie nie rozumiem. Jak to zignorowałem?? ....

    Przepraszam, nie napisałem dokładnie ale nie ma to już znaczenia.
  • #17 11063129
    snnaap
    Poziom 25  
    Posty: 677
    Pomógł: 83
    Ocena: 10
    Mam takie pytanie wynikające z mojej ciekawości świata, czy osoby które wypowiadają się łamach tego wątku zawsze korzystając z biblioteki eeprom.h przy dostępie do pamięci eeprom uK / czy może kiedyś nie skorzystał z biblioteki i wykonały tę operację odwołując się bezpośrednio do EEDR, EECR i EEAR?
  • #19 11063235
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    snnaap napisał:
    czy osoby które wypowiadają się łamach tego wątku zawsze korzystając z biblioteki eeprom.h przy dostępie do pamięci eeprom uK / czy może kiedyś nie skorzystał z biblioteki i wykonały tę operację odwołując się bezpośrednio do EEDR, EECR i EEAR
    Jeśli o mnie chodzi, operuję na rejestrach w asm, ale znajomość bibliotek avr-libc niczemu nie wadzi.
    http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html
  • #20 11063265
    20rafalo
    Poziom 19  
    Posty: 506
    Ocena: 6
    dondu napisał:
    Dodam, że nie chcę Ci wytykać czegokolwiek, tylko pomóc.

    To dobrze ;)
    Panowie prosił bym, aby nie odbiegać od tematu, tylko zająć się eeprom -zapis i odczyt.
    Gdyż na tak małym fragmencie kodu schodzi mi już drugi dzien na forum ;/
    Z góry dzięki.
    Zadziała to co wcześniej napisałem??
    pzdr

    Dodano po 3 [minuty]:

    mirekk36 napisał:
    pomyśl o tych funkcjach o których wspomniał LordBlick: eeprom_read_word/eeprom_write_word

    Niestety- zmieniając na "word" - wyświetla się błąd kompilacji.
    error: too many arguments to function '__eerd_word_tn2313'
  • #21 11063292
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    20rafalo napisał:
    Niestety- zmieniając na "word" - wyświetla się błąd kompilacji.
    Nawet nie zajrzałeś do opisu biblioteki. "Too many arguments" - za wiele argumentów(Google Translate też pomaga... ;) ). Wywal size.
    Link do opisu biblioteki podałem wcześniej.
  • #22 11063351
    20rafalo
    Poziom 19  
    Posty: 506
    Ocena: 6
    LordBlick napisał:
    "Too many arguments"

    angielski na tyle znam, że nie potrzebowałem translatora na to wyrażenie, jednak fakt, nie znam opisu tej biblioteki ;/
    Jeszcze jedno - jak zostawiłem "block" program się kompiluje i niby jest ok. W symulatorze
    eeprom_write_block(&i, &i_ee, sizeof(i));
    ta linia zapisuje do pamięci, jednak jak program wróci do początku i chce odczytać
    eeprom_read_block(&i, &i_ee,sizeof(i));
    to odczytuje wartość inną, początkową "i=1", a nie np 2 w drugim obiegu itd ;/

    Dodano po 18 [minuty]:

    o i są błędy...

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Cytat:
    **** Build of configuration Release for project testowy ****

    make all
    Building file: ../main.c
    Invoking: AVR Compiler
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=attiny2313 -DF_CPU=1000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o"main.o" "../main.c"
    ../main.c: In function 'main':
    ../main.c:32: warning: pointer targets in passing argument 1 of '__eerd_word_tn2313' differ in signedness
    ../main.c:32: error: too many arguments to function '__eerd_word_tn2313'
    ../main.c:32: warning: statement with no effect
    ../main.c:38: warning: pointer targets in passing argument 1 of '__eewr_word_tn2313' differ in signedness
    ../main.c:38: warning: passing argument 2 of '__eewr_word_tn2313' makes integer from pointer without a cast
    make: *** [main.o] Error 1


    Dodano po 4 [minuty]:

    Dodano po 9 [minuty]:

    Trochę posiedziałem i zrobiłem tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Nie ma błędów, jednak podczas symulacji jest ten sam problem.
    Macie jakieś pomysły?
  • #23 11063511
    snnaap
    Poziom 25  
    Posty: 677
    Pomógł: 83
    Ocena: 10
    Dla programu przedstawionego przez autora tego wątku chyba jednak prościej, mniej kłopotliwie i bardziej energooszczędnie byłoby użycie najprostszych procedur proponowanych (o dziwno!!) przez producenta uK np:


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    itd

    A jakie korzyści z nauki czytania not by z tego doszły.

    Pozdrawiam
  • #25 11063784
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Dorzucę jeszcze jednego hinta - nazwa tablicy jest sama w sobie wskaźnikiem na pierwszy element. Sprawdź:
    Kod: text
    Zaloguj się, aby zobaczyć kod
    P.S. : Na forum używaj syntax = C, taki kod jest czytelniejszy.
    Edit: Poprawiłem, zgodnie z sugestiami niżej.
  • #26 11063923
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    snnaap napisał:
    Dla programu przedstawionego przez autora tego wątku chyba jednak prościej, mniej kłopotliwie i bardziej energooszczędnie byłoby użycie najprostszych procedur proponowanych (o dziwno!!) przez producenta uK np:


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    itd

    A jakie korzyści z nauki czytania not by z tego doszły.

    Pozdrawiam


    No ja bym się z tym mocno nie zgodził, dlatego, że funckje przygotowane w AVR GCC działają niezawodnie i zawsze - dzięki czemu nie ma miejsca na pomyłkę. Poza tym i tak nie warto zapisywać do EEPROM pojedynczych zmiennych a zebrać je po prostu w jakąś dużą strukturę i wtedy całą tę strukturę zapisywać / odczytywać jako blok.

    Dodano po 1 [minuty]:

    LordBlick napisał:
    Dorzucę jeszcze jednego hinta - nazwa zmiennej jest sama w sobie wskaźnikiem.


    Czy koledze może się coś nie pomyliło tutaj? Sama nazwa tablicy jest wskaźnikiem na jej pierwszy element ale już nazwa zmiennej na pewno nie jest wskaźnikiem i dlatego trzeba się wtedy posłużyć operatorem pobierania adresu &
  • #27 11066089
    snnaap
    Poziom 25  
    Posty: 677
    Pomógł: 83
    Ocena: 10
    mirekk36 napisał:


    No ja bym się z tym mocno nie zgodził, dlatego, że funckje przygotowane w AVR GCC działają niezawodnie i zawsze - dzięki czemu nie ma miejsca na pomyłkę. Poza tym i tak nie warto zapisywać do EEPROM pojedynczych zmiennych a zebrać je po prostu w jakąś dużą strukturę i wtedy całą tę strukturę zapisywać / odczytywać jako blok.



    Łatwo się ich używa jak jakoś wie jak z nich korzystać i jak wywołać dana funkcję/procedurę. Jak widać na przykładzie tego wątku nie wszyscy mają taką wiedzę. A niewiedz ta prowadzi do właśnie do pomyłek i późniejszego szukania przez 5 dni gdzie leżał błąd.

    Drugi problem to taki że użycie gotowej biblioteki to pójście na łatwiznę, używający nawet nie zastanawia się co siedzi w środku takiej biblioteki i jak naprawę ona działa a później pojawiaj się dziwne błędy wynikające z jej nieprawidłowego użycia.

    Akurat Ty powinieneś wiedzieć sporo na ten temat, bo jak zdążyłem zauważyć sam piszesz niektóre biblioteki i nie korzystasz z bibliotek innych a czemu? Bo wtedy najlepiej wiadomo jak dana biblioteka wygląda, co zawiera, jakie ma mocne strony a jakie ograniczenia, czy może się mylę?
  • #28 11066377
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    snnaap napisał:

    Akurat Ty powinieneś wiedzieć sporo na ten temat, bo jak zdążyłem zauważyć sam piszesz niektóre biblioteki i nie korzystasz z bibliotek innych a czemu? Bo wtedy najlepiej wiadomo jak dana biblioteka wygląda, co zawiera, jakie ma mocne strony a jakie ograniczenia, czy może się mylę?


    Tzn ja mam takie podejście, że jeśli coś jest gotowego w AVR GCC to z tego korzystam - bo pisanie często własnych funkcji tego typu może być mniej opłacalne (czytaj optymalne) ....

    Poza tym jak nie wiadomo o co chodzi w tych funkcjach - no toż ta do blokowego zapisu jest prosta jak drut:

    tworzymy sobie jakąś piękną strukturę ze zmiennymi, które mają być w eeprom. Ale skorzystajmy ze zdefiniowania typu:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    potem definiujemy sobie pięknie np dwie zmienne:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    no i potem proszę bardzo chcesz wpisać dane z RAM do EEPROM, żeby zapamiętać ustawienia użytkownika gdzieś w programie? to proszę

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    podobnie z odczytem.

    A jak potrzebuję dodać jakąś zmienną ??? odjąć ? co za problem wystarczy dodać struktury albo wyjąć ze struktury. Czy to nie jest wygodniejsze niż babranie się co chwilę w kodzie z definiowaniem oddzielnych gdzieś zmiennych ? korzystajmy ze struktur i korzystajmy z tego co daje nam AVR GCC - o to mi chodzi. Ale jeśli ktoś zechce robić coś na niskopoziomowych funkcjach i bawić się w oczekiwania to w zasadzie można byłoby powrócić nawet do asemblera. Wtedy to już na pewno będzie każdy wiedział od podszewki co i jak się robi.

    Troszkę więc nieuprawnione chyba jest stwierdzenie, że korzystanie z funkcji dostępnych w kompilatorze jest pójściem na łatwiznę - nieprawdaż ?
  • #29 11066542
    20rafalo
    Poziom 19  
    Posty: 506
    Ocena: 6
    mirekk36 czy to moje rozwiązanie z dnia 02 Lip 2012 13:35 ma szanse zadziałać w rzeczywistości?
    Bo już bym zaczął składać płytkę...
  • #30 11066548
    snnaap
    Poziom 25  
    Posty: 677
    Pomógł: 83
    Ocena: 10
    mirekk36 napisał:

    Troszkę więc nieuprawnione chyba jest stwierdzenie, że korzystanie z funkcji dostępnych w kompilatorze jest pójściem na łatwiznę - nieprawdaż ?


    Chłopcze, czepiasz się słówek.

    Mi nie musisz tłumaczyć co i jak, jestem na tyle rozgarnięty że łapie to - chodź może Ty uważasz inaczej.

    Jeżeli ktoś potrzebuje pomocy z takim tematem to uważam że jest początkującym, a jak ktoś jest początkujący to niech zacznie od początku od prostych rzeczy nie uważasz?

    A co do przykładu kolegi to nie ma w nim mowy o strukturach a jedynie o prostej zmiennej typu int.
    Więc wywód o strukturach w tym wątku może lekko namieszać koledze.

Podsumowanie tematu

✨ Użytkownik ma problem z zapisem i odczytem danych z pamięci EEPROM w mikrokontrolerze ATtiny2313. W kodzie używa funkcji eeprom_write_block i eeprom_read_block, jednak napotyka błędy kompilacji oraz problemy z odczytem wartości po restarcie. Uczestnicy dyskusji sugerują różne podejścia, w tym użycie eeprom_read_word i eeprom_write_word dla zmiennych 16-bitowych oraz zwracają uwagę na różnice między definicjami F_CPU a fusebitami. Wskazują również na konieczność poprawnego zarządzania czasem zapisu do EEPROM oraz na możliwość użycia prostszych funkcji do zapisu i odczytu. Użytkownik ostatecznie stwierdza, że po wprowadzeniu poprawek program działa, ale nadal nie zapamiętuje wartości po odcięciu zasilania.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA