Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   872 / 872
(#) metabo7000 válasza tki hozzászólására (») 11:46 /
 
Be raktam a teljes kodot amiben a forditó kiborul (void) érték vissza hivás!
Bővebben: Link
(#) tki válasza metabo7000 hozzászólására (») 12:28 /
 
Valamilyen hibás magyarra fordítás eredménye ez a "(void) érték visszahívás", ilyesmi nincs abban a két hibaüzenetben, amit küldtél. Az első üzenet a lényeg, a második csak az mutatná meg, hogy hol történt a hiba. Az, hogy annak a nyílnak a hegye így, normál szövegként idemásolva az üzenetedet a "void" szóra mutat, nincs jelentősége. Ezzel kell csak foglalkozni:

"void_hivas1:15:10: error: too few arguments to function 'void test(int*, int*)'"

Azért kérdeztem, érted-e, mert szerintem meg sem próbáltad lefordítani. Ez a "too few arguments" szó szerint azt jelenti, hogy egy függvény fejében túl kevés argumentumot (paramétert) adtál meg annak hívásakor. Vagyis ez az alábbi sor nem jó a hívásnál, mert itt egyetlen paramétert adsz meg, hogy átadásra kerüljön a "test" függvénynek, nem kettőt:

test(&i);

Ha működő kódot szeretnél az általad mutatott "void test(int *a, int *b);" függvény hívására, akkor az így fog kinézni:

test(&i, &j);

Ehhez persze kell, hogy létezzen a Setup függvényben egy második integer változó is, vagyis az "int i;" definíció után kell egy "int j;" is. (A "j" betűt csak azért használtam, mert az következik az "i" után, ennek nincs jelentősége.)

Megadhatok egy működő kódot, de úgy nem biztos, hogy tanulsz belőle, el kellene tudnod mondani, hogy végül is mit szeretnél megvalósítani. Pusztán példakódnak néz ez ki, egy kísérletnek arra, hogy le tudod-e fordítani, de akkor meg jó lenne előtte még alapozni egy kicsit, különben nem fog menni. Ehhez jó pár magyar nyelvű, online, ingyenes C programozási útmutató is van az Interneten, könnyű rájuk találni. Tehát:

  1. void test(int *a, int *b)
  2. {
  3.  
  4. }
  5.  
  6. void setup()
  7. {
  8.     int i;
  9.     int j;
  10.  
  11.     test(&i, &j);
  12. }

Így le kell fordulnia, bár a két változónak illik értéket adni, mielőtt bármit is csinálunk velük, így véletlenszerű a tartalmuk, a C nyelv nem állít be számukra alapértéket, pl. nullát.
A hozzászólás módosítva: 12:30
(#) tki válasza metabo7000 hozzászólására (») 13:20 /
 
A hibaüzenetekből nem mindig derül ki a legmélyebben levő probléma. Ez a bővebben bemutatott kód elsősorban azért rossz, mert egy függvénydefiníció belsejébe beleraktál egy másik függvénydefiníciót. Ilyen szintaxis a C-ben nem létezik. Az encRotationToValue()-t a loop() fölé kell rakni önálló függvényként, és a loop()-ból meghívni a megfelelő paraméterekkel.

Valamint a cím szerint átadott változóknak is hibásan próbálod az értékét megváltoztatni (pl. "*value=" helyett "value=") - nyilván azért született a másik program, a tesztprogramod, mert nem tudtad lefordíthatóra összehozni, és ezért is kísérletezel az encRotationToValue() függvény elhelyezésével. Lásd a többi hozzászólásomban, amiket írtam.
A hozzászólás módosítva: 13:23
(#) metabo7000 válasza tki hozzászólására (») 16:08 /
 
Szoval ahogy sejtetem esp32 könyvtárban valami geb@sz probáltam v2xx és a 3xx is de arduino uno nincs probléma forditáskor!
-------
-arduino uno hibba nélkül lefordul!
-esp32 hibba nélkül lefordul!
void test(int *a, long *b)

-------
-arduino uno hibba nélkül lefordul!
-esp32 hibbát ad !
void test(int *a =12345, long *b=987654)

esp32 hibba..........

.....void_vissza3:4:40: error: invalid conversion from 'int' to 'int*' [-fpermissive]
void test(int *a =12345, long *b=987654)
^
void_vissza3:4:40: error: invalid conversion from 'int' to 'long int*' [-fpermissive]
exit status 1
invalid conversion from 'int' to 'int*' [-fpermissive]
esp32 hibba..........


  1. int i;
  2. long j;
  3. void test(int *a =12345, long *b=987654)
  4.  
  5. //void test(int *a, long *b)
  6.  
  7. {
  8.  
  9. }
  10.  
  11. void setup() {
  12.  
  13. test(&i, &j);
  14. }
  15.  
  16. void loop() {
  17.   Serial.begin(115200);
  18. test(&i, &j);
  19. Serial.print("i:");
  20. Serial.print(i);
  21. Serial.println();
  22. Serial.print("j:");
  23. Serial.print(j);
  24. Serial.println();
  25.  
  26.   delay(2000);
  27. }
(#) tki válasza metabo7000 hozzászólására (») 16:26 /
 
Ezt le lehet írni, ha nem is C-ben, de C++-ban, de semmi értelme abból a szempontból, amire használni akarod (a pointereknek ad alapértéket): "void test(int *a =12345, long *b=987654)" Mindegy, hogy jön rá hibaüzenet vagy sem.

Az eredeti függvénydefiníció a jó, ami most ki van kommentezve. A paramétereknek pedig a függvény hívása előtt kell értéket adni, pl.:

  1. int i, j;
  2. i = 12345;
  3. j = 987654;
  4.  
  5. test(&i, &j);


Nem folytatom.
Következő: »»   872 / 872
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem