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



Teraz jest 25 kwi 2024, o 00:25


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 26 ] 
Autor Wiadomość
PostNapisane: 5 sie 2014, o 14:08 
Offline
Użytkownik

Dołączył(a): 09 cze 2014
Posty: 92
Pomógł: 0

Witam robię projekt do z poradnik terminal jako kolorowy wyświetlacz i jak w MKUART.c dodam uart_puts_P to wyskakuje taki błąd



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


Dlaczego?


Przerobiony kod 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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2014, o 14:12 
Offline
Moderator
Avatar użytkownika

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

a zainkludowałeś bibliotekę <avr/pgmspace.h> ?

_________________
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: 5 sie 2014, o 14:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 kwi 2014
Posty: 85
Pomógł: 4

Zainkluduj plik avr/pgmspace.h.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2014, o 14:15 
Offline
Użytkownik

Dołączył(a): 09 cze 2014
Posty: 92
Pomógł: 0

W mkuart.c nie była zainkludowana więc zainkludowałem w reszcie tez jest i nadal nie działa.

------------------------ [ Dodano po: kilkunastu sekundach ]

A cały projekt jest pobrany z bloga.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2014, o 14:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 kwi 2014
Posty: 85
Pomógł: 4

A czy nagłówek funkcji jest w pliku .h?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2014, o 14:19 
Offline
Moderator
Avatar użytkownika

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

Ty lepiej pokaż swój plik zamiast pisać opowiadania beletrystyczne co tam robisz i skąd pobrałeś ;) bo każdy tam coś pisze a później okazuje się że narobił baboli ;)

Jak zobaczymy plik to podpowiemy ci od razu gdzie masz tego babola

_________________
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: 5 sie 2014, o 14:21 
Offline
Użytkownik

Dołączył(a): 09 cze 2014
Posty: 92
Pomógł: 0

Chodzi o cos takiego?

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: 5 sie 2014, o 14:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 kwi 2014
Posty: 85
Pomógł: 4

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



Ostatnio edytowano 5 sie 2014, o 14:31 przez matiwegr, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2014, o 14:26 
Offline
Użytkownik

Dołączył(a): 09 cze 2014
Posty: 92
Pomógł: 0

Proszę plik:

[ ... sorry skasowałem kod bo to WCALE nie jest z bloga - tylko z książki - mirekk36, a bibliotek z książki nie publikujemy na forach - chyba że je sami bardzo mocno pozmieniamy to wtedy ok - więc proszę się trzymać tej zasady. A zapewniam cię że biblioteka z książki działa poprawnie ]

a pobrałem to z pana bloga

http://mirekk36.blogspot.com/2013/05/te ... z-lcd.html

@matiwerg po dopisaniu tego jest to samo



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2014, o 14:36 
Offline
Moderator
Avatar użytkownika

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

pokaż swój kod main.c

------------------------ [ Dodano po: kilkunastu sekundach ]

poczytaj też sobie KONIECZNIE to z bloga:

http://mirekk36.blogspot.com/2012/08/ec ... zytaj.html

_________________
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: 5 sie 2014, o 14:37 
Offline
Użytkownik

Dołączył(a): 09 cze 2014
Posty: 92
Pomógł: 0

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: 5 sie 2014, o 14:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 kwi 2014
Posty: 85
Pomógł: 4

Czy błąd w konsoli jest nadal taki sam?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2014, o 14:46 
Offline
Użytkownik

Dołączył(a): 09 cze 2014
Posty: 92
Pomógł: 0

tak



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2014, o 14:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 kwi 2014
Posty: 85
Pomógł: 4

To musi działać :D . W pliku mkuart.c dodajesz tą funkcję:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


Nagłówek funkcji przenosisz do pliku mkuart.h.
I to musi działać. A jeszcze jedna sprawa... Z jakiego toolchaina korzystasz?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2014, o 14:58 
Offline
Moderator
Avatar użytkownika

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

sebbek napisał(a):
tak


no i gdzie w tym kodzie w main.c masz

uart_puts_P()


???

_________________
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: 5 sie 2014, o 15:04 
Offline
Użytkownik

Dołączył(a): 09 cze 2014
Posty: 92
Pomógł: 0

Nagłówek czyli co?
toolchina nie wiem jak go sprawdzić?
a jak to ma jakieś znaczenie to ja korzystam z atmega 8 a nie 32 i z kwarcu 16 MHz

i gdzie dokładnie wstawić to uart_puts_P()?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2014, o 15:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 kwi 2014
Posty: 85
Pomógł: 4

Nagłówek funkcji czyli to:
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: 5 sie 2014, o 15:06 
Offline
Moderator
Avatar użytkownika

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

sebbek napisał(a):
Nagłówek czyli co?
toolchina nie wiem jak go sprawdzić?
a jak to ma jakieś znaczenie to ja korzystam z atmega 8 a nie 32 i z kwarcu 16 MHz

i gdzie dokładnie wstawić to uart_puts_P()?


to może inaczej panie kochany mam do ciebie takie dwa pytania?

1. a powiedz mi, wyjaśnij po co się uparłeś na to uart_puts_P() ? dlaczego chcesz to dać - bardzo jestem ciekaw odpowiedzi ... a jak jej udzielisz to przy okazji być może sobie sam coś wyjaśnisz na głos

2. masz Bluebooka ?

_________________
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: 5 sie 2014, o 15:12 
Offline
Użytkownik

Dołączył(a): 09 cze 2014
Posty: 92
Pomógł: 0

O uart_puts_P() się uparłem ponieważ pan napisał:

mirekk36 napisał(a):
sebbek napisał(a):
tak


no i gdzie w tym kodzie w main.c masz

uart_puts_P()


???

A bluebook'a kiedyś pożyczyłem od kolegi i biblioteki do ciekawych projektów sobie przegrałem na dysk.

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

Była to wersja pierwsza więc musiałem ten kawałek kodu dopisać



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2014, o 15:17 
Offline
Moderator
Avatar użytkownika

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

sebbek napisał(a):
O uart_puts_P() się uparłem ponieważ pan napisał:


czyli tobie się nie chce przeczytać podstaw z książki odnośnie odczytu z pamięci FLASH ? A masz to w rozdziale np o multipleksowaniu wyświetlaczy LED ...

poza tym gdzie ja napisałem żebyś ty pisał tą funkcję uart_puts_P() ?

_________________
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: 5 sie 2014, o 15:25 
Offline
Użytkownik

Dołączył(a): 09 cze 2014
Posty: 92
Pomógł: 0

Nie wiem już się pogubiłem jeszcze raz obejrzę poradnik



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2014, o 15:29 
Offline
Moderator
Avatar użytkownika

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

sebbek napisał(a):
Nie wiem już się pogubiłem jeszcze raz obejrzę poradnik


