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



Teraz jest 17 lis 2024, o 06:28


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 
Autor Wiadomość
PostNapisane: 15 sie 2012, o 20:10 
Offline
Moderator
Avatar użytkownika

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

Dzisiaj jestem na weselu wiec dopiero jutro bede dostepny, teraz pisze z telefonu ;)

_________________
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: 15 sie 2012, o 23:06 
Offline
Moderator
Avatar użytkownika

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

Już PO, więc jestem ;)

Antystatyczny napisał(a):
Poległem na void (*push_proc)(void). Błagam o jakieś bardziej łopatologiczne wyjasnienie (choć w książce też jest chyba łopatologicznie, czli dla ludu)


to jest wstęp do funkcji typu CALLBACK, i w zasadzie najważniejszych mechanizmów, które chcę i omawiam szczególnie w drugiej książce. Bez tego nie byłoby super programowania w C ... więc warto to zaskorzyć...

starałem się w książce wytłumaczyć na czym to polega - więc ew odnieś się do czegoś czego nie rozumiesz z mojego tłumaczenia. Ja tylko przypomnę, że:

do tej funkcji możesz przekazać wskaźniki (UWAGA!) do dwóch WŁASNYCH funkcji. Czyli daję ci swoją funkcję SuperDebounce() .... a jednocześnie daję ci MOŻLIWOŚĆ , że to nie ja za ciebie określę z góry co zrobi funckja SuperDebounce() w momencie wciśnięcia klawisza czy też jego dłuższego przytrzymania. Ja mówię tak - NAPISZ sam sobie swoje własne dwie dowolne funkcje - w których podejmiesz swoje akcje na te zdarzenia wciśnięcia i przytrzymania .... a moja funkcja SuperDebounce() wywoła tylko te twoje dwie funkcje w odpowiednich momentach gdy przyjdzie na to czas.

I teraz tak, piszesz sobie np własną funkcję

Kod:
void zapal_led1(void) {
  PORTA |= (1<<PA1);
}


bo chcesz np mieć że po krótkim naciśnięciu klawisza zapali się ta dioda ;) ....

oraz drugą, która będzie migać kolejną diodą jeśli ten sam klawisz wdusisz na dłużej:

Kod:
void migaj_led2(void) {
  PORTA ^= (1<<PA2);
}



no to teraz poza podaniem pozostałych parametrów tej funkcji - musisz jeszcze przekazać wskaźnik do swojej własnej funkcji zapal_led1()..... oraz migaj_led2()

no to bach przekazujesz :

Kod:
SuperDebounce( ....początkowe argumenty... , zapal_led1, migaj_led2 );


jak widzisz same nazwy funkcji są od razu wskaźnikiem na te funkcje..... a to o co pytasz to były deklaracje wskaźników na funkcje w jej argumentach void (*push_proc)(void)

tak to jest wskaźnik na funkcję

Kod:
void (*push_proc)(void)


, który to wskaźnik na dodatek my używamy jako najzwyklejszy kolejny argument do funkcji SuperDebounce)

tylko najpierw trzeba zrozumieć ideę działania tego mechanizmu - i mam nadzieję że chociaż troszkę to jeszcze tu doprecyzowałem i się rozjaśniło coś. Więc jak jeszcze raz przeczytasz cały rozdział (ale też cofniesz się i przeczytasz o wskaźnikach do funkcji) .... to sporo się wyjaśni

ale jeśli nie tu wal śmiało i pytaj dalej.

_________________
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: 16 sie 2012, o 19:37 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Ok, teoretycznie już to rozumiem. Musze jednak ponownie wrócić do wskaźników. Czy wskaźnik na funkcję wskazuje adres pierwszego bajtu ciała funkcji, czy może wskazuje na adres wartości, którą zwraca funkcja( o ile zwraca)?


O bardzo dobre pytanie, ale ze wskaźnikami na funkcje jest całkowicie inaczej niż ze wskaźnikami na inne obiekty ;)

wskaźnik na funkcję to po prostu adres tej funkcji gdzieś w pamięci FLASH. Czyli dokładne miejsce gdzie ona jest umiejscowiona. Taki wskaźnik nie może wskazywać na jakiś tam adres wartości funkcji czy jej rezultatu - bo przecież tego rezultatu nie ma ;) .... To tylko adres tej funkcji, jej startu....

dzięki czemu dalej w kodzie można się posługiwać tym wskaźnikiem dokładnie tak samo jak oryginalną funkcją na którą on wskazuje ;) I TYLKO DO TEGO służy taki wskaźnik - TYLKO.

Bo jak widzisz dzięki temu można takie funkcje w C przekazywać jako argumenty do innych funkcji - fajne - prawda ? ;)

