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



Teraz jest 25 kwi 2024, o 09:49


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 10 mar 2018, o 12:11 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 61
Pomógł: 0

Drodzy AVRowicze, mam następujące problem:
Chciałbym upakować wszystkie rejestry danego peryferium do jednej struktury.

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


Tutaj było prosto, bo rejestry PINDx (IDRx), DDRx, PORTx(ODRx) są poustawiane w pamięci kolejno po sobie.

Ale problem pojawia się gdy na przykład chciałbym zrobić coś takiego:

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


(x) - oznacza adres w pamięci, w obszarze SFIOR.

Jak widać na drugim przykładzie, ostatni rejestr jest ustawiony w obszarze pamieci SFIOR znacznie dalej od pozostałych. W związku z tym pytanie jest następujące:
Czy mogę jakoś wymusić umiejscowienie zmiennych ze struktury w pamięci?



Ostatnio edytowano 10 mar 2018, o 18:29 przez Jatsekku, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2018, o 13:19 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 61
Pomógł: 0

Właśnie myślałem o czymś takim żeby zrobić tablice uint8_t RESERVED[10], ale czy to jedyne rozwiązanie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2018, o 14:11 
Offline
Użytkownik

Dołączył(a): 05 wrz 2017
Posty: 169
Pomógł: 31

Często korzystam z tego (kompilator gcc):
https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html

Na pierwszy rzut oka sprawa wygląda na banalnie prostą, po prostu używasz __attribute__ i sam ustalasz adres zmiennej. Ważne żeby się nie pomylić bo nie wiem czy kompilator zaprotestuje. W dsPIC czasem definiuje atrybuty zmiennych (pamięć x,y itd), choć raczej nie adres.
Przykład z strony (link powyżej)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2018, o 15:04 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 61
Pomógł: 0

Oooo! Coś takiego mi odpowiada. Dziękuję bardzo!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2018, o 18:42 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 61
Pomógł: 0

Jednak nie jest tak kolorowo :(
@abel11, mógłbyś podać przykład zastosowania tego w strukturze?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2018, o 00:22 
Offline
Użytkownik

Dołączył(a): 05 wrz 2017
Posty: 169
Pomógł: 31

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

W MPLAB4.15 z XC16-gcc0 v1.26 działa poprawnie - na symulatorze obserwuje zmiany wybranych komórek pamięci.

To tak naprawdę nic więcej jak przypisanie strukturze wskaźników adresów zmiennych o stałym miejscu w pamięci. Tu musisz sobie sprawdzić która wersja będzie oferowała mniejszą zajętość pamięci, ta kolegi dambo, czy ta która zamieściłem.
Przy okazji całej strukturze też możesz nadać atrybut adres ale to będzie tylko adres 1 elementu, próba ustalenia adresu każdego z elementów z osobna powinna być zignorowana przez kompilator.
Być może jest jakiś sposób na zrobienie tego inaczej ale ja go niestety jeszcze nie znam.

Chociaż w Twoim przypadku chyba możesz sobie powołać strukturę wskaźników na SFR uC.



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: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO