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



Teraz jest 28 sty 2026, o 23:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 26 mar 2018, o 20:28 
Offline
Moderator
Avatar użytkownika

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

zubik napisał(a):
To o co pytam według mnie jest nielogiczne

a dlaczego niby nielogiczne ?

zubik napisał(a):
i nie wykonalne ale

nie dość, że wykonalne to jeszcze często stosowane w C ;)


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: 26 mar 2018, o 22:44 
Offline
Moderator
Avatar użytkownika

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

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: 31 mar 2018, o 14:37 
Offline
Moderator
Avatar użytkownika

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

jak ja widzę, że ktoś robi TYPEDEF'a nie dość że w pliku *.c a jeszcze do tego wewnątrz ciała jakiejś funkcji to mnie normalnie w kościach aż coś gruchocze a kręgosłup zwija się jak struna ... brrrrr ;)

gdzie tu sens? gdzie logika - robić typedefa w funkcji żeby po chwili powoływać zmienną tego typu - zamiast jak już to zdefiniować normalną strukturę ... tyle że wtedy to już w żaden sposób nie uwidocznisz tego typu struktury na zewnątrz funkcji

Panie ... panie ... typedef w pliku *.h

------------------------ [ Dodano po: 2 minutach ]

albo jeśli nie w *.h to przynajmniej na górze pliku *.c poza ciałami funkcji

_________________
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: 31 mar 2018, o 14:51 
Offline
Moderator
Avatar użytkownika

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

zubik napisał(a):
void przelicz_wynik(void * wsk, uint16_t wspolczynnik){         //przelicza wartosci z czujnikow na centymetry lub wartosc zasuwy na procenty
 
 *wsk = 4;


a co ty tutaj chcesz zrobić ?

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


i od tej pory masz myadc do którego możesz zapisywać coś ale z użyciem pól struktury

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: 31 mar 2018, o 15:14 
Offline
Moderator
Avatar użytkownika

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

zubik napisał(a):
zależnie od wybranego pola struktury ma albo obliczać stan wody z czujników albo procent otwarcia zasuwy.

ale nie o to pytam i to jest jakby zupełnie nieistotne z punktu widzenia omawiania problemu programistycznego ...

*wsk = 4;

podczas gdy *wsk jest typu void czyli nieokreślony - jest czystą abstrakcją

dlatego pokazałem ci jak można podejść - wyżej ... czyli przypisujesz wskaźnik typu void do innego wskaźnika, który już posiada typ jakiejś struktury np tej twojej TADC - dzięki czemu już po chwili możesz odwoływać się poprzez przekazany wsk jako argument funkcji ponieważ z void'a zrobiłeś z niego już typ np TADC

_________________
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: 31 mar 2018, o 15:42 
Offline
Moderator
Avatar użytkownika

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

można i adres pola w czym problem ? ale to po co ci typ void wskaźnika w argumencie ?


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: 31 mar 2018, o 16:48 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Skoro do funkcji chcesz przekazać wskaźnik do jednego z elementów tablicy filtr, która to tablica jest typu int8_t:
zubik napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to deklaracja takiej funkcji powinna wyglądać tak:
zubik napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

a NIE tak:
zubik napisał(a):
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: 31 mar 2018, o 17:10 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

No to skoro musisz przekazać wskaźnik na całą strukturę i deklarujesz funkcję:
zubik napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to później przekaż do niej faktycznie wskaźnik na całą strukturę, a nie na element tablicy:
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: 31 mar 2018, o 18:05 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Moim zdaniem nie potrzebujesz void *, ani żadnego rzutowania i kombinowania, tylko musisz sprecyzować co funkcja przelicz() konkretnie ma robić, do jakich danych ma mieć dostęp i jakiego rodzaju dostęp (zapis/odczyt), gdzie i w jaki sposób ma być wywoływana, bo tak to tylko "zgaduj zgadula"...

Sądząc po opisie funkcji ("//przelicza wartosci z czujnikow na centymetry lub wartosc zasuwy na procenty") mam wrażenie, że próbujesz zastosować przeciążanie funkcji, które w języku C jest niedostępne. W C każda funkcja musi mieć inną nazwę, jeśli przyjmuje inne parametry i wykonuje inne zadania. Takie kombinowanie z wykorzystaniem jednej funkcji do wielu zadań nie ma w C większego sensu, bo komplikuje tylko niepotrzebnie zarówno samo wywołanie funkcji, jak i sam kod w ciele funkcji.

To co zrobiłeś można zrobić równie dobrze tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


Po prostu trzeba wiedzieć dobrze, co się chce osiągnąć. Większość da się osiągnąć (i nawet trzeba, aby zachować kontrolę typów) bez void* i rzutowania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 mar 2018, o 18:40 
Offline
Moderator
Avatar użytkownika

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

andrews napisał(a):
Moim zdaniem nie potrzebujesz void *, ani żadnego rzutowania i kombinowania,

Też mi się tak wydaje - bo na początku myślałem że kolega zubik chce przesyłać np do tej samej funkcji różne struktury tzn wskaźniki do nich ;) wtedy typ void by się przydał ... ale jeśli mają to być konkretne wartości czyli pola struktur to po co void ?

Jeśli zaś potrzebujesz w jednej funkcji dobierać się do różnych pól struktury to też wystarczy ot jawny wskaźnik na konkretny typ - no ale tu już ładnie przykłady podał kolega andrews wyżej

_________________
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: 31 mar 2018, o 19:28 
Offline
Moderator
Avatar użytkownika

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

zubik napisał(a):
tylko jedna zmienna ze struktury będzie mogła być zmieniana przez użytkownika, zaś te z tablicy są tylko do odczytu bo przecież nie możemy zmienić tego co przychodzi z czujników,

No ale jeśli tablicę masz w strukturze to czemu się upierasz aby nie przesyłać wskaźnika do struktury i wtedy masz PEŁNY DOSTĘP do każdego poka struktury w jednej funkcji ... niezależnie czy masz tam pola tylko do odczytu czy do zapisu i odczytu ?

Pomysł na trzymanie danych w strukturze zawsze jest i będzie bardzo dobrym pomysłem ... więc idziesz dobrą drogą .... tylko no właśnie - coś nie do końca potrafisz wyjaśnić co chcesz zrobić ...

zamiast więc pisać o słupach wody, procentach i temperaturach które musisz tam przekazywać ... podaj lepiej przykład

1. swojego typu struktury
2. do jakiej funkcji chcesz ją przekazywać żeby odczytywać z niej niektóre pola a niektóre zapisywać

a pomożemy ci w tym jak programowo do tego podejść ...

przy czym nie musi to być zaraz jakaś mega wielka konstrukcja ... zobacz jeszcze raz mały przykład


jakiś plik *.h

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



jakiś plik *.c

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


czy o to tobie mniej więcej chodzi ? ;)

------------------------ [ Dodano po: 2 minutach ]

zubik napisał(a):
Szczerze mówiąc to czasem aż mi głupio że wypytuję o rzeczy które Mirek przedstawił tutaj na forum,

ale co ty opowiadasz .... głupio to może być jak czegoś nie możesz zaskoczyć i nie skorzystasz z okazji żeby dopytać ;) bo dopiero jak się zaczyna samemu w kodzie stosować pewne techniki - to dopiero wtedy zaczyna porządnie do głowy to wchodzić ... Nie obejrzysz się a za kilka miesięcy przy takim treningu będziesz się uśmiechał patrząc wstecz na swoje zmagania ...

_________________
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: 31 mar 2018, o 19:36 
Offline
Moderator
Avatar użytkownika

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

zubik napisał(a):
struktura jest ogólnie dostępna, widoczna wszędzie tam gdzie dołącze plik common.h

jeśli koniecznie potrzebujesz jej jako globalnej dla całego projektu to ok ... ale po co ?

można do niej dostęp robić właśnie poprzez wskaźniki w argumentach funkcji. Przynajmniej sprawdź sobie jak to działa - zamiast jak sam mówiłeś unikać wciąż tego sposobu - i zabawy przez cały czas tylko ze zmiennymi globalnymi

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

Strefa czasowa: UTC + 1


Kto przegląda forum

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