Strona 1 z 1
Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 20:05
autor: WoodPaker
Witajcie drodzy użytkownicy forum microgeek.eu. Mam mały problem dotyczący przekazywania argumentu do funkcji.
Funkcja jest zdefiniowana w następujący sposób:
Kod: Zaznacz cały
int wiringPiSPIDataRW (int channel, unsigned char *data, int len) ;
Jednakże ja chciałbym wysłać jeden bajt, jedną 8 bit liczbę. A robie to wszystko w innej funkcji bo przy okazji SPI muszę pomigać kilkoma innymi pin'ami. Robie to w ten sposób:
Kod: Zaznacz cały
void SendCMD(INT8U index)
{
digitalWrite(_DC,LOW);
digitalWrite(_CS,LOW);
INT8U *send=&index;
wiringPiSPIDataRW(CHANELL, send, 1) ;
digitalWrite(_CS,HIGH);
}
Moje pytanie brzmi. Czy można przekazać tę liczbę w sposób bardziej elegancki? Jak wpiszę
to mi się rzuca (i prawidłowo), że próbuję przekazać liczbę bez zamiany do wskaźnika. Ktoś? Coś?
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 20:20
autor: Antystatyczny
A spróbuj tak:
Kod: Zaznacz cały
void SendCMD(INT8U index)
{
digitalWrite(_DC,LOW);
digitalWrite(_CS,LOW);
INT8U *send;
*send = index;
wiringPiSPIDataRW(CHANELL, send, 1) ;
digitalWrite(_CS,HIGH);
}
ewentualnie tak:
Kod: Zaznacz cały
void SendCMD(INT8U *index)
{
digitalWrite(_DC,LOW);
digitalWrite(_CS,LOW);
wiringPiSPIDataRW(CHANELL, index, 1) ;
digitalWrite(_CS,HIGH);
}
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 20:39
autor: PROTON
Wystarczy:
wiringPiSPIDataRW(CHANELL, &data, 1) ;
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 20:42
autor: Antystatyczny
No tak, tak jest najprościej, ale sądziłem, że chodzi również o pozbycie się konieczności wpisywania parametru len
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 21:13
autor: WoodPaker
Nie, nie. Parametr len zostaje bo funkcja
wiringPiSPIDataRW jest zdefiniowana w osobnej bibliotece, do której nie mam (i nie chce mieć) dostępu. Chodziło mi raczej jak wpisać liczbę do tej funkcji wiedząc, że
*data jest wskaźnikiem. Zatem czy to co teraz napisze jest poprawnie?
Kod: Zaznacz cały
void SendCMD(INT8U index)
{
digitalWrite(_DC,LOW);
digitalWrite(_CS,LOW);
wiringPiSPIDataRW(CHANELL,&index, 1) ;
digitalWrite(_CS,HIGH);
}
int main()
{
printf("Wsylam...");
SendCMD(233);
printf("Wyslalem...");
return 0;
}
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 21:15
autor: Antystatyczny
void SendCMD(INT8U index) przyjmuje jeden parametr, a Ty przekazujesz trzy. Czegoś tu nie rozumiem
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 21:20
autor: WoodPaker
Rozpedzilem sie... Juz poprawiłem
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 21:21
autor: Antystatyczny
Tak, teraz powinno być dobrze
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 21:26
autor: WoodPaker
Dziękuję Ci dobry człowieku. A powiedz mi. Pierwsza wersja też jest poprawnie tylko dłużej, prawda? (się muszę upewnić, że nie zgłupiałem do końca od czasu kiedy pisałem ostatni program)
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 21:27
autor: Antystatyczny
Tak, pierwsza wersja niepotrzebnie ma wskaźnik oraz przypisanie do niego. To jest zbędne
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 21:32
autor: PROTON
Spokojnie, kompilator i tak zoptymalizuje.
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 21:32
autor: WoodPaker
OK. To jeden problem z głowy. Ale jako, że funkcja
wiringPiSPIDataRW(CHANELL,&index, 1) nadpisuje bufor tym co otrzymuje od SPI to w takim razie kod
Kod: Zaznacz cały
INT8U SendCMD(INT8U index)
{
digitalWrite(_DC,LOW);
digitalWrite(_CS,LOW);
INT8U *data=&index
wiringPiSPIDataRW(CHANELL,data, 1) ;
digitalWrite(_CS,HIGH);
return data;
}
int main()
{
printf("Wsylam...\n");
INT8U data=SendCMD(233);
printf("Otrzymalem %d\n",data);
return 0;
}
Jest poprawny?
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 21:34
autor: WoodPaker
INT80 jest zadeklarowany jako unsigned char (to tak dla potomnych)
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 21:34
autor: Antystatyczny
Nie. Moim zdaniem powinieneś mieć return *data;
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 21:37
autor: WoodPaker
OK, dziękuję. Tego mi było trzeba. Niech wam Bozia wynagrodzi w Malinkach
Re: Jak elegancko przekazać liczbe do wskaźnika?
: czwartek 19 maja 2016, 21:38
autor: Antystatyczny
Możesz również zwrócić index. Return index;