Fórum témák
» Több friss téma |
Sziasztok,
Van egy kodom (arduino) elég nagy. Az ESP32 v2.0.3 -an simán müködik, de a v2.0.4 es a v2.0.5 -ön a következő hibát adja forditás közbe: Hogy lehetne ettől megszabadulni?
minek ez a nagy felhajtás a bejelentkezésnél ? kell fizessem az SMS -eket (nem vagyok Magyarország-i) A hozzászólás módosítva: Nov 16, 2022
Nem látszik elég a kódból ahhoz, hogy biztosat lehessen mondani, de szerintem ez a probléma nálad is, amiről ezen a blogoldalon írnak: https://pascal-bergeron.com/en/posts/sprintf-terminating-nul/
A buff nevű cél buffer túl rövid, legalább egy bájttal nagyobbat kell foglalni neki. Ha igaza van a fordítónak, akkor eddig is rossz volt a kód, de ez egy új figyelmeztetés az új fordítóban, hogy megpróbálja kitalálni, hogy mekkora a célbuffer, és mekkora lesz amit kiírsz és ez alapján warningot ad. A legjobb az volna, ha sprintf helyett snprintf-et használnál, aminek át kell adni a buffer méretét is. Ez garantáltan nem fog túlírni a bufferen. A bufferen túlírás azért nagyon kellemetlen, mert sokszor nagyon nehezen debuggolható hibát okoz, ami teljesen más funkcióban jön elő, mint ahol a programban a hiba van. Úgyhogy ezzel nem érdemes viccelni, snprintf-et kell használni és rigorózusan követni, hogy mekkor a buffer.
Nem akarom tölteni az oldalt, ITTEN az első függvény: „void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len)”
Teljesen egyértelműen hibás, és ügyesen kifogta a fordító! 3 bájt van allokálva, és 4 bájtot ír bele (hét hexa számjegy plusz space, plusz záró nulla!).
Ha megy az angol, akkor olvasd el a fentebb linkelt posztot, pontosan erről szól, kezdőknek való ahogy belenéztem. A megoldás az, hogy a buff[3]-at átírod buff[4]-re. Az elvi hibás program valódi hibát szerintem azért nem okozott a hibás változatában sem, mert a fordító mindenképpen 4-es határra igazítja a változókat 32 bites rendszereken, és így valójában volt ott egy negyedik bájt is, és ezért nem írt felül semmit a hibás megoldás. De még egyszer mondom, hogy inkább írd át az összes sprintf-et snprintf-re, az a biztos és jó gyakorlat. Még mindig jobb ujjgyakorlatként átírni 100-at, mint napokig debuggolni egy ebből adódó hibát. A hozzászólás módosítva: Nov 17, 2022
Kijavitva a buff[3], buff[4] -re, vagy a "%02x " -ből kitörölve a szoközt már nem ad vissza hibát. Az „snprintf” és „fprintf” nem muködik. De most az OneWire könyvtár nem tetszik neki
Időközbe újbol letöltöttem az OneWire -t, ami már nem teljesen ugyanaz és azzal már megy.
Sziasztok! Egy esp32-vel hajtok meg egy GY-PCM5102-es DAC-ot Arduinó idét használva. A problémám az, hogy olyan mintha csak 8 bites módban menne. Tehát van hangja, de olyan, mint egy régi dallamcsengőnek, nagyon sok felharmonikussal...
A kód ami meghajtja:
illetve az audió bufferemet ezzel a kóddal írom ki:
A buffer short típusú. Több kommunikációs módot is googléztam, olyan érzésem van, mintha csak MSB, vagy LSB módban működne, a kettő együtt nem. Ez is ugyanazt tudja, talán halkabb:
Mellékelek egy képet a jelalakról. Segítségeteket előre is köszönöm! A hozzászólás módosítva: Dec 23, 2022
Sin jel helyett adj neki monoton növekvő/csökkenő adatfolyamot. Ott szépen kibukik minden hiba....
Köszi már majdnem jó, a felbontás már tökéletes!
Sajnos még mindig van cserélgetés.
Megvan! Bufferméret feléig kell elmennem a for ciklussal! Tehát fele akkora bufferrel kell dolgoznom, mint amit a DAC használ!
A hozzászólás módosítva: Dec 24, 2022
Duplázd meg a DMA tömböd méretét, mivel 2 Bytes az adat hosszod:
És akkor bele fér az egész tömb, végig játszhatod! Nem kel felezned. A hozzászólás módosítva: Dec 24, 2022
És rakjál sortöréseket az 1024 szám ki íratásába, hogy lássál is valamit:
Ezt javítani kell, ha nincs maradék az osztásba:
A struktúra létrehozásánál ez el is van magyarázva:
Relé mit kapcsolgat? Milyen tápegységről üzemel a rendszer? DS18B20 kábelei milen hosszúak? Hol vannak (ha vannak) hidegítő kondenzátorok? Meg úgy egyáltalán, hogyan vannak ezek a dolgok összekötve?
5V/1A tapegység.
1M kábelek a szenzorokon Kettő darab klima kültéri egységet vezérel- hősszivatyút készítek(leolvasztás, kaszkád, túláram, meg ilyesmi) Csak úgy vannak össze vissza kötözve egy nyaklapon...(Életveszélyes de egyenlőre erre tellet)
Nem találtam meg az arduino referenciában az általad használt "and" definícióját?
Viszont eredetileg így kellene használnod: Bővebben: Logicaland: &&
Ezek rosszul vannak létrehozva:
Bővebben: millis Helyesen nem előjeles szám kel:
De még így is csak öt napig működhet egyfolytában hiba nélkül! Bővebben: Link A hozzászólás módosítva: Jan 15, 2023
Az if-ek ben következetesen rosszul használod a feltétel vizsgálatokat!
"or" helyet inkább || kellene. Bővebben: Link
Logical operators
All logical operators exist in C and C++ and can be overloaded in C++, albeit the overloading of the logical AND and logical OR is discouraged, because as overloaded operators they behave as ordinary function calls, which means that both of their operands are evaluated, so they lose their well-used and expected short-circuit evaluation property.[1] Bővebben: Link
Az and és or macro-k, amik szintén használhatóak a && és || operátorok alternatív megadására, mégha az arduino doksi nem is említi, de a végén egy gcc fordító fordít, ami támogatja:
Bővebben: Link
Sőt még az ördögtől való goto utasítást is elfogadja.
Itt pedig le írják, hogy mi a két módszer között a különbség:
Bővebben: Link "Járt utat a járatlanért ne hagyd el!"
Akkor lehetséges hogy csak ez a probléma? Ma átírom hátha. De nem fér a fejembe hogy barmikor megtörténhet hogy meg áll. Néha lefagy máskor újra indul. 1-5 órat működik.
Semmi különbség nincs. A macro-kat a preprocesszor dolgozza fel, ami csak annyit csinál, hogy kicseréli a "and" szöveget "&&" szövegre.
Amikor a forditásra kerül sor akkor ott már az and helyett a && fog szerepelni a preprocesszált forrás fileban, pont mintha te irtad volna oda a &&-t, így a kiértékelésben nem lesz semmi különbség. Ez nem operátor overload csak egy egyszerű macro.
Inkább az itt jelzett hibát javíts ki: Bővebben: Link
Szerintem ezek a helyettesítések több mint veszélyesek!
Pl. az alábbi sorok
a C fordítóhoz az alábbi formában jutnak el.
A hozzászólás módosítva: Jan 15, 2023
Biztos? Szerintem szó közepén nem cseréli...
|
Bejelentkezés
Hirdetés |