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: 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ą. 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). 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 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 |
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ś: 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): 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: 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/ |