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



Teraz jest 18 kwi 2024, o 12:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 5 paź 2012, o 23:23 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 01 wrz 2012
Posty: 11
Lokalizacja: Warszawa
Pomógł: 0

Witam,

Czy jest możliwość zapisania struktury w pamięci flash tego typu;

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


Obydwie zmienne char będą tylko do odczytu, więc chciałbym je umieścić w pamięci flash aby nie zajmowały pamięci RAM.
Próbowałem z różnymi wariantami słowa PROGMEM ale kompilator cały czas wywala błąd.

A co jeśli chodzi o strukturę zawierającą zmienne które będą modyfikowane podczas działania funkcji i zmienne tylko do odczytu np.;

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


Char-y chciał bym umieścić w pamięci flash a uint8_t normalnie w Ram.
Czy jest taka możliwość.

To mój pierwszy post na tym forum, więc proszę o wyrozumiałość.
Z góry dziękuje za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 paź 2012, o 02:10 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

No pewnie że można zrobić taką mieszaną strukturę ;) .... bardzo dużo przykładów takiego posługiwania się strukturami jest w drugiej części mojej książki tak przy okazji:

http://atnel.pl/jezyk-c-pasja-programowania.html

warto więc poczytać i to nie tylko ze względu na to.... ale do rzeczy

gdybyś chciał całą taką strukturę mieć we flash:

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


to

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


zauważ, że strukturę w pamięci FLASH trzeba bezwzględnie od razu zainicjalizować - masz przykład powyżej

a jeśli chcesz mieć mieszaną strukturę w RAM ze wskaźnikami to podobnie:

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


i w kodzie

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


a potem w main()

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


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 paź 2012, o 11:52 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 01 wrz 2012
Posty: 11
Lokalizacja: Warszawa
Pomógł: 0

Książkę mam w planach kupić jak na razie koczę studiować pierwszą część "Mikrokontrolery AVR
Język C Podstawy programowania"

A jeśli chciałbym zrobić tablice takiej struktury np;

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


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


Przy takiej inicjalizacji kompilator wyrzuca warning-i.

Jeśli chodzi o strukturę mieszaną to chyba wiem w jaki sposób ją zainicjalizować.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 paź 2012, o 12:08 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 01 wrz 2012
Posty: 11
Lokalizacja: Warszawa
Pomógł: 0

Jest OK, kompiluje się bez problemu.
Dzięki



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 paź 2012, o 12:27 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Muszą być te dodatkowe nawiasy klamrowe jak napisał wyżej kolega, bo one oddzielają ci elementy tablicy, a bez nich to wynika jakbyś chciał do jednego elementu napchać więcej niż jest w nim miejsca - stąd był uzasadniony płacz kompilatora ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 paź 2012, o 14:42 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 01 wrz 2012
Posty: 11
Lokalizacja: Warszawa
Pomógł: 0

Napotkałem następny problem.

Gdy próbuje wyświetlić dany element struktury przy pomocy poniższej funkcji na wyświetlaczu lcd
wyświetlają się chińskie znaczki.

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

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

Co tu jest jeszcze nie tak :( ?

Gdy wpisze normalnie przy pomocy zmiennej nazwa_str jest ok.
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: 6 paź 2012, o 14:52 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Panie kochanieńki ;) ale wyobraź sobie, że gdy piszesz:

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


to tak jakbyś próbował odwołać się do wskaźnika do tekstu, który znajduje się pod tym adresem - a tak przecież nie jest ;) nie pamiętasz jak zdrefiniowałeś swoją własną strukturę? przecież w tym polu jest znowu wskaźnik do łańucha a nie już sam łańcuch. Zatem trzeba chyba użyć operatora pobierania adresu aby dobrać się "do wskaźnika do wskaźnika" ;)

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

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2012, o 15:09 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 01 wrz 2012
Posty: 11
Lokalizacja: Warszawa
Pomógł: 0

Moim zdaniem jest troszkę inaczej niż piszesz ;) .

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


Więc jeśli pisze w ten sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

jest już wskaźnikiem do łańcucha znaków (element[0].nazwa = nazwa_str) a nie do kolejnego wskaźnika.
Chyba że czegoś nie rozumiem bądź nie jestem świadomy.

Problem z wyświetlaniem znaków ustał kiedy definicje struktury umieściłem w tym samym pliku projektu gdzie używałem funkcji do wyświetlania znaków.
Na początku wyglądało to tak (wersja niedziałająca) :

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

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


W pliku main

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


Gdy umieściłem definicje struktury w pliku main zamiast w nazwy.c zaczęło wyświetlać prawidłowo tekst.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Proszę mnie uświadomić czemu tak jest skoro wszystko zadeklarowałem w nazwy.h i dołączyłem do main-a więc powinno działać.
Pisze spory projekt i jeśli wszystkie definicje będę musiał poprzenosić do main-a to zrobi mi się straszny bałagan :( .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2012, o 22:10 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Oczywiście, że jest troszkę inaczej niż pisałem - ale to dlatego że namieszałeś troszkę ;) a ja pisałem na szybko ....

bo pisałeś że chcesz mieć jednak strukturę w RAM a na końcu jest jak widzę we Flash ...

ok wracając do twojego problemu - oczywiście że można zdefiniować tą strukturę w innym pliku - nie trzeba koniecznie w main.

------------------------ [ Dodano po: 1 minucie ]

ale odpowiem dokładniej dopiero jak będę miał pod ręką kawałek zestawu, kompilator itp żeby znowu nie "strzelać" - tzn żeby sprawdzić najpierw.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



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

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