Guest
Thu Oct 11, 2007 1:41 pm
Oto kawałek kodu umieszczonego w sekcji bootloadera (od 0x01e000):
...
#define BOOT_VER_ADDR 0x01dd00 //adres , gdzie zapisuje
uint32_t pom32;
uint16_t pom;
...
pom=0x1234;
boot_spm_busy_wait();
pom32=BOOT_VER_ADDR;
boot_page_erase(pom32);
boot_spm_busy_wait();
boot_page_fill(0,pom); //zapis liczby do bufora
boot_page_write(pom32); // i zapis strony
boot_spm_busy_wait();
pom=pgm_read_word_far((uint32_t)pom32);
..i zmienna pom jest równa 0xffff zamiast 0x1234, innymi słowy zapis pamięci
FLASH i odczytanie z niej nie daja tego samego rezultatu. Po odczytaniu
pamięci FLASH pod adresem BOOT_VER_ADDR jest poprawna wartość: 0x1234. Co jest
nie tak?
Używam WinAVR z 20060421
Pozdrowienia.
--
Wysłano z serwisu Usenet w portalu Gazeta.pl ->
http://www.gazeta.pl/usenet/
Adam Dybkowski
Guest
Thu Oct 11, 2007 10:40 pm
lufcadio.WYTNIJ@gazeta.pl pisze:
Quote:
pom=0x1234;
boot_spm_busy_wait();
pom32=BOOT_VER_ADDR;
Polecam dodanie garści spacji bo ciężko się czyta tak ściśnięty kod. To
nie IOCCC!
http://www.ioccc.org/2004/anonymous.c
Z drugiej strony, łatwo też przesadzić w drugą stronę:
http://www.ioccc.org/2004/sds.c
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
Grzegorz Kurczyk
Guest
Fri Oct 12, 2007 7:08 am
Użytkownik Adam Dybkowski napisał:
Quote:
lufcadio.WYTNIJ@gazeta.pl pisze:
pom=0x1234;
boot_spm_busy_wait();
pom32=BOOT_VER_ADDR;
Polecam dodanie garści spacji bo ciężko się czyta tak ściśnięty kod. To
nie IOCCC!
Oj Kolego Adamie bez przesady

Przecież to tylko kilka linii na
krzyż. Miałem podobny problem z bootloaderem na ATmega128. Pisałem
własne funkcje do obsługi flasza, bo te w WinAVR miały błąd (a w każdym
razie zachowywały się dziwnie. O ile się nie mylę to boot_page_fill
robiło mi jakieś psikusy. Postaram sie dzisiaj sprawdzić i dam znać.
Pozdrawiam
Grzegorz
Guest
Fri Oct 12, 2007 8:41 am
Ja właśnie używam ATmega128.
Pozdrowienia, Jack
Grzegorz Kurczyk <grzegorz.usun.to@control.slupsk.pl> napisał(a):
Quote:
Oj Kolego Adamie bez przesady

Przecież to tylko kilka linii na
krzyż. Miałem podobny problem z bootloaderem na ATmega128. Pisałem
własne funkcje do obsługi flasza, bo te w WinAVR miały błąd (a w każdym
razie zachowywały się dziwnie. O ile się nie mylę to boot_page_fill
robiło mi jakieś psikusy. Postaram sie dzisiaj sprawdzić i dam znać.
Pozdrawiam
Grzegorz
--
Wysłano z serwisu Usenet w portalu Gazeta.pl ->
http://www.gazeta.pl/usenet/
Guest
Fri Oct 12, 2007 10:41 am
Problem się rozwiązał, należało na koniec dodać:
boot_rww_enable();
Pozdrowienia.
<lufcadio.WYTNIJ@gazeta.pl> napisał(a):
Quote:
Oto kawałek kodu umieszczonego w sekcji bootloadera (od 0x01e000):
...
#define BOOT_VER_ADDR 0x01dd00 //adres , gdzie zapisuje
uint32_t pom32;
uint16_t pom;
...
pom=0x1234;
boot_spm_busy_wait();
pom32=BOOT_VER_ADDR;
boot_page_erase(pom32);
boot_spm_busy_wait();
boot_page_fill(0,pom); //zapis liczby do bufora
boot_page_write(pom32); // i zapis strony
boot_spm_busy_wait();
pom=pgm_read_word_far((uint32_t)pom32);
..i zmienna pom jest równa 0xffff zamiast 0x1234, innymi słowy zapis pamięci
FLASH i odczytanie z niej nie daja tego samego rezultatu. Po odczytaniu
pamięci FLASH pod adresem BOOT_VER_ADDR jest poprawna wartość: 0x1234. Co jest
nie tak?
Używam WinAVR z 20060421
Pozdrowienia.
--
Wysłano z serwisu Usenet w portalu Gazeta.pl ->
http://www.gazeta.pl/usenet/
JS
Guest
Fri Oct 12, 2007 11:41 pm
W artykule <fem5b2$ks9$1@atlantis.news.tpi.pl> Adam Dybkowski napisal(a):
Quote:
lufcadio.WYTNIJ@gazeta.pl pisze:
pom=0x1234;
boot_spm_busy_wait();
pom32=BOOT_VER_ADDR;
Polecam dodanie garści spacji bo ciężko się czyta tak ściśnięty kod. To
nie IOCCC!
W przypadkach niepatologicznych pomaga indent.
Jest w WINAVR; dokumentacja np. tutaj:
http://www.xs4all.nl/~carlo17/indent/indent.html
Przykładowe formatowanie (nie ukrywam, że dobrane zgodnie z updobaniami):
indent -kr -i3 -bl -bli0 -npcs -nsaf -nsai -nsaw -prs -nce -nut -sob
Quote:
Groza
--
Pozdrawiam!
Jarosław Szynal
Adam Dybkowski
Guest
Sat Oct 13, 2007 12:36 am
JS pisze:
Quote:
W przypadkach niepatologicznych pomaga indent.
Jest w WINAVR; dokumentacja np. tutaj:
http://www.xs4all.nl/~carlo17/indent/indent.html
Przykładowe formatowanie (nie ukrywam, że dobrane zgodnie z updobaniami):
indent -kr -i3 -bl -bli0 -npcs -nsaf -nsai -nsaw -prs -nce -nut -sob
O jak brzydko przy takich ustawieniach dodaje spacje w prototypach
funkcji, ble! Oto kawałki testu na moim kodzie:
void delayus( uint16_t t )
Zdecydowanie wolę taką formę:
void delayus (uint16_t t)
Podobnie zresztą traktuje nawiasy w innych miejscach:
if( t < 50 )
A ja piszę raczej tak:
if (t < 50)
Największą przesadą tych ustawień jest jednak wg mnie dodawanie spacji w
pustej liście argumentów wywołania funkcji oraz wsadzanie spacji
robiących wcięcia na początku linii:
idlenow( );
Idę dopracować zestaw opcji dla indenta aby "lubił" mój styl pisania.
W każdym razie fajne narzędzie, przyda się.
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
JS
Guest
Sat Oct 13, 2007 8:41 pm
W artykule <fep0nq$rgm$1@nemesis.news.tpi.pl> Adam Dybkowski napisal(a):
Quote:
Przykładowe formatowanie (nie ukrywam, że dobrane zgodnie z updobaniami):
indent -kr -i3 -bl -bli0 -npcs -nsaf -nsai -nsaw -prs -nce -nut -sob
Największą przesadą tych ustawień jest jednak wg mnie dodawanie spacji w
pustej liście argumentów wywołania funkcji oraz wsadzanie spacji
robiących wcięcia na początku linii:
idlenow( );
^^
To faktycznie przykre i chyba nie ma stosownej opcji na wyłączenie
spacji akurat w tym kontekście
--
Pozdrawiam!
Jarosław Szynal