Fórum témák
» Több friss téma |
A főprogramban kimaradt a IRANY vizsgálata.
A megszakításból kimaradt a STATUS regiszter mentése és visszatöltése. Az adatlapjában benne van hogyan lehet ezt megtenni.
Létezhet olyan eset amikor egy szubrutin verem használata nélkül kerül lefordításra?
Ugyanis van olyan szubrutinom, ahol nem látok LNK #lit14, ULINK utasításokat, illetve az ezeknek megfelelő utasítássorokat sem a kódban. Verem esetén értem, hogy a lokális változók és az átadott paraméterek az FP keretmutató segítségével bázisrelatív módon címezhetőek (MOV [W14+Slit10],Wnd). Igaz az én példámban mindenhol az SP (W15) került használatra bázisként, talán ez is a fordító optimalizációja? A visszatérési érték(ek) szerintem nem kerülnek a verembe: 16 bites eredményig a W0 tárolja, felette pedig W0 -tól kezdődően helyezkednek el.
megj:
Nincsenek visszatérési értékek csak érték. ![]()
Hát... Erre nem tudok válaszolni, mert nem ismerem a fordítókat.
Annak idején MikroBASIC-kel kezdtem a PIC24 programozást, és mindig megnéztem hogy az egyes programrészeket hogyan fordítja Assemblyre. Ma már csak Assemblyt használok, mert akkor tutira az lesz, amit én akarok.
Nagyon köszönöm a segítséget! Majd estére megnézem.
Jól mondják, hogy az ember mindig hibázhat
![]()
Ez valóban hiba, de nem ettől nem működik. A status regisztert csak a bankváltásnál használja a program, egyébre nem, így közömbös az értéke. A baj az amit ktamás66 mondott. Hiába változik megszakításban az irány, a főprogram sehol sem használja az értékét.
Csak bankváltásnál? Akkor az alsó 3 bitje (név szerint C, DC, Z) az smafu? Pont azok a legfontosabbak. Ha a programodban bárhol egy feltétel létrejötte és az azt követő feltételes elágazás közé beesik egy megszakítás, és az más STATUS értéket hagy maga után egészen mást fog csinálni a programod. Ráadásul a megtalálása sem könnyű, mert teljesen véletlenszerű, hogy hol milyen hibákat fog okozni.
A hozzászólás módosítva: Ápr 21, 2018
Csináltam egy gyors tesztet:
1...7db (max. 16-bites) változó esetén a paramétereket a W0...W7 regiszteren keresztül adják át a szubrutinnak. Ott LNK utasítással helyet foglalnak és elhelyezik őket. Minden hivatkozás W14 offszetes indirekt címzéssel történik. Kilépéskor a visszatérési érték a W0 regiszterbe (-től) kerül és a keret ULNK parancsra felszabadul. Több paraméter esetén a maradékot a vermen keresztül adják át, de a szubrutinon belül akkor is W14 regiszterrel hivatkoznak rájuk (mínuszos offszettel). Idézet: „Csak bankváltásnál? Akkor az alsó 3 bitje (név szerint C, DC, Z) az smafu?” Ez a feltöltött program egyáltalán nem használja azokat a biteket. Egyébként persze Neked lenne igazad, menteni kell a STATUS regisztert is. A hozzászólás módosítva: Ápr 21, 2018
Eddig egyszer sem csinált ilyet nekem, még a sokat szidott XC8 midrange CPU esetén sem.
Jé, tényleg nem használja
![]()
Én konkrétan erről a programról beszéltem, hogy nem használja, nem általánosságban.
![]()
Üdv! Már két hete ezzel a programmal kínlódok. Mivel csak tanulom az assemblyt, ezért nem találom a lehetőséget, hogy hogyan hivatkozzak az IRANY-értékére. Azt már többféleképpen megcsináltam, hogy készítettem egy IRANY cimkét és próbáltam hivatkozni rá, de semmi változás.
Már többször végig olvastam a leírást, de nem megy. Jó lenne valahogy életre kelteni ezt a programot, mert a leírásban szereplő többi program működik, ez nem akar sikerülni. Szeretném megtanulni ezt a TIMER-t is. Ha tudnál segíteni, ill. egy példaprogramot mutatni, hogy mit csináljak? Nagyon köszönöm előre is a segítséget Neked és Mindenkinek!
A programban az IRANY egy memória rekesz címe hiszen a CBLOCK -ban definiált.
Hivatkozni rá többféle képen is lehet:
stb.
Nem a címkével van a gond. Amikor megnyomod a gombot egy IRANY nevű regiszter értékét változtatja. Ennek a regiszternek a bitjei döntik el, hogy merre legyen az irány. A gond azzal van, hogy visszatérve a megszakításból sehol nem foglalkozik vele, hogy az IRÁNY registerben milye változás történt, csak fut a program magában, pedig a megszakítás a gombnyomásra megtörténik és változik is a regiszter értéke, csak éppen nincs felhasználva sehol.
Megpróbálom majd kijavítani a hibát ha lesz egy kis időm.
Nagyon köszönöm mindkét bejegyzést!
Pali79 javaslata alapján egyébként szerintem Te is meg tudod oldani.
A főprogramm inicializálás utáni része meg kell nézze, hogy hogy áll az IRÁNY és ennek megfelelően a JOBBRA vagy a BALRA részre kell ugorjon. Mivel IRÁNY csak 0x00 vagy 0x01 lehet, az LSB vizsgálata megadhatja, hogy balra vagy jobbra. (BTFSS IRANY,0 után két GOTO) Innen - az utolsó GOTO - az előbbi IRÁNY vizsgálatra ugorjon. A FORGJ gondolom "visszahurkolja" a fényt. Érzés szerint azt is az IRÁNY tesztelésre kell visszaküldeni. A BALRA meg ugyanez (most egyébként is a JOBBRA -ba ugrik) És egy megjegyzés: kommentálj mindent, főleg ugráscímeket, szubrutinokat, változókat. Így Neked és a segítőknek is egyszerűbb. A hozzászólás módosítva: Ápr 25, 2018
Sziasztok!
Közel 10 éve foglalkozom PIC mikrovezérlőkkel, kezdetek óta a MikroE fordítót használom. Egy újonnan induló projektemben egy relative új MCU-t szereténk használni (PIC24FJ256GA702) - MikroE fordítók ezt (még) nem támogatják. A projekt sürgőssége miatt nincs időm kivárni, hogy bekerüljön a MikroE támogatott processzorok közé - így MPLAB-X használatára "kényszerülök". Ma feltelepítettem, kattintgattam benne pár percet - összességében nem tűnik vészesnek. Szerintetek mire készüljek IDE váltás során? Nehéz hozzászokni? Mennyire hasonló a két fejlesztőkörnyezet? Megtörténhet, hogy nem ide való - ebben az esetben elnézést kérek a moderátoroktól
Szia Gyoran! Köszönöm az infót! Majd megpróbálom hátha sikerül.
Nincs időm teljesen végignyálazni az egészet és kommentek nélkül elég nehéz is, de csiszoltam rajta. Nem mondom, hogy tuti tökéletes, de gondolatébresztőnek talán jó lesz.
Biztos sikerül. Mindent tudsz hozzá.
Szia Pali79! Nagyon-nagyon köszönöm, hogy kijavítottad, kipróbáltam és megy rendesen!!!
Természetesen nagyon köszönöm mindenkinek aki segített! ![]() ![]()
Hallgatok rátok és minden programnál megcsinálom a kommentet.
Sziasztok!
Sokszor olvasom itt a fórumon, hogy többen küszködnek szintillesztéssel. A neten találtam egy olcsó, gyári megoldást rá. 4 csatornás, kétirányú szintillesztő.
Az a cucc teljesen dokumentálatlan. Kapcsrajz nélkül én nem hiszek el semmit
![]()
Minek ehhez ilyen board? Én mindig ezt a BSS138-as kapcsolást ajánlottam ha valaki kédezi és személyesen is ezt használom. Rátervezem a nyákra.
Talán azért mert nem mindenki tud/szeret smd apróságokkak forrasztgatni.
|
Bejelentkezés
Hirdetés |