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



Teraz jest 24 mar 2026, o 22:33


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 
Autor Wiadomość
PostNapisane: 13 sty 2016, o 21:28 
Offline
Nowy

Dołączył(a): 22 kwi 2014
Posty: 5
Pomógł: 0

Dzień dobry,
pozdrawiam ze Świnoujścia w nowym roku,
próbowałem ogarnąć to samemu ale tony kodu i żadnego efektu, już opisuję:
- mikrokontroler: Atmega 328P
- Atmel Studio 6.1

Robię menu i będzie więcej stringów niż by sie sensownie mogło pomieścić w pamieci RAM poczciwej Atmeżki dlatego zainteresowałem się mozliwością wrzucenia tego do pamięci programu Flash. Najprościej jesli pokażę to na krótkim kodzie:

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

powyższe powoduje że dwie stałe tekstowe będą wpisane do pamięci programu

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

powyższe powoduje utworzenie ze zdefiniowanych stałych, tablicy dwuelementowej o nazwie TEST

poniższy przykład znalazłem na stronie:
http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tłumacząc opis (mniej/więcej) z podanej strony www wygląda to tak:
Tablica TEST jest przechowywana w pamięci programu. Pobieramy adres (&) który potrzebujemy i podajemy go do funkcji pgm_read_word. Tego makra używa się do pobrania wskaźnika tablicy TEST. Pamiętać trza że wskaźnik jest 16-bitowy. Makro pgm_read_word zwróci 16-bitową liczbę bez znaku czyli wskaźnik do naszego elementu w tablicy TEST. Następnie trzeba go przerobić na faktyczny wskaźnik używając PGM_P. Teraz ten wskaźnik to adres w pamięci programu wskazujący na interesujący Nas element tablicy TEST. Ten wskaźnik używa sie następnie na przykład w funkcjach str... czyli np. strcpy_P (_P to funkcje specjalnie przygotowane do pracy z danymi zapisanymi w pamieci programu FLash a nie tradycyjnie w Ramie).

Teraz od siebie napiszę:
wszystko w porządku bo ten przykład akurat działa ale mi zależy na innych funkcjach str... np. strstr_P czy strcmp_P.
A te już nie działają.

Tak jak napisałem. Po przepisaniu ton kodu doszedłem do następującego wniosku:
Jeśli operuję na stałych czyli TEMP_0 oraz TEMP_1 to jest w porządku ale jeśli chcę robić to hurtowo w pętli for za pomocą tablicy TEST to już nie działa. Oto mój kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Proszę o pomoc. W skrócie. Kiedy korzystam ze stałych czyli TEMP_0 oraz TEMP_1 to jest dobrze ale jeśli korzystam z tablicy TEST[0] oraz TEST[1] to nie jest dobrze. A korzystam tylko z gotowych funkcji biblioteki pgmspace.h czyli z pgm_read_word oraz z makra PGM_P.

Jeszcze raz proszę o pomoc.
POZDRAWIAM

===========================================================================================================================
============================================================================================================================


. -----UWAGA----- ---KŁOPOT---ROZWIĄZANY---
. -----UWAGA----- ---KŁOPOT---ROZWIĄZANY---


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

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


Dziękuje i pozdrawiam
Michał

. -----UWAGA----- ---KŁOPOT---ROZWIĄZANY---
. -----UWAGA----- ---KŁOPOT---ROZWIĄZANY---



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 8 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