ATNEL tech-forum
https://forum.atnel.pl/

Zapis i odczyt do/z EEPROM zagwózdka
https://forum.atnel.pl/topic23386.html
Strona 1 z 1

Autor:  gordon10 [ 11 paź 2020, o 13:53 ]
Tytuł:  Zapis i odczyt do/z EEPROM zagwózdka

Witam,
Kombinuję przy zapisie/odczycie ustawień urządzenia do/z EEPROM. Chodzi o to, że przy zmianie ustawień, zapisywana jest oda razu kopia struktury do EEPROM, a przy uruchomieniu urządzenia odczyt struktury z EEMEM do struktury w RAM.
Wszystko działa poprawnie gdy używam bezpośrednio funkcji systemowych. Jednak chciałem sobie uprościć zadanie, żeby nie wpisywać za każdym razem wielkości bloku danych i to już nie działa tak jakbym chciał. Już pokazuję na przykładach o co chodzi:

To pewnie mało ważne, ale mam taką strukturę danych oraz zmienne, w których przechowuję ustawienia pieca:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Gdy stosuję funkcje systemowe (poniżej) wszystko jest ok. Dane ładnie się zapisują i odczytują.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jednak napisałem funckcje, w których przekazuję tylko źródło i miejsce docelowe danych, a rozmiar danych już miał się ustawiać automatycznie (i tu pewnie robię jakiegoś babola).
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Przy takim rozwiązaniu to nie działa.

Działa dopiero gdy rozmiar danych określę na sztywno
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Co mam wpisać w sizeof( ??? ) żeby rozmiar danych był obliczany automatycznie, żebym nie musiał za każdym razem zmieniać tego ręcznie :?:
Będę wdzięczny za podpowiedź.

Autor:  auers [ 11 paź 2020, o 15:51 ]
Tytuł:  Re: Zapis i odczyt do/z EEPROM zagwózdka

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

To Ci nie działa ponieważ jako argument sizeof podałeś wskaźnik i operator zwraca Ci rozmiar typu wskaźnikowego a nie struktury.
Jeżeli chcesz, aby zwrócony był rozmiar struktury to musisz to zrobić właśnie tak jak już to zrobiłeś:

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

Chyba zamiast uprościć to sobie komplikujesz, nie bardzo widzę co i w jakim celu chcesz bardziej automatyzować.

Autor:  gordon10 [ 11 paź 2020, o 16:04 ]
Tytuł:  Re: Zapis i odczyt do/z EEPROM zagwózdka

Heh no to sobie "uprościłem" ;)
Ale chcę trochę podrążyć temat i w takim razie spytam inaczej:
Jak wyłuskać wielkość(rozmiar) elementu/zmiennej/typu, na który wskazuje wskaźnik?

Autor:  andrews [ 11 paź 2020, o 16:09 ]
Tytuł:  Re: Zapis i odczyt do/z EEPROM zagwózdka

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

Co mam wpisać w sizeof( ??? ) żeby rozmiar danych był obliczany automatycznie, żebym nie musiał za każdym razem zmieniać tego ręcznie

Za pomocą funkcji inline tego nie zrobisz. We fragmencie, który zacytowałem sizeof(ram_data) przyjmie wartość 2, ponieważ taki jest rozmiar samego wskaźnika. Aby sprawdzić rozmiar typu danych wskazywanych przez wskaźnik (czyli Twojej struktury TFURNANCE) należałoby użyć składni sizeof(*ram_data), ale u Ciebie to nie zadziała, ponieważ ram_data jest typu void*, więc kompilator nie zgadnie, jakiego typu elementy będziesz przekazywał do funkcji. Żeby to zadziałało parametr ram_data musiałby być typu TFURNANCE*
Możesz za to spróbować osiągnąć cel za pomocą makra:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


EDIT: Poprawiłem nazwę funkcji: było eeprom_write_block, powinno być eeprom_read_block

Autor:  gordon10 [ 11 paź 2020, o 16:27 ]
Tytuł:  Re: Zapis i odczyt do/z EEPROM zagwózdka

Uniwersalność widać nie zawsze ma sens...
ale makro trochę upraszcza sprawę, dzięki:)

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/