A ja ci proponuję weź się za książkę i poczytaj o podstawach bo tak to daleko nie zajedziesz :( albo będzie to trwało bardzo długo ... jak widać, bo próbujesz robić coś na zasadzie skopiowania a nie zrozumienia i stąd problemy masz

_________________
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 sie 2014, o 10:26 
Offline
Użytkownik

Dołączył(a): 09 cze 2014
Posty: 92
Pomógł: 0

Zostawiłem ten gotowy projekt i wszystko piszę po kolei z poradnikiem i program się kompiluje ale na terminalu wyświetla się 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.


a main.c jest taki:

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 sie 2014, o 10:46 
Offline
Moderator
Avatar użytkownika

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

No i tu znowu się kłania wiedza z książki, czyli

1. ustawienia baudrate
2. ustawienia fusebitów
3. ustawienia terminala

itp itd ... jak widzisz nie bez kozery wciąż powtarzam, że to są poradniki do książek .... i ciężko z samych poradników nauczyć się programować, a ty tak właśnie próbujesz i wciąż masz kłopoty z podstawami

_________________
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: 8 lip 2018, o 14:03 
Offline
Nowy

Dołączył(a): 10 kwi 2018
Posty: 2
Pomógł: 0

Jest jeszcze inny nie poruszony aspekt użycia tej funkcji:
pgm_read_byte () działa poprawnie na Atmega 8 /32 ale np. dla Atmega 328P, czy 2560 to już chyba nie. cytuję za avr-libc-user-manual-1.7.1.pdf (tłumaczenie maszynowe ):
"5 Dane w Przestrzeni programu 27
5 Dane w Przestrzeni programu
5.1 Wprowadzenie
Czy masz jakieś stałe dane i masz za mało miejsca, aby je przechowywać? Wiele AVRów mają ograniczoną ilość pamięci RAM do przechowywania danych, ale mogą mieć więcej pamięci Flash dostępny. AVR to procesor architektury Harvard, w którym Flash jest używany program, pamięć RAM jest używana dla danych i każda ma osobne przestrzenie adresowe. To jest wyzwanie, aby uzyskać stałe dane, które mają być przechowywane w Przestrzeni programu, i aby je odzyskać dane do wykorzystania w aplikacji AVR.
Problem pogłębia fakt, że język C nie został zaprojektowany dla Har-Architektury vard, zostały zaprojektowane dla architektury Von Neumann, gdzie kod i dane istnieją w tej samej przestrzeni adresowej. Oznacza to, że każdy kompilator architektury Harvard procesor, taki jak AVR, musi wykorzystywać inne środki do działania z oddzielnym adresem spacje.
Niektóre kompilatory używają niestandardowych słów kluczowych w języku C lub rozszerzają standard składnia w sposób niestandardowy. Zestaw narzędzi AVR przyjmuje inne podejście.
GCC ma specjalne słowo kluczowe,
__atrybut__ który służy do dołączania różnych hołd dla rzeczy takich jak deklaracje funkcji, zmienne i typy. To słowo kluczowe to a następnie specyfikacja atrybutu w podwójnych nawiasach. W AVR GCC istnieje specjalny atrybut o nazwie progmem . Ten atrybut jest używany w deklaracjach danych i mówi kompilator do umieszczenia danych w pamięci programu (Flash).
AVR-Libc zapewnia proste makro PROGMEM który jest zdefiniowany jako składnia atrybutu GCC z progmem atrybut. To makro zostało stworzone dla wygody do końca użytkownik, jak zobaczymy poniżej.

PROGMEM makro jest zdefiniowane w <avr / pgmspace.h>plik nagłówkowy systemu.
Trudno jest zmodyfikować GCC, aby utworzyć nowe rozszerzenia składni języka C, więc stead, avr-libc stworzył makra do pobierania danych z Przestrzeni programu. Te makra znajdują się również w<avr / pgmspace.h>plik nagłówkowy systemu.
5.2 A Note On const
Wielu użytkowników wpada na pomysł użycia słowa kluczowego C const jako środek deklarowania dane znajdujące się w Przestrzeni programu. Robienie tego byłoby nadużyciem zamierzonego znaczenia
const
służy do informowania kompilatora, że ​​dane mają być "tylko do odczytu". Jest używany do pomocy ułatwiają kompilatorowi dokonywanie pewnych transformacji lub pomagają kompilatorowi sprawdź nieprawidłowe użycie tych zmiennych.
Na przykład słowo kluczowe const jest powszechnie używane w wielu funkcjach jako modyfikator typ parametru. To mówi kompilatorowi, że funkcja użyje tylko tego parametru jako tylko do odczytu i nie zmieni zawartości zmiennej parametru.
Wygenerowano 16 marca 2011 22:43:22 dla avr-libc przez Doxygen
Tłumacz Google – informacjeSpołeczność "

Z powyższego sądzę, że umieszczanie tablic w pamięci FLASH nowszych AVR-ów jest błędem. A wprost to:
Najprościej wówczas funkcję zmodyfikować na:
void uart_puts_P(const char *s)
{
register char c;
while ((c = *s++)) uart_putc(c);}
a zmienne z Flash dać do ram : czyli z uint8_t tablica[] PROGMEM = {}; na uint8_t tablica[] ={};
i po kłopocie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2018, o 14:55 
Offline
Moderator
Avatar użytkownika

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

pino_kos napisał(a):
pgm_read_byte () działa poprawnie na Atmega 8 /32 ale np. dla Atmega 328P, czy 2560 to już chyba nie.

Ja cię przepraszam - no ale gorszej (no przepraszam za określenie) GŁUPOTY to dawno nie słyszałem ... żebyś to chociaż napisał w formie pytania, że czegoś nie rozumiesz - ale nie ... ty jak widzę wyjaśniasz innym i to opowiadając mega bzdury , że aż strach

szczególnie końcówka:

pino_kos napisał(a):
Z powyższego sądzę, że umieszczanie tablic w pamięci FLASH nowszych AVR-ów jest błędem. A wprost to:
Najprościej wówczas funkcję zmodyfikować na:


a to już przekracza wszelkie granice ;) nawet programistycznej przyzwoitości ;)
pino_kos napisał(a):
a zmienne z Flash dać do ram : czyli z uint8_t tablica[] PROGMEM = {}; na uint8_t tablica[] ={};
i po kłopocie


Zatem krótko mówiąc - CHŁOPIE weź się w garść, poczytaj gdzieś troszkę bo już nawet nie będę ci proponował Bluebooka (z którego natychmiast dowiedziałbyś się co i jak się robi) ale zaraz zaczniesz wciskać, że ja ci wciskam Bluebooka ;)

więc weź i poczytaj chociaż takie PODSTAWY PODSTAW, jak zbudowane są procki AVR, jaką mają strukturę każdego rodzaju swojej pamięci, i jakie są zasady dostępu do każdej z tych pamięci ....

Tylko błagam, nie wklejaj tu tłumaczeń z google.translate bo widać, że to prowadzi cię na manowce

NIE MA NAJMNIEJSZEGO problemu w tym kodzie ze stałymi w pamięci FLASH ;) a to, że ty nie wiesz jak to się robi - i to wcale nie musi budzić zdziwienia bo każdy kiedyś zaczyna i na początku może nie wiedzieć czegoś tam - ale już zdziwienie może budzić i budzi to - co tu wypisujesz

Jako ćwiczenie zadam ci pewne zadanie - ODPAL ten kod wg twojego sposobu w procku ATtiny2313 ;) OK ? bo ja odpalę ze stałymi we FLASH a ty zrób to ze stałymi w RAM (żeby było jak to określiłeś "po kłopocie") Jeśli zrobisz to ćwiczenie to zrozumiesz jakie BZDURY opowiadałeś ok ?

A jak czegoś nie będziesz wiedział to na drugi raz po prostu ZAPYTAJ ok ?

_________________
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: 26 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 11 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