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



Teraz jest 22 lut 2026, o 14:36


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 5 kwi 2013, o 05:18 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 6
Lokalizacja: Piła
Pomógł: 1

Jest to mój pierwszy wątek dlatego witam wszystkich :)

Na początek wstawiam część kodu, która działa ale nie do końca tak jak bym chciał
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Ma ktoś pomysł jak przerobić ten kod, żeby napisy były podstawiane do jednej zmiennej tablicowej ( globalnej, zdefiniowanej w pliku.h) , która byłaby wyświetlana na LCD. Coś w takim stylu:

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

Ten sposób mi nie działa. Jeśli by zadziało, mógłbym pozbyć się tej nieszczęsnej zmiennej pomocniczej st, którą później porównuję, żeby znowu wyświetlić napis na głównym pulpicie. To jest część wyboru menu. Odnośnie zmiennej st proszę nie pisać, że jest niepotrzebna, że mógłbym porównywać zmienną stat. Właśnie to zauważyłem :P Aczkolwiek nadal chciałbym to przerobić na takiej zasadzie jaką pokazałem. Chyba, że znajdą się jeszcze lepsze rozwiązania :D

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2013, o 08:00 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 04 kwi 2013
Posty: 15
Lokalizacja: Legionowo
Pomógł: 1

Użyj wskaźników np.

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łę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2013, o 08:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sty 2013
Posty: 328
Lokalizacja: Rzgów k. Łodzi
Pomógł: 11

A może zrób to torchę bardziej ekonomicznie jeśli chodzi o RAM ? ;) Zrób sobie 4 tablice
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I po prostu w pętli switch zmieniać adres we wskaźniku i przekazywać go do funkcji wyświetlającej string z pamięci FLASH. Czyli tak.

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


Takie rozwiązanie jest dużo bardziej oszczędne w pamięć RAM, ponieważ w AVRkach nie ma jej tak dużo. Wiele osób może twierdzić że to przesada, moim zdaniem jednak trzeba ćwiczyć sobie takie pisanie kodu ;)

Aa, i zamiast używać takich dziwnych nazw jak np. unsigned char, po prostu używaj sobie znaczne bardziej logicznych typów, np. uint8_t. To jest typ bez znaku. A jeżeli bym chciał sobie zrobić ze znakiem ? No problem, int8_t ;)


Autor postu otrzymał pochwałę

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2013, o 09:25 
Offline
Moderator
Avatar użytkownika

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

Michal21 napisał(a):
Jest to mój pierwszy wątek dlatego witam wszystkich :)

Na początek wstawiam część kodu, która działa ale nie do końca tak jak bym chciał
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Po pierwsze to podpowiem, że w takim kodzie zdecydowanie napisałbym tego switcha tak, spójrz:

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


a stosując tablicę dwuwymiarową można w ogóle pozbyć się switcha ;)

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



oczywiście nie zapomnij - że to tablica w RAM więc jak radził wyżej kolega warto ją docelowo jeszcze przenieść do FLASH żeby nie tracić RAM ale i FLASH niepotrzebnie bo przecież w tym przypadku wyżej też tam pójdą te teksty.

------------------------ [ Dodano po: 4 minutach ]

Michal21 napisał(a):
Ma ktoś pomysł jak przerobić ten kod, żeby napisy były podstawiane do jednej zmiennej tablicowej ( globalnej, zdefiniowanej w pliku.h) , :


ale TUTAJ UWAGA! ... bo popełniasz jakiś BARDZO OGROMNY błąd dlatego zwracam twoją uwagę.

w pliku *.h pamiętaj NIGDY nie tworzy DEFINICJI ZMIENNYCH .... NIGDY ! to poważny błąd podczas pisania kodu w C. W plikach nagłówkowych *.h tworzymy TYLKO i WYŁĄCZNIE DEKLARACJE zmiennych i funkcji.

Masz tę książkę może ?

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

jest w niej to BARDZO przejrzyście i z przykładami opisane jak podchodzić do tworzenia i podziału plików projektu w C - to ważne.

------------------------ [ Dodano po: 8 minutach ]

i na koniec - takiego zapisu w kodzie programu w C

tab1[]="Ksiazka";

nigdy nie zrobisz bo to nie C++ i tu nie ma stringów :( .... dlatego też jeszcze raz polecę wspomnianą wyżej książkę, bo opisuję w niej od podstaw nie tylko tablice w C ale także zasady działania z nimi, kopiowania, przypisywania wartości i to nie ważne czy w RAM czy we FLASH - a widzę, że na razie masz jeszcze z tym poważne problemy....

aby to zrobić w kodzie można użyć np wbudowanych funkcji do obsługi C-Stringów jak np strcpy() czy też do pamięci np memcpy(), przykład? proszę

Kod:
memcpy_P( &tab1[0], PSTR("książka), 7);


bardzo mało miarodajny ten przykład no ale jak mówię o wiele więcej miejsca temu poświęciłem w książce.


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: 5 kwi 2013, o 23:10 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 6
Lokalizacja: Piła
Pomógł: 1

Dziękuję za tak liczne odpowiedzi :D :D Każda dużo wnosi i aż mi głupio, że o wskaźniku nie pomyślałem :P :P Musze się zastanowić i przetrawić co mi najlepiej będzie pasowało. Oszczędność Ram ważna sprawa tym bardziej, że suma summarum będzie to nie taki mały program :D :D
Odnośnie uwag Mirka:

mirekk36 napisał(a):
w pliku *.h pamiętaj NIGDY nie tworzy DEFINICJI ZMIENNYCH .... NIGDY ! to poważny błąd podczas pisania kodu w C. W plikach nagłówkowych *.h tworzymy TYLKO i WYŁĄCZNIE DEKLARACJE zmiennych i funkcji.


Mam tę książkę i widziałem rozdział specjalnie temu poświęcony :P Po prostu przez nieuwagę użyłem złego określenia :oops:
Na usprawiedliwienie mam, że po całej nocy prób programowania takie rzeczy są możliwe :P :P

mirekk36 napisał(a):
nigdy nie zrobisz bo to nie C++ i tu nie ma stringów .... dlatego też jeszcze raz polecę wspomnianą wyżej książkę, bo opisuję w niej od podstaw nie tylko tablice w C ale także zasady działania z nimi, kopiowania, przypisywania wartości i to nie ważne czy w RAM czy we FLASH - a widzę, że na razie masz jeszcze z tym poważne problemy....


Yyy trafna uwaga.. uczę się C od kilku miesięcy i ten rozdział mam słabo opanowany.. Nadrobię :D :D

_________________
sig off ;(



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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