Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   33 / 153
(#) horcsab hozzászólása Feb 28, 2011 /
 
Melyik verziójú fordítót használod? Most szívtam a C30-al, a v3.25-ben a libeket átalakították.
(#) watt válasza horcsab hozzászólására (») Feb 28, 2011 /
 
Ha tőlem kérded, délután megmondom, fejből nem tudom...
Átalakították? Hogyan?
(#) trudnai válasza watt hozzászólására (») Feb 28, 2011 /
 
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...
(#) horcsab válasza watt hozzászólására (») Feb 28, 2011 /
 
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.
(#) watt válasza horcsab hozzászólására (») Feb 28, 2011 /
 
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!
(#) watt válasza trudnai hozzászólására (») Feb 28, 2011 /
 
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!
(#) watt válasza watt hozzászólására (») Feb 28, 2011 /
 
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á!
(#) watt hozzászólása Feb 28, 2011 /
 
É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!
(#) kissi hozzászólása Márc 1, 2011 /
 
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
(#) watt válasza kissi hozzászólására (») Márc 1, 2011 /
 
Olvastad az előző hozzászólásomat? Nekem gyanús, hogy valamit eltoltak a 3.37-ben!
(#) kissi válasza watt hozzászólására (») Márc 1, 2011 /
 
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
(#) trudnai válasza kissi hozzászólására (») Márc 1, 2011 /
 
Erdekes - a C forrasa ennek a ket reszletnek mi volt?
(#) watt válasza kissi hozzászólására (») Márc 1, 2011 /
 
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...
(#) trudnai válasza watt hozzászólására (») Márc 1, 2011 /
 
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)
(#) watt válasza trudnai hozzászólására (») Márc 1, 2011 /
 
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!? (ezt is a 3.34-el...)
(#) trudnai válasza watt hozzászólására (») Márc 1, 2011 /
 
56KW? Mi a nyavajat faragsz? Ez meg mindig a haz automatizalo kutyud? Gondolom tele van printf-ekkel meg float pointos szamitasokkal?
(#) kissi válasza trudnai hozzászólására (») Márc 1, 2011 /
 
Mind a két helyen:

  1. while (BusyXLCD());
ez látszik a kékkel kijelölt helyeken, de mivel nem jól fejezi be, ezért nem lép ki !

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
(#) potyo válasza trudnai hozzászólására (») Márc 1, 2011 /
 
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.
(#) icserny válasza kissi hozzászólására (») Márc 1, 2011 /
 
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...
(#) watt válasza trudnai hozzászólására (») Márc 1, 2011 /
 
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!?
(#) kissi válasza icserny hozzászólására (») Márc 1, 2011 /
 
Köszi, ezt a részt láttam benne ( hogy 16 bites adattal csinál valamit ), de miért? Semmit nem változtattam a függvényen, ugyanebben a fájlban használom korábban többször is, ott 8 bitesként teszteli: mitől változhat meg a visszatérési érték ( még egyenlővé sem tettem semmivel, csak a korábbi "if" van ott ! ) ?

Steve
(#) icserny válasza kissi hozzászólására (») Márc 1, 2011 /
 
Idézet:
„de miért?”
Ezt nem tudom, nincs ilyen fordítóm.
(#) kissi válasza icserny hozzászólására (») Márc 1, 2011 /
 
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
(#) potyo válasza watt hozzászólására (») Márc 1, 2011 /
 
Kikérem magamnak, ma is csak a főnökökkel mentünk sörözni és az asztal alá ittam őket
(#) trudnai válasza kissi hozzászólására (») Márc 2, 2011 /
 
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.
(#) kissi válasza trudnai hozzászólására (») Márc 2, 2011 /
 
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 ? ), ezért nem vettem figyelembe ( írtam, hogy kezdő 'C'-s vagyok )! Később nem is gondoltam erre ( inkább a program mérete körül jártak a gondolataim ), míg icserny írására nem kezdtem gondolkodni ezen a lehetőségen. Hozzájött még az az olvasott gondolat, hogy "alapból minden fv-t extern-ként kezel", ezért eszembe sem jutott, hogy a fv. visszatérési értékéről nem tud !
Mindenesetre jó 2 éjszakámba került ez a szakmai fejlődés...!

Steve
(#) jozs hozzászólása Márc 2, 2011 /
 
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.
(#) watt válasza jozs hozzászólására (») Márc 2, 2011 /
 
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!
(#) atis28 hozzászólása Márc 2, 2011 /
 
Ü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.
  1. PORTB = PORTB & 0xF0;
  2. PORTB = PORTB | 0x0_;

... 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.
(#) watt válasza atis28 hozzászólására (») Márc 2, 2011 /
 
Parancs nincs, maszkolni kell.
Következő: »»   33 / 153
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