Fórum témák
» Több friss téma |
Melyik verziójú fordítót használod? Most szívtam a C30-al, a v3.25-ben a libeket átalakították.
Ha tőlem kérded, délután megmondom, fejből nem tudom...
Átalakították? Hogyan? ![]()
De van ilyen lista, amit mar emlitettem a preprocesszor kimenete -- ami ugye az osszes makrot kifejti, beszurja az include file-okat stb. Csak most nem tudom C18-bol hogy lehet ezt kicsikarni, de majd utana nezek ha erdekel.
Viszont ahogy mondtam annak a listaja igen terjedelmes lehet...
Mint írtam ez C30, a C18-nál nemtudom van-e ilyen?
A projektben be kellett állítanom a -legacy-libc használatát. Csak utánna volt hajlandó működni. Migrating to Version 3.25 C30 V3.25 conatains a different version of Lib C. For customers wishing to continue to use the version of lib C supported by earlier version of MPLAB C30, the command line option -legacy-libc will make this easy to manage.
Megnéztem, 3.34-es, és a források szerint a 3.36-os kéne minimum. Töltöm a 3.37-est, meglátjuk hátha!
Megjegyzem, hogy a 3.34-es is simán fordította, fut is a program, csak ezt az open dolgot nem kezelte. Nekem az a gyanúm, hogy nem a verziótól lesz, de nem kiabálom el!
Persze, hogy érdekel, látnom kéne valahogy mit fordított bele. Persze lehet, hogy így sem lenne könnyű követni, mert hogy azonosítanám, ha nem jelzi a listában a feltételt, vagy jelzi? Az, hogy befordított egy sort, ílyen formában áttekinthetetlen. De azért ha lehet valahogy listát készítetni, az érdekel!
Fenn van a 3.37, változás az ügyben nulla. Egy régi motoros az mcc18 terén biztosan meg tudná mondani mitől van, én nem jövök rá!
![]()
És most egy kis svédcsavar! Lefordítottam a 3.37-el, hibát nem írt, minden jónak látszott, de a program csak részben működött, mert nem kapott új IP címet a DHCP-től a panel. Visszairányítottam a 3.34-re és fordítás után újra működik! Ez nagyon gáz!
![]() ![]()
Sziasztok!
PIC18F4450-re készítek egy programot és az LCD-re íráskor a Busy flag ellenőrzésekor hibám van (A C18 ellenőrzését használom, MPLAB 8.56, C18 3.37 ). Az az érdekes, hogy a program előző területén többször is jól működik ( 6-8 helyen beírva! ), viszont ezen a területen már nem. A debuggolás során is itt "merevedik le", pedig látom, hogy visszaolvassa a busy=0-t! Az asm lista alapján látszik, hogy nem ugyanúgy fordul le ( nem értem mit akar a szorzat eredményekkel ! ) és ebből lehet a gond, de nem tudom, hogy mit kell beállítani ![]() A PIC adatlapja alapján nem látom, hogy másképpen kellene kezelni a programmemória ezen részét ( megjelent a 13.biten is az 1! ), lehet, hogy a linkert kellene állítanom? De hogyan és hol? Mellékeltem a fordítási képeket! Ha van ötletetek, segítsetek! Köszi! Steve
Olvastad az előző hozzászólásomat? Nekem gyanús, hogy valamit eltoltak a 3.37-ben!
Olvastam, csak nem láttam összefüggést, mert Te mást csinálsz. Persze ettől függetlenül lehet, de én még most kezdtem és eddig jó volt...
Annyit nem írtam még, hogy lejárt a próbaverzió ideje, de nem olvastam, hogy ez memóriaméretet is érintene, csak optimalizálást ! Steve
Erdekes - a C forrasa ennek a ket reszletnek mi volt?
Nekem nem volt erőm összehasonlítani a 50kWord forrást a két fordító esetében, de az elég gáz, hogy nem egyformát fordítottak és az újabbik nem is működik. Ezért gondoltam, hogy verzió gond. Egy próbát megérne talán...
Amugy az nem nagy gond, ha mas verzioju fordito mas kodot general -- tulajdonkepp ez el is vart, hiszen valamit csak javitottak
![]() Ami nem elvart azonban, hogy roszabb kodot general, es ami ketseg kivul elfogadhatatlan, hogy mukodeskeptelen kodot kapunk eredmenyul... Amugy ilyen dologok miatt nem szokas nagyobb szoftver haakban gyakran forditot cserelni, csak ha mar par eves tesztelesi folyamatnak ala volt teve (pl amatorok mint amilyenek mi vagyunk, ill kisebb szoftver hazak mar sikerrel hasznaljak a forditokat tobb eve)
Igen, ez jogos. A méretről jut eszembe, hogy próbáltam az optimalizációt. 56KW helyett 45KW lett a kód! Ez igen figyelemre méltó eltérés, nemde!?
![]()
56KW? Mi a nyavajat faragsz?
![]()
Mind a két helyen:
![]() Előtte 6-8 helyen használtam ( a programon belül! ), ott mindenhol jól fordítja, ettől a ponttól kezdve viszont minden más helyen rosszul! Ezért gondolok valami mérettel összefüggő problémára, de nem tudom, hogy miből ered !? Steve
Ez most Ethernetes cucc, és még egyelőre sokminden van, amit nem gyomlált ki belőle, azért ennyi, illetve ha jól emlékszem, ebben a méretben benne van a weboldal is, amit a pic előállít, nem csak maga a pic kódja ennyi.
A "rossz" kód is teljesen logikus és működő kód, csak adott helyzethez nem passzol. Ebből a kódból úgy tűnik, hogy valamiért úgy vette, hogy a függvény visszatérési értéke 16 bites, s ezt vizsgálta....
Magyarázat: a C18 konvenciója szerint a 16 bites visszatérési értéket a PRODH : PRODL regiszterekben kell visszaadni. A fordított kód ezeket másolta az ACCESS blokk 0x014 és 0x15 rekeszeibe (__tmp0_), majd megengedő vagy kapcsolattal nézte meg, hogy a kétbájtos adat nulla-e vagy sem. A dolog csak amiatt sántít, hogy a BusyXLCD() nem 16 bites, hanem 8 bites adatot ad vissza (nálam legalábbis így van deklarálva az xlcd.h-ban), ennélfogva az a WREG-ben adja vissza az eredményt, a PRODH : PRODL regiszterekben pedig valami szemét van, ami nem fog onnan eltűnni...
Is-is, Ahogy potyo mondja! Lehet, hogy le kéne lőni, mert már túl sokat tud rólam!
![]() ![]() ![]() A fordítási mizériát azért kérdeztem meg, mert nem én követtem el a forras nagyját, én csak próbálom használni. Tehát egy gyári beállítás miatt nem fogadja az usart.h -t. A fő kérdés, vajon milyen beállításokkal lehet kizárni a fordításból a gyári C18 fordító headereit!?
Köszi, ezt a részt láttam benne ( hogy 16 bites adattal csinál valamit
![]() Steve Idézet: Ezt nem tudom, nincs ilyen fordítóm. „de miért?”
Sikerült elgondolkodtatnod és rájöttem a megoldásra
![]() Több modulos programot írok és az egyik modulban nem deklaráltam a busy fv-t külsőként! Eredmény --> másképp fordult le, 16 bites értéket várt vissza! Mégegyszer köszönöm, mert a gondolataid nélkül még nézegetném egy darabig ![]() Mindenesetre 1 pont a Microchipnek, mert ez az én hibám volt ![]() Steve
Kikérem magamnak, ma is csak a főnökökkel mentünk sörözni és az asztal alá ittam őket
![]()
Orulok, hogy megoldodott a misztikum! Amugy nem panaszkodott erre forditaskor? Ilyrenkor azert ki szokott lenni irva, hogy nem talalja a fuggveny deklaraciot es igy feltetelez egy int visszateresut... warningok koztt kellene nezelodni.
Ilyet írt, de mint írtam ez eddig a program méretig nem okozott gondot ( nem tudom, utána valami más algoritmus szerint kezd dolgozni
![]() ![]() ![]() Mindenesetre jó 2 éjszakámba került ez a szakmai fejlődés...! Steve
Köszönöm vicsys!
Utánanézek ez nekem eszembe sem jutott, pedig angol fórumokban kerestem eddig pl: pudn.com egy elég jó hely. Sajnos a picekhez én csak assambley ben konyítok valamennyit én inkább a Silabsos mikrovezérlők felé vagyok nyitott. Talán egy kicsit könnyebb őket programozni(vagy csak azért mert ezen tanultam). Keil fordítót használok.(az sdcc is jó lehet, de nekem nem igazán fordultak be vele a programjaim. Illetve ha valakinek xilinxos ISE problémája van megpróbálok tanácsot adni VHDL/VERILOG. Remélem a linken megtalálom amit szeretnék. ![]() Idézet: „Illetve ha valakinek xilinxos ISE problémája van megpróbálok tanácsot adni VHDL/VERILOG.” Akkor majd néha nézz be ide Bővebben: Link , biztosan örülünk majd a szakértelmednek! Köszi!
Üdv!
Egy olyan kérdésem lenne, hogy hogyan lehet egy PORT alsó 4 bitjét egyszerre, a többi 4 bittől elszeparáltan állítgatni. (mikroC) Vegyük pl. a B portot. Ennek kellene a 0-3. bitjeit állítanom úgy, hogy a 4-7. bitek ne változzanak. Így tehát a (példa) PORTB = FF; utasítás nem jó... De a PORTB.B0 stb. bitenkénti változtatás pedig túl macerás. Létezik erre valami egyszerű parancs vagy ÉS - VAGY kapcsolatokkal kell maszkolgatni? pl.
... Ahol az "_" helyére kerül az új érték. Ezzel csak az a gond, hogy egy nagyon rövid időre ugyan, de a lábak alacsony jelszintet adnak majd, mielőtt az új értéket megkapnák. |
Bejelentkezés
Hirdetés |