Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Sziasztok! Bocsánat az egyszerű kérdésért, de megakadtam. Szeretném a konkrét tömbjeim értékeit megváltoztatni egy eljárással, ami megkapja a konkrét tömböt, és annak értékeit tényleg meg is változtatja. (A nullázás itt csak fikció)
Ez így biztosan nem jó, valamilyen cím szerinti átadás kellene... Segítségeteket köszönöm.
Az nem jó, a bemenete nem rail to rail.
Lehet még is csak jó, viszont valamiért lassúnak tűnik...
No erre nem figyeltem, illetve nem tudtam, hogy számít. Mert az MCP is úgy van hirdetve, de most néztem, hogy csak a kimenete az. Akkor pl. AD822, vagy LMV358 jó lesz ?
Kihozott egy hibát amit nem értek, de a tömbök átadása megtörténik...
Úgy néz ki annyira csúcsra van járatva az eszköz, hogy egyetlen plusz függvényhívás sem tud már behozni időben... A hozzászólás módosítva: Máj 12, 2020
Bocs, mellékattintottam !... nem Neked szántam a választ...
Én más ügyben kérdeztem és sajna a programozáshoz sem értek.. A hozzászólás módosítva: Máj 12, 2020
Idézet: „annyira csúcsra van járatva az eszköz, hogy egyetlen plusz függvényhívás sem tud már behozni időben” Mit jelent az időben? Azért egy 10elemű tömb feltöltése nem olyan sok idő. Milyen eszköz?
Ilyenkor nem csak a címét adja át? Ha lemásolja, az nagyon sok idő...
Még azon is gondolkodtam még, hogy a for ciklusokban ha int-et használok, az a doksi szerint 32-bites szám Arduino Due-né. Esetleg kiváltható lehet uint16_t-vel, vagy byte-al, de lehet, hogy a fordító eleve optimalizálja?
Azt már tudom hogy Due-ról van szó, semmi mást. Mennyi idő alatt kell lefutni és minek?
Egy olyan rutinnak mint a nullaz? Az, hogy a for milyen változót használ sebesség szempontjából lényegtelen. Csak a memóriát viszi. Ha konkretizálnád, hogy mit kell elérni, mennyi a renselkezésre álló futásidő és minek kell alatta lefutni akkor jobban tudnánk segíteni, mert így csak általános dolgokkal dobálózunk.
A sima lm358 tökéletes oda. A bemeneteit teljesen le lehet húzni negatív tápig.
Hibakereséshez megpróbálnám azt, hogy az OPA kimenete helyére tennék egy potit, aminek a csúszkája van az ADC-n, a két végpontja pedig az 5 volton. Azzal tudod szimulálni az MCU felé a páka melegedését.
Ok, köszi az ötletet ! Akkor majd megpróbálom először potival.
Csúcsra van járatva a gép az audiobuffer számításai miatt. Minden centi számít. Mondjuk ha 32.bites a proci, akkor lehet nem leszek gyorsabb uint_16-tal, vagy bájttal...
Bocs nem terhelem vele a többieket, ez a projekt jár a vége felé Link Jelen esetben azt látom, hogy 3-4szer fel kell tölteni, hogy stabilan fusson. Jó lenne valahogy paraméterezni a fordítót...
Van egy ötletem, de nem teszteltem. Próbáld ki.!
Legyen a tömb méreted 4-el osztható, és használd ki, hogy 32 bites procival egyszerre 2 * 16 bites értéket tudsz módosítani. Így gondolom:
Gondolom nagyobb méretű tömböket használsz, mert az egésznek csak akkor van értelme. A hozzászólás módosítva: Máj 13, 2020
Lehet, hogy a for ciklus inkább így a jó:
Esetleg tovább fejlesztve, érték megadásával:
A hozzászólás módosítva: Máj 13, 2020
Tömb kezelésnél csak cím átadás van a függvénynek.
Nem készül másolat mint a változók esetében.
Köszi, ne menj bele jobban, még átrágom, hogy tudom e gyakorlatban használni!
A Pointerek kezelését és a memória címzés aritmetikát, itt írjak le:
Bővebben: Mutatók és tömbök
Érdeklődésből bele lestem a közölt programodba.
Mérete miatt több időt kellene rá szánni az egész folyamat megértéséhez. És nem is tudom hól idő érzékeny, hol érdemes optimalizálni? Csak egy ötlet 2 érték beolvasása és össze adása helyet, ha a művelet csak sor számlálás. Gyorsabb lenne egyszerűen csak növelni az értéket. Pl:
A hozzászólás módosítva: Máj 13, 2020
Igen, köszönöm! Ne nézd a régi kódot, mert van új, ahol rengeteg rész át lett írva már!
Egy kicsit rendbe szedem, és elküldöm, és jelölöm a sebességérzékeny pontokat, mert nagyon sok hibát kiküszöböltem, rájöttem, hogy a burkológörbék nem lehetnek lineálisak, hanem valamilyen exponenciális görbét kell kreálnom, így sokkal finomabban szabályozhatóak, a modulátorok, illetve az effekt rész is új motort kapott! A memóriaírás egyszeri alkalom, nem árt ha gyors, de azt a részt még nem teszteltem, mert még változnak a hangszínparamétereim is, az kb a legvége mert ugye egy új feltöltésnél, minden régi adatnak kampec. A pointeres cikket átrágom, hátha valahol tudom használni... A hozzászólás módosítva: Máj 13, 2020
Ez így rendben van. Remélhetőleg a FET lábai sincsenek összekeverve.
Most akkor ebben az állapotban (amikor a Q1 tranzisztor lehúzza földre a GATE elektródát) kellene körbeméregetni, hogy mi van a TEMP_SENSE ponton, illetve a műveleti erősítő lábain.
Memória feltöltésre és másolásra igénybe lehet venni a DMA-t is. Ha csak kivárod amíg elkészül a DMA tranzakció akkor nem lesz gyorsabb, de ha a művelet elkészültéig más tevékenységet csinálsz. akkor sok processzor időt lehet spórolni.
Ha mernéd tömbökbe helyezni az összetartozó változókat, akkor lényegesen egyszerűbben kezelhetnéd őket.
Ezzel a példával viszont biztosan a lényeges részeket gyorsíthatnád: (A // mögé rakott sorokat cseréltem ugyanazok tömbösített megoldásaira.)
Ez csak egy példa a sok számításaid közül.
Igen ezzel heteket töltöttem el, hogy tömbökben legyenek már így is. De bizonyos esetekben, egyszerűen belaggolt tőlük, szerintem pont azért mert van benne egy for ciklus számlálóléptetéssel, és emiatt mindig visszakoztam. De ha jól tudom azt az opciót fogom használni, hogy tömbök lesznek, de egyenként kapnak értéket, akkor hátha gyorsabb futású lesz az összetartozó értékek miatt. Tehát teljesen igaz, nem merem, és tudom, hogy emiatt nagyon csúnya a kód. (De ne a régi kódot nézd, bár ebben teljesen igazad van, mert ez ebben sem változik)
Egyébként a sebességért a főprogram felel. Ami meg lényegtelen még, az a generátorinit, a program illetve az effect. Az effect részt nem is használom. A főprogiban(analogszintiharminchat) az 1387.sornál, az eqreverb rész, ahol páros és páratlan bufferindexenként keverem a kórus illetve reverb effectet az eredeti jelhez, ami rengeteg erőforrást elvisz. Illetve a controller rész, potik és gombok beolvasása nem tudom lehet-e gyorsabb? Illetve az lcd rész lcdreefresh eljárása is lefut minden buffer*frameperiódusban, (46.sor)így az is viszi az erőforrást... Ha nézegeted, akkor inkább ezeket
A csatolt hangminta a hangszer saját 12bites hangja, semmilyen külső effekt nincs rajta...
Dobd ki az LCD-t vezérlő IIC modult és használj 8 bites adatvonalat.
És minden be lassulás csökkenni fog.
Ezt kibeszéltük pár hete. Elvileg 1 karaktert léptetek vagy írok egy időpontban. Külön algoritmussal kezelem, hogy mikor hova kell írni, és lépni az lcd-nél. Bár lehet, hogy lehet még azon az algoritmuson javítani. Minden programbeli írás, csak egy tömbbe ír, az lcdreefrish vezérli, a kiírást. Mondjuk itt a léptetés folyamatosan megy állandóan, de így legalább kiszámítható és állandó az algoritmus gépigénye.
Ok! Azt elismerem, hogy a for ciklusos érték adás több időbe kerül, mint a sor folyamatos.
De a tömbösítésnek hasznát vehetnéd máshol is. Pl. a MIDI 10. sorától kezdődő switch (generatornumber) 6 szoros elágazás helyett lehetne csak egyszerűen:
Csak egységesen kellene kezelni mindent 0-ával kezdeni. A hozzászólás módosítva: Máj 13, 2020
Ezt holnap megpróbálom! Ott nagyon sok időt veszítek! Köszönöm!
Hát zseniális vagy! Nem hagyott nyugodni megcsináltam! Lassabb biztosan nem lett, mert működik!
És még lehet hány ilyen pont van... Holnap amit lehet átírok tömbbé, és aztán újra átnézem a kódot!!! Megyek valamivel, már eddig is tartoztam! (annyi, hogy a generatornumber változó is 0-6-ig megy, de ez egyértelmű...) A hozzászólás módosítva: Máj 13, 2020
|
Bejelentkezés
Hirdetés |