Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 24 kwi 2024, o 03:15


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 
Autor Wiadomość
PostNapisane: 20 sty 2021, o 23:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

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:
Składnia: [ Pobierz ] [ Ukryj ]
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:
Składnia: [ Pobierz ] [ Ukryj ]
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ł



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO