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   601 / 850
(#) Massawa válasza Kovidivi hozzászólására (») Márc 10, 2020 /
 
Nem a C++ nyelv ellen irtam, amit irtam, s persze, hogy nincs nagyobb gond, ha tud ilyesmit az ember. Inkább ugy mondanám, hogy csaloka a fordito. Mindegy azt, hiszem most már tudom, hogy vigyázni kell és akik követték a témát talán jol is jött nekik.
Azért kiváncsi lennék hol vannak még ilyen rejtett csapdák.
(#) Kovidivi válasza Massawa hozzászólására (») Márc 10, 2020 /
 
A pointereknél, a tömb kezelésnél, a karakter típusnál, főleg, ha ékezeteset akarsz kezelni (1byte helyett 2byte-on van tárolva). Igazából mindenhol
Aztán lehet tovább menni, osztályok, különböző típus definíciók, függvények, amik automatikusan a megfelelő típust választják ki amikor meghívod, nem problémáznak, ha hiányzik egy paramétere, stb.
(#) usane válasza Kovidivi hozzászólására (») Márc 11, 2020 /
 
Nem a C specialitása. Más nyelveknél is figyelni kell a típusok közötti átalakításra, előjelekre stb. Pláne ahogy korábban valaki írta mikrovezérlő típusonként is másképp kezelik.
(#) Massawa válasza usane hozzászólására (») Márc 11, 2020 /
 
Itt csak az volt a gond, hogy egy egyszerü egyenletet másképp kezel, ha más sorrendben irod be a változokat. Ami matematikai nonszensz. ( ez olyan lenne, mintha 5x10 nem lenne egyenlö a 10x5-el). Erre valo utalást viszont eddig nem találtam.
Az természetesen rendben van, ha az ember rájön a turpisságra és ki is deriti mi a gond.
Nyilván, ha lépésenként kezeltem volna, akkor hamarabb kiderült volna a hiba, de ilyesmire sincs nagyon irott utalás. Elhiszem, minden nyelvben lehetnek ilyen gondok ( kivéve az ASM-t mert ott alapbol tudod mit rakhatsz be a változokba), de erre lehetne utalni vagy talán a fordito jelezhetne.
De azt hiszem, már teljesen kiveséztük a dolgot.
(#) Lamprologus válasza Massawa hozzászólására (») Márc 11, 2020 /
 
Nem a műveletek sorrendjéből adódott a probléma, hanem abból, hogy a részeredmény nagyobb volt mint amit a változó típus megengedett, így az túlcsordult... Ilyen a C!
(#) Massawa válasza Lamprologus hozzászólására (») Márc 11, 2020 /
 
Az világos, de ha leirsz egy képletet, akkor nem biztos, hogy arra gondolsz, hogy a fordito stb. nem tud vele mit kezdeni, söt ami rosszabb, rossz eredményt ad, és erre semmi sem hivja fel a figyelmed. (Holott az AVRchipben az adott esetben már tulfolyott valamelyik regiszter, azaz hiba belül megjelent. )
És végeredményben a sorrend változtatása segitett, ami szintén félrevezetö.
A hozzászólás módosítva: Márc 11, 2020
(#) Lamprologus válasza Massawa hozzászólására (») Márc 11, 2020 /
 
A fordító nem tudhatja, hogy mi lesz a szorzó érték tartománya... Ha mondjuk jelen esetben 0-7 akkor a program hibátlan, miért reklamálna?
(#) usane válasza Massawa hozzászólására (») Márc 11, 2020 /
 
Nem akarom én vesézni, csak segítségképpen magyarázatkot szerettem volna adni, mint most is.
A fordító nem tudhatja, hogy te mit szeretnél az adott változóval, pláne, mivel az változó, tehát ő nem tudhatja, hogy te akkora értéket is fogsz neki adni ami túlcsorduláshoz vezet. Programfutási időben meg már semmi köze hozzá. Hol is mutatná futási időben? Nyilván, ha PC-n vagy akkor kíírhatná, de amikor mikrovezérlőre írod, honnan tudja van-e kijelző csatlakoztatva, van-e rajta visszajelzéshez felület, stb. Mindig a programozónak kell ismernie a hardvert és a fejlesztői környezetet.
(#) Massawa válasza Lamprologus hozzászólására (») Márc 11, 2020 /
 
Azért nagyon kiváncsi lennék, hogy hány ember futott bele egy ilyen problémába, mert csak a szerencsén mulik milyen formában irod be ugyanazt az egyenletet/képletet.
S mint irtam nagyon is van az AVR-ben több jelzö is amelyik jelzi a belsö hibát, azaz ki is jelezhetné amikor leforditod, hogy az adott esetben baj van a koddal.
Szeretmén befejezni, mert ugy látszik nincs vége az eszmefuttatásoknak.
(#) vargham válasza Massawa hozzászólására (») Márc 11, 2020 /
 
Ez a programozás alapjaihoz tartozik. Az elején meg kell tanulni, és onnantól oda kell figyelni. Ez is egy szakma, ahogy a feleségem szokta mondani.
(#) asch válasza Massawa hozzászólására (») Márc 11, 2020 / 3
 
Az a baj, hogy abból indulsz ki amit gondolsz, hogy hogyan kellene működnie. Ahelyett, hogy meghallgatnád amit többen is próbálnak elmondani neked. Segítséget kérsz, majd amikor korrekt, szakszerű választ kapsz, akkor látványosan ignorálod. Már az előző témánál is ezt tetted. Őszintén szólva én ott el is határoztam, hogy többet nem fogok segíteni. Nem bántásképpen írom, hanem azért, hogy ha nem változtatsz a hozzáállásodon, akkor ne csodálkozz, ha a többiek is így fognak esetleg dönteni.
(#) Bell hozzászólása Márc 11, 2020 /
 
Sziasztok! Arduino Leonardóval szeretnék ezen leírás alapján egy ATmega328-P PU-ra bootloadert felrakni, de ezt a hibaüzenetet kapom:
  1. Arduino: 1.8.12 (Windows 7), Alaplap:"Arduino Duemilanove or Diecimila, ATmega328P"
  2.  
  3. E:\Programok\Arduino\hardware\tools\avr/bin/avrdude -CE:\Programok\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -cstk500v1 -PCOM9 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0xFD:m -Uhfuse:w:0xDA:m -Ulfuse:w:0xFF:m
  4.  
  5. avrdude: Version 6.3-20190619
  6.          Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
  7.          Copyright (c) 2007-2014 Joerg Wunsch
  8.  
  9.          System wide configuration file is "E:\Programok\Arduino\hardware\tools\avr/etc/avrdude.conf"
  10.  
  11.          Using Port                    : COM9
  12.          Using Programmer              : stk500v1
  13.          Overriding Baud Rate          : 19200
  14. Hiba a bootloader égetésekor.

Az összekötések rendben vannak. A kvarc viszont 16MHz-en pár cm-ről CW-n meghallgatva nem ad jelet.
Mi lehet a megoldás?
(#) vargham válasza asch hozzászólására (») Márc 11, 2020 /
 
Egyetértek. Megvan az oka, hogy miért működik így. Le van írva a dokumentációban, el kell olvasni.
(#) Kovidivi válasza Massawa hozzászólására (») Márc 11, 2020 / 1
 
Amíg mindig válaszolsz valamit, sosem lesz vége!
Gondolj bele, egy programozónak tudnia kell, hogyan vannak a számok tárolva, hogyan kell programozni. Én mondjuk pont ki akarom használni a túlcsordulást, ezt a "hibás" számolást, mert a feladat ezt adja, akkor miért kellene reklamálnia a fordítónak? Vagy amikor egymás mellett van & és &&, szólnia kellene? (az Atmel Studio szól egyébként ). Plusz a fordítónak fogalma sincs, hogy te az összeadással mit akarsz kezdeni. Ő összead akár két karaktert is, nem különösebben érdekli
(#) usane válasza Kovidivi hozzászólására (») Márc 11, 2020 / 1
 
Ráadásul változó van benne, aminek fordítási időben nincs értéke.
Futás közben meg szegény AVR honnan tudja, hogy neki most valami hibaüzenetet kellene küldenie. Na és ha kellene, hova is küldje? IIC, SPI, PIN-t állítson be, vagy füstjelet küldjön?
Mindegy, elég részletesen elmagyaráztuk. Részemről ennyi.
(#) Massawa válasza usane hozzászólására (») Márc 11, 2020 1 /
 
Onnan, hogy tulcsordul ez az.( van vagy 8 regiszter ilyesmire ). Na mindegy, azért érdekes lenne egy zsebszámologép, ha igy viselkedne egy primitiv egyenlet számolásánál...
(#) benjami válasza Massawa hozzászólására (») Márc 11, 2020 / 2
 
Két 16 bites értéket összeszorzol. Mivel a szorzat nem fér el 16 biten ezért aztán túlcsordul. Azt nem mondod meg neki, hogy légyszi 32 bitesként szorozzad. Szerinted mégis mit is kellene csinálnia szerencsétlennek?
(#) vargham válasza Massawa hozzászólására (») Márc 11, 2020 /
 
Ez nem egy zsebszámológép. Ha egyenletmegoldásra akarod használni, akkor neked kell gondoskodnod ezekről a dolgokról, mert te vagy a programozó.
A programozó pedig nem a felhasználója, hanem a tervezője és készítője valaminek. Ez fontos különbség.
(#) Lamprologus válasza usane hozzászólására (») Márc 11, 2020 /
 
Füstjelet küldjön!!! Aztán jöhet a páka!!!
(#) usane válasza Massawa hozzászólására (») Márc 11, 2020 /
 
A zsebszámológépben a programozó rendesen leprogramozta.
(#) Massawa válasza usane hozzászólására (») Márc 11, 2020 1 /
 
Amugy hibátlqn megoldás ez lett volna Y=(long)K * (long)2000 / X, de a sorrend megváltoztatása egyszerübb.
(#) benjami válasza Massawa hozzászólására (») Márc 11, 2020 /
 
Úgy látszik csak egy nap késéssel olvasod el a válaszokat, mert tegnap ugyanezt írtam.
(#) Massawa válasza benjami hozzászólására (») Márc 11, 2020 1 /
 
Nem csak egy napig itt okoskodás folyt, holott kétszer kértem, higy hagyják abba mert semmi értelme nincs. Rajtad kivül érdemben senki semmit nem mondott. Ennyi.
Befejeztem!
(#) Kovidivi válasza Massawa hozzászólására (») Márc 11, 2020 / 1
 
"Rajtad kivül érdemben senki semmit nem mondott." - a köszönöm jobban esik az embernek De semmi gond, megválogatom, kinek segítek.
(#) usane hozzászólása Márc 12, 2020 /
 
ÜDV!

Én meg a mutatókkal bajlódok állandóan.
Egyszer már megcsináltam régebben, de azóta HHD hiba miatt elveszett és már nem emlékszem hogy volt. Van egy tömböm, és abba szeretnék változó vagy másik tömb adatait beilleszteni, úgy, hogy azt a beillesztett tömben is lássam futásidőben.
Tehát pl:
  1. t1[10] = {0,0,0,0,0,0,0,0,0,0};
  2. t2[4] = {5,5,5,5};
  3. és pl t1[3]-tól beillesztem t2-t azt t1 visszaadja, vagyis ha t1 elemeit lekérdezem ezt lássam:
  4. t1[10] = {0,0,0,5,5,5,5,0....}

Addig megpróbálom összerakni, hátha sikerül magamtól is.
Valamint azt elfelejtettem, hogy ez esetleg oda-vissza működjön, tehát ha t1-et változtatom az t2-ben is látszódjon, de lehet, hogy erre nem lesz most szükségem, még nem tudom.
A hozzászólás módosítva: Márc 12, 2020
(#) usane válasza usane hozzászólására (») Márc 12, 2020 /
 
Odáig eljutottam, hogy tömbből tömbbe tudokmásolni mutatókkal és memcpy-val, de nem tudom, hogy az oda-vissza átjárhatóság megoldható-e valahogy.
(#) djusee válasza usane hozzászólására (») Márc 12, 2020 /
 
Szia. Szerintem erre felesleg a memcpy. Pl.
  1. byte t1[10] = {0,0,0,0,0,0,0,0,0,0};
  2. byte t2[4] = {5,5,5,5};
  3. #define KEZDOCIM 3 // hogy mely indextöl kezdjen másolni
  4.  
  5. void setup() {
  6.   Serial.begin(9600);
  7.   for(byte a = 0; a < sizeof(t1); a++){
  8.           if( (a >= KEZDOCIM) && ((a - KEZDOCIM) < sizeof(t2)) ){ // ha elérte a kezdö cimet és nem haladta tul a t2 méretét
  9.                   t1[a] = t2[a-KEZDOCIM];
  10.           }
  11.   }
  12.  
  13.   for(byte b = 0; b < sizeof(t1); b++){
  14.           Serial.println(t1[b]);
  15.   }
  16.  
  17. }
(#) usane válasza djusee hozzászólására (») Márc 12, 2020 /
 
Ez is megy, köszönöm, de gondoltam a memcpy gyorsabb. Én valami olyat szeretnék, (nem tudom megoldható-e), hogy fixen össze legyen kötve. Tehát ha megadtam neki, hogy t2 elemei t1-be hova illeszkedjenek, akkor ha bármikor módosítom a t2 elemeit, ne kellken újra bemásolini t1-be.
(#) djusee válasza usane hozzászólására (») Márc 12, 2020 /
 
Értem, persze memcpy -vel is megoldható, de akkor nagyon vigyáznod kell nehogy tulhaladj a t1 változó memoria címén és felülírj más memória címeket mert akkor annak csúnya következményei lehetnek.
Pl.
  1. memcpy(t1+4,t2,4);
(#) sargarigo válasza usane hozzászólására (») Márc 12, 2020 /
 
Én az unio.n-ra gondolok hogy esetleg használható lenne valahogy. Bár az nem címezhető. (Az "unio.n"-ban a pont a motor miatt kellett, neked az nem kell )
De miért kell hogy oda-vissza menjen? Amikor írod, akkor tudod hogy írod nem? Egyszerűen íráskor beírod mindkét helyre és kész. Olvasni meg már azt olvasod amelyiket akarod.
A hozzászólás módosítva: Márc 12, 2020
Következő: »»   601 / 850
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