_________________
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: 16 sie 2012, o 20:46 
Offline
Moderator
Avatar użytkownika

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

Ja wątpię czy będę w stanie opisać lepiej działanie tej funkcji niż w książce. Zresztą zobacz ile tam napisałem, a tu co ? w kilku zdaniach mam to streścić ? ;) .... sorki ale nie umiem tak

w skrócie rzecz biorąc patrz na tą funkcję w ten sposób, że za każdym jej wywołaniem a jest wywoływana w każdym obiegu pętli głównej program przelatuje przez jej ciało jak woda przez durszlak ;) czyli ona działa w sposób nieblokujący ;)

i za każdym obiegiem IF'y na podstawie wartości timerów programowych sprawdzają po prostu w jakim stanie wciśnięcia klawisza jesteśmy - musisz sobie to skorelować w głowie z tym rysunkiem który pokazałem w książce

masz tam poza tym wyraźne miejsca oznaczone typami wyliczeniowymi - enum

od tego momentu

*key_state = debounce;

zaczyna się działanie funkcji ;) tzn gdy nciśniesz klawisz i ona to zobaczy to inicjalizowany jest timer i zaczyna się jej TYKANIE i sprawdzanie w kolejnych IF'ach czy i jak coś się dalej dzieje

_________________
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: 16 sie 2012, o 21:31 
Offline
Moderator
Avatar użytkownika

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

nie wiem za bardzo jak miałby wyglądać ten twój kod z modulo w przerwaniu, tzn nie umiem sobie tego wyobrazić na podstawie opisu więc tu nie pomogę....

a odnośnie posiadania 20 lat mniej ;) to każdemu by się przydało - mi też .... o urlopie, wakacjach i braku innych obowiązków już nie wspomnę. Więc nie narzekaj na wiek ;) bo to akurat najmniejszy problem - gorzej z tym wszystkim dookoła - skąd ja to znam

_________________
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: 16 sie 2012, o 22:42 
Offline
Moderator
Avatar użytkownika

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

Ok teraz widzę kod to mogę coś powiedzieć

jest to o tyle nieeleganckie rozwiązanie, że wplatasz do fajnie odizolowanej funkcji w przerwaniu jakąś tam zmienną globalną powiązaną z całkiem czymś innym. W związku z tym program przestaje być modułowy i robi się MISZ_MASZ

owszem działa - ale spróbuj pomyśleć inaczej. Na jakiej zasadzie powiązane są z przerwaniem cyfry ? Do tej pory powiedzmy że napisałeś DLA KOGOŚ bibliotekę do multipleksowania (i zawsze tak myśl - nawet jak robisz dla siebie) ;) .... powiedziałeś mu o tych zmiennych i funkcji init() i już - człowiek sobie korzysta z biblioteki. A teraz ? A teraz musisz temu komuś tłumaczyć - to jak chcesz żeby migał ci dwukropek to weź rozbebesz procedurę przerwania i dostaw tam obsługę własnej zmiennej .... niedobrze :(

czy nie lepiej wprowadzić jeszcze jednej zmiennej o nazwie np "dwukropek" ? I jak będzie = 0 to ma być zgaszony a jak = 1 to zapalony. Od razu kod przerwania się upraszcza a jednocześnie komuś komu dajesz bibliotekę mówisz - OK - masz tu dodatkową zmienną "dwukropek". Jak wstawisz do niej 0 to będzie zgaszony a jak 1 to zapalony. I niech ten ktoś bawi się tym modulo u siebie w pętli głównej gdzie i tak obsługuje zegarek i ma kupę czasu a nie to co w przerwaniu - więc kod mógłby wyglądać np tak:

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 to co dałeś po tych else (a czego wyżej nie widzisz jest niepotrzebne i wręcz to nieporozumienie:

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


no i teraz możesz już sobie tam gdzie ci się sekundy zmieniają robić

Kod:
dwukropek = sekunda % 2;

_________________
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: 17 sie 2012, o 08:01 
Offline
Moderator
Avatar użytkownika

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

tzn poczekaj dzisiaj rano widzę, że źle podpowiedziałem że ma być bez tego else ..... ale wtedy by się cyfra nie wyświetliła bez dwukropka a chodziło mi tylko o to nieszczęsne w środku maskowanie z & - więc jeszcze prostszą wersję przedstawiam, zamiast tego :

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



zrób tylko tak:

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


widzisz ? użyłem tu operatora warunkowego ;)

? :

i wtedy rzeczywiście else jest niepotrzebny ani ten IF w środku. Czyli żeby już był komplet to całe przerwanie tak jak niżej:

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: 17 sie 2012, o 21:10 
Offline
Moderator
Avatar użytkownika

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

A po co chcesz definiować w dwóch plikach te same stałe za pomocą #define i potem inkludować dwa takie pliki? Przecież sam sobie tym pytaniem odpowiadasz że tak się nie robi..... bo się nie robi

raz tylko zdefiniuj sobie makra i stałe w jednym pliku i potem go dołączaj tam gdzie trzeba

_________________
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: 17 sie 2012, o 21:28 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Budujesz sobie biblioteki, które zawierają pliki nagłówkowe. Nabierasz nawyku, że katody wyświetlacza nazywasz K1 - K8. Zapominasz o tym i zaczynasz budować bibliotekę do obsługi klawiszy, a w niej klawisze nazwiesz K1 - K8. Chodzi mi o zasięg takich makr, czy się nie pogryzą w jakimś pliku *.c.


A no widzisz ;) teraz lepiej opisałeś mi problem i zaskoczyłem ;)

Pewnie że się pogryzą .... to chyba oczywiste ..... To już problem programisty. Tyle że programista powinien sam wiedzieć, że nie można używać aż takich skrótów myślowych ;) np K1 dla wspólnej katody i K1 dla klawisza ;)

ja np nigdy bym tak nie napisał - za to np zrobiłbym tak i to bez żadnego zastanawiania się o pogryzienie (zresztą popatrz na przykłady jakie masz w książce)

ANODY1 a u ciebie np KATODY1 mogłoby być

KEY1 a nie tam jakiś K1 - co mi po roku powie nazwa K1 ???? jak zajrzę do kodu - pomyślałeś o tym ?

Ale nazwa KEY1 już coś powie i zasugeruje że chodzi o jakąś stałą czy makro związane z klawiszem

Reasumując dobra praktyka programowania to nadawanie rozsądnych nazw a nie skrótów bo w TRY-MIGA ci się wszystko poplącze na bieżąco przy pisaniu, programu - ale jeszcze raz powiem, zawsze sobie pomyśl tworząc nazwę - a co będzie gdy za rok albo dwa albo nawet 10 będziesz musiał wrócić do kodu i coś poprawiać ? ;) to od razu przejdzie ci dreszcz po plecach do wymyślania taki skrótów

K1
K2
itp ;)

_________________
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: 29 sie 2012, o 19:04 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Mam kolejne pytanie... :oops:

Rozumiem już jak działa wskaźnik na funkcję, ale... Załóżmy, że chcę wywołać jakąś funkcję, do której muszę podać jakiś/jakikolwiek parametr. W przypadku jawnego wywołania np. dodawanie(a,b) po prostu wpisuję a i b pomiędzy nawiasy. Jak to zrobić, by przekazać argumenty do tej funkcji, gdy wywołuję ją przez wskaźnik?


OOOO ! .... jak miło że o takie rzeczy pytasz - widać idziesz jak przecinak i korzystasz z przekazanej wiedzy w książce ;) ... SUPER...

ale jeśli pozwolisz to odpowiem może jutro bo dzisiaj lecę już do domciu i chyba nie będę na kompie tym bardziej że jestem już po 3 piwku u wszystko mi się jakoś kręci ;)

_________________
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: 29 sie 2012, o 22:07 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Mam kolejne pytanie... :oops:

Rozumiem już jak działa wskaźnik na funkcję, ale... Załóżmy, że chcę wywołać jakąś funkcję, do której muszę podać jakiś/jakikolwiek parametr. W przypadku jawnego wywołania np. dodawanie(a,b) po prostu wpisuję a i b pomiędzy nawiasy. Jak to zrobić, by przekazać argumenty do tej funkcji, gdy wywołuję ją przez wskaźnik?


dobra próbuję dzisiaj bo sam kiedyś miałem taki sam dylemat ;)

niestety nie uda ci się przekazując wskaźnik do funkcji jeszcze przy okazji przekazać parametrów jako argumentów tej funkcji ;)

ale czy to znaczy że nie ma innego wyjścia ? jest i to kilka

najmniej eleganckie ale zawsze jakby nic innego nie dało się wymyślić ;) .... to przekazywać argumenty poprzez zmienne globalne - no ale pewnie na tym etapie doświadczenia sam jak to usłyszysz to aż ci ciarki przejdą po plecach ;)

inne rozwiązanie - normalne w tym przypadku to, przekazać te argumenty jako kolejne argumenty do funkcji nadrzędnej i potem wewnątrz niej - wywołanie już wskaźnika razem z nimi, poniżej mamy funkcję z jednym argumentem, którą przekażemy jako wskaźnik do innej: (nazwy jakieś tam zmyślone)

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


teraz funkcja w której użyjemy wskaźnika do wywołania później powyższej funkcji z jednym argumentem:

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


zobacz, pierwszy argument "dane" to jakiś normalny argument do funkcji o nazwie master(), ale już trzeci jej argument jest tylko argumentem sztucznie przekazanym i wykorzystanym w jej wnętrzu tylko do wywołania callbacka ;) czyli fwsk(a). Chociaż oczywiście argument o nazwie 'a' mógłby być też jeszcze po drodze do czegoś i w funkcji master(wykorzystany)

a poniżej wywołanie funkcji master() w kodzie - przykład ze stałymi

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


może to wygląda troszkę na skomplikowane ale uwierz mi pewnie tak jak ja szybko dojdziesz do tego że takich potrzeb później będziesz miał niewiele albo wcale

_________________
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: 30 sie 2012, o 07:55 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
I wtedy wewnątrz funkcji master miałbym przykładowo wywołanie callbacka z parametrem podanym jako kolejny argument, czyli w tym przypadku 8, tak?

Tak.

Antystatyczny napisał(a):
Jeśli dobrze to rozumiem, to warto dbać o to, by funkcje, które będą callbackami, nie były takimi, do których podaje się parametry, ewentualnie takimi, które zwracają jakąś wartość.


Nie, nie - dlaczego o to dbać ? .... raczej chodziło mi o to, że rzadko będzie się trafiała sytuacja w życiu żeby chcieć akurat wywoływać takiego callbacka poprzez argument funkcji i jednocześnie z parametrami.

Antystatyczny napisał(a):
Narodziło mi się jeszcze jedno pytanie: Czy wskaźnik na funkcję typu void(void) może de facto wskazywać np. na funkcję typu char(void)? Chodzi mi o to czy kompilator zrobi cast do char, czy wywali błąd.


No sam czujesz że coś nie tak, kompilator sam nic nie zrobi - ty musiałbyś robić a to już byłby MIS-MASZ - tu trzeba zachować już ŻELAZNY porządek przy takich zabawach callbackami bo w kilka sekund program popłynie przy jakichś dziwnych rzutowaniach tutaj.

_________________
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: 30 sie 2012, o 21:23 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Słuchaj a czasami nie powinno być tak:

Kod:
bufor[] = "Buffer overflow!";


Bo zmienna bufor jest typu zdaje się unsigned char a ty mi się wydaje traktujesz ją jako string....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2012, o 21:31 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Mi chodzi o to że do zmiennej tablicowej typu unsigned char pakujesz stringa pod zerowy index i to mnie mocno poraziło... i teraz jeszcze widzę że ja się zagapiłem bo zmienna bufor jest deklarowana rozmiarem który jest definicją i nie można zrobić tak ja ci pisałem...

Mój błąd :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2012, o 21:53 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

No to trzeba utworzyć jakąś zmienną tablicową np. buf_2[] i od razu przypisać do niej stringa

Kod:
char buf_2[] = "String";


i wtedy dajesz ją do lcd żeby wyświetlił zawartość

Kod:
lcd_pisz(buf_2);


O to tobie chodzi?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2012, o 05:39 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Nie. Odbieram string i lokuję go w lokalnej zmiennej tablicowej. Na sam koniec funkcji chcę ten cały string zawarty w lokalnej zmiennej tablicowej przekopiować w całości do globalnej zmiennej tablicowej.


No to wydaje mi się, że już w jakimś wątku pisaliśmy, że w C nie ma takich operacji jak w Bascomie i nie można pod żadnym pozorem robić czegoś takiego:

tablica[0] = "jakis tekst";


toż to jest nieporozumienie - a widziałem gdzieś wyżej tu w twoim kodzie takie coś dziwnego. tablica[0] to jest jedna pojedyncza komórka pamięci RAM, tak jakby zmienna typu char.

ale jeśli chcesz tak jak piszesz wyżej przekopiować string zawarty w lokalnej zmiennej tablicowej (przy okazji babol, nie twórz lokalnych zmiennych tablicowych - TYLKO globalne), do globalnej zmiennej tablicowej to trzeba najzwyczajniej w świecie przekopiować kawałek RAM, można użyć do tego np wbudowanej funkcji memcpy(), np tak:

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


tak się to robi, chociaż jak poczytać

C:\WinAVR-20100110\doc\avr-libc\avr-libc-user-manual.pdf

to jest jeszcze wiele innych wbudowanych funkcji do operacji na stringach, ich kopiowania, łączenia itp ... ja akurat jakoś upodobałem sobie tę funkcję do kopiowania fragmentów RAM do RAM

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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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