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



Teraz jest 27 sie 2026, o 20:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 30 sty 2017, o 23:36 
Offline
Nowy

Dołączył(a): 26 lis 2015
Posty: 20
Pomógł: 0

Witam !

Temat może i banalny, jeżeli mamy jedną strukturę. W swoim programie mam rożne struktury zawierające różne zmienne, każda struktura ma różną ilość zmiennych. Łączenie tego w jedną strukturę jest bezsensu, dlatego podzieliłem to sobie na parę rożnych struktur. Potrzebuję przekazać teraz te struktury do funkcji i wysyłać przez UART, wszystkie zmienne w strukturach są tego samego typu- np int8_t. Jak najprościej to zrobić, by nie tworzyć tylu funkcji ile typów struktur ani jednej funkcji, w której argumentami będą wszystkie typy funkcji...
tj:

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 sty 2017, o 02:29 
Offline
Nowy

Dołączył(a): 26 lis 2015
Posty: 20
Pomógł: 0

Problem w tym,że ten wskaźnik muszę przekazywać za każdym razem do innej struktury, no chyba że moge przekazać wskaźnik do pierwszego elementu w strukturze, i potem zwiększać jego adres określoną ilość razy? A ponieważ każdy element każdej struktury jest typu int8_t to wskaźnik będzie po prostu typu int8_t, po prostu?:)


UPDATE: faktycznie, działa, zwiększam po prostu adres wskaźnika odpowiedniąi ilość razy.


Pytanie z innej beczki: chciałem się pobawić w optymalizacje zasobów i wyszło,że niektóre struktury to pola bitowe, kompilator mówi, że nie może pobrać adresu
do tego pola -wg pomysłu proponowanego przez @squeez
Pola bitowe dla zaworów i pomp: 1-otwarty/zalaczona , 0- zamkniety/niezalaczona
Czy tutaj jedynym wyjściem jest napisanie dwóch osobnych funkcji wysyłających dla tych pól bitowych?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2017, o 10:28 
Offline
Nowy

Dołączył(a): 26 lis 2015
Posty: 20
Pomógł: 0

Do tej pory wysylalem tak, ze robilem #define SRUCT 20
I robilem w funkcji switch case, przez co caly kod byl duzy bardzo.... A tak przekaze wskaznik i zrobie petle. Dzieki Tobie bedzie to o wiele bardziej przejrzyste



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2017, o 23:20 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

nariox napisał(a):
Czy tutaj jedynym wyjściem jest napisanie dwóch osobnych funkcji wysyłających dla tych pól bitowych?

Nie. Stosując unię można ten sam obszar pamięci interpretować na różne sposoby:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

_________________
Dragonus Cracovus: Biomagia



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

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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO