Witam
Pytanie dotyczy sposobu korzystania z zewnętrznych pamięci flash, eeprom, fram, sram, podłączonych przy użyciu I2C czy SPI.
Łatwo możemy sobie napisać obsługę w sensie sprzętowym. Możemy zapisać i odczytać bajt czy słowo a nawet łańcuch.
Moje pytanie jest związane z tym jak takie pamięci obsługiwać w sposób wygodny.
Przykładowo do obsługi wewnętrznej pamięci eeprom mamy wygodne funkcje wbudowane AVR GCC. Możemy za ich pomocą zapisać sobie np. struktury, co ładnie Mirek tłumaczy w swoim poradniku.
Jednak przy użyciu pamięci zewnętrznej np. eeprom czy fram podłaczonej przez i2c zastanawia mnie jak osiągnąć podobną funkcjonalność.
Przykładowo mamy strukturę w której mamy różne pola uint_x, int_x, czy nawet łańcuchy znakowe, albo inne struktury. Nasza struktura zajmuje jakąś ilość bajtów.
W programie możemy te ilość łatwo określić stosując operator sizeof(). Jednak gdy napiszemy sobie funkcję np:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W celu uzyskania uniwersalności przekazujemy wskaźnik na zmienną typu void.
Pamięć jest zorientowana bajtowo, funkcja musi wiedzieć ile bajtów będzie zapisywanych.
Oczywiście, że możemy przekazać te wartość jako dodatkowy argument typu uint_x.
Ale to skraca nam o głowę uniwersalność funkcji i wygodę użycia. W końcu typy danych mogą być różne, o różnych długościach.
Otóż w ciele funkcji nie możemy użyć zapisu:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Ponieważ kompilator w chwili kompilacji tej funkcji nie wie jaki argument zostanie przekazany, a może być to argument dowolny (użyliśmy void *)
Drugim problemem jest to czy mamy pewność, że w przypadku struktury rezydującej w pamięci ram, jej poszczególne pola rozłożone są w takiej kolejności
jak jest to opisane w deklaracji...
Moim zdaniem nie jest to oczywiste. Analogiczny problem będziemy mieli przy odczycie.
Jak podejść do tego tematu?
Żeby było funkcjonalnie, wygodnie, jednoznacznie i uniwersalnie.
pozdrawiam serdecznie
Michał