Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: (Felhasználó 1542), idő: Ápr 3, 2006
Lapozás: OK   20 / 118
(#) BlackStar hozzászólása Ápr 23, 2009 /
 
Sziasztok!
Pár napja kezdtem el foglalkozni az USB és PIC kapcsolatával. Kezdésnek gondoltam megfelel a „ex_usb_serial.c” példa program. Az XP felismerte a hardvert és telepítette a drivert „cdc_NTXPVista.inf”. A problémám hogy Vista (64bit) sajnos nem ismeri fel. Tudna valaki segíteni hogy miként lehet 64bites Vista alá feltelepíteni .
Előre is köszönöm.
(#) potyo válasza BlackStar hozzászólására (») Ápr 23, 2009 /
 
A C18 fordítóhoz íródott USB csomagban is van CDC demó, próbáld meg azt is, hátha az menni fog.
(#) El_Pinyo válasza BlackStar hozzászólására (») Ápr 23, 2009 /
 
Szia!
Sajnos érdemben nem nagyon tudok segíteni, USB- vel kapcsolatban nincs komolyabb tapasztalatom. Ránéztem azért a CCS honlapjára, azon belül is a fórumra és találtam valamit, ami használható lehet.
Bővebben: Link
Üdv.
(#) BlackStar válasza potyo hozzászólására (») Ápr 24, 2009 /
 
Szia!
Kipróbáltam a C18-hoz a CDC demót. Tökéletesen működött XP és Vista (64bit) alatt is. Sajnos a C18 nem nagyon ismerem. CCS fordítót használok már rég óta. Ezért gondoltam hogy ehhez a fordítóhoz tartozó demót tanulmányoznám. WinXP alatt tökéletesen megy a bootloader része is de valahogy a Vistával nem tudom megetetni a hardvert. De nem adom fel
(#) BlackStar válasza El_Pinyo hozzászólására (») Ápr 24, 2009 /
 
Szia!
Köszönöm a linket.
Délután megnézem hogy mit szól hozzá a Vista.
Szerintem a C18 "mchpusb.inf" drivere van átírva.
Remélem jó lesz.
(#) Thowra hozzászólása Ápr 29, 2009 /
 
Üdv mindenkinek!
Most ismerkedek a CCS vel komolyabban és belefutottam két problémába. Az első az, hogy nem tudom hogy kell megoldani a több feltétel egybe rakását (A=1 ha B=0 és C>5). Jelenleg két If van betéve egymásba. A másik gond a Watch Dog Timer. Hogy működik? Úgy tudom van egy számláló amit időnként törölni kell, ha ez elmarad akkor reset. Hol és mit kell megadni neki? Ha lehet kicsit szájbarágósan, ez lenne az első progim a ledvillogtatás után. Előre is köszönöm.
(#) El_Pinyo válasza Thowra hozzászólására (») Ápr 29, 2009 /
 
Szia!
Az első kérdésedre a válasz: logikai ÉS (&&) operátor használatával. Pl.:
  1. if(B==0 && C >  5)
  2.        A = 1;

A WDT használatában pedig segít a CCS-C Helpje, elég jól le van benne írva a használata, és példa program is van hozzá.
Egyébként nem feltétlenül szükséges a WDT engedélyezése, le is tudod tiltani a config- ban.
Üdv.
(#) Thowra válasza El_Pinyo hozzászólására (») Ápr 29, 2009 /
 
Üdv!
Köszönöm a gyors segítséget!
A WDT azért kellene mert egy folyamatot kell figyelnem. Ha minden rendbe megy akkor kezdődik előlről, ha viszont megakad akkor jól jönne valami ami kibillenti ebből az állapotból. Jelenleg ki van kapcsolva.
(#) potyo válasza Thowra hozzászólására (») Ápr 29, 2009 /
 
Inkább a programot kellene olyanra megírni, hogy sajátmaga felismerje, hogy megakadt a folyamat. A WDT az nem arra van, hogy a hibásan megírt programot javítsa!
(#) MPi-c válasza Thowra hozzászólására (») Ápr 29, 2009 /
 
A WDT-vel csak óvatosan, főleg a fejlesztés alatt. Csak ha már minden tökéletesen megy, akkor szabad elővenni.
A WDT-ről:Bővebben: Link
A ccs Reference Manual-ja a Functional Overviews részben leírja hogyan használható (a PIC16-nál és a PIC18-nál eltérő módon!) és néhány pre-processort is meg kell hozzá nézni.
(#) Thowra válasza MPi-c hozzászólására (») Ápr 29, 2009 /
 
Üdv!
A program kész de időnként leáll.
Köszönöm a segítséget, olvasgatok.
(#) potyo válasza Thowra hozzászólására (») Ápr 29, 2009 /
 
Meg kell találni, hogy mitől áll le. Ha létre tudod hozni azt, amitől leáll, akkor az a program vagy az az áramkör még nem kész!
(#) Thowra hozzászólása Máj 7, 2009 /
 
Üdv mindenkinek!
Tudom nem szép utasítás de szükségem lenne GOTO ra. próbáltam keresgélni de hiába, nem működik.
  1. .......
  2. eleje:
  3. ...
  4. ...
  5. goto eleje;

Így próbáltam.
Mi lehet a gond?
(#) Jossz válasza Thowra hozzászólására (») Máj 7, 2009 /
 
Szia! A GOTO utasítás használata nemcsak hogy "nem szép", hanem az álmoskönyvek, no meg a CCS Reference Manual szerint is távolról kerülendő!! Az ilyen "nyom nélküli" ugró utasítást szinte minden struktúrált programozás nyelv, - ha nem is tiltja, de semmiképpen sem javasolja - ugyanis mint szerkesztés, mint végrehajtás szempontjából rettenetes módon összekuszálja a programot. Azt nem tudom, hogy speciel a Te esetedben miért nem működik (magam anno a Commodore Basic időkben használtam utóljára), de én mindenképpen óvnálak a használatától. Próbáld megoldani a problémát ciklussal, függvényhívással vagy más hasonló módszerrel, amit aztán hibakeresés alkalmával is tudni fogsz követni.
(#) Thowra válasza Jossz hozzászólására (») Máj 7, 2009 /
 
Üdv!
A progiba mindig az elejére kellene visszalépni, feltételfüggően. A leg egyszerűbbnek a goto tűnik, mivel mindig azonos helyre kell visszatérni, így nem lesz kusza. A gond az, hogy nem működik valamiér, idő pedig kevés van más megoldásra. A progi végén jött elő a visszaugrás igénye.
(#) Jossz válasza Thowra hozzászólására (») Máj 7, 2009 /
 
Ha kevés az idő, akkor sem kell szükségszerűen rossz megoldást választani. Ez a probléma pl. szépen megoldható egy WHILE ciklussal, amit kiértékelhetsz a ciklus elején (WHILE), de megteheted a ciklus végén is(do WHILE) és annak megfelelően a végrehajtás visszakerülhet a progi elejére, ami a ciklus eleje is egyben. (Lásd. Ref. Manual)
(#) Thowra válasza Jossz hozzászólására (») Máj 7, 2009 /
 

Pedig ez lett volna a leg jobb/egyszerűbb megoldás.
A progi szinte végig IF ből átt, ha igaz megcsinálja a feladatát, ha hamis akkor előlre kellett volna ugrani.
Sajna nincs fent a gépen a doksija, csak a progi megy minimális részekkel, súgó sincs se példatár. Ciklust ha lehet hanyagolnám, egy utasítás helyett. A progi saját cucc lenne, kb 1 órát kellene kibírnia, utána akár le is fagyhat, összeomolhat, amit akar, csak ne késsen a vége. A goto lenne a megoldás.
(#) Thowra válasza Thowra hozzászólására (») Máj 7, 2009 /
 
Megoldódott, elírtam.
(#) potyo válasza Thowra hozzászólására (») Máj 7, 2009 /
 
Végtelen ciklus miért nem jó?
(#) Thowra válasza potyo hozzászólására (») Máj 7, 2009 /
 
Üdv! A progi felépítése:
for(;
eleje:
if1 ha igaz megy tovább, megcsinálja a dolgát.
Ha hamis goto eleje
if2 ha igaz megy tovább, megcsinálja a dolgát.
Ha hamis goto eleje
És így tovább. Biztos vagyok benne, hogy lehetne más megoldást is alkalmazni, de sajnos se időnk nincs se komolyabb programozási ismeret. Már annak is örültünk ha elindult a cucc, finomítani fogjuk később és ha lesz rendes ismeretünk a CCs ből akkor nem használjuk a goto t.
(#) icserny válasza Thowra hozzászólására (») Máj 7, 2009 /
 
Idézet:
„for(; eleje: if1 ha igaz megy tovább, megcsinálja a dolgát. Ha hamis goto eleje if2 ha igaz megy tovább, megcsinálja a dolgát. Ha hamis goto eleje”


A for ciklus törzse körül azért van egy kapcsos zárójelpár, ugye?

Goto helyett így miért nem jó?
  1. for(; {
  2.   if1 ha igaz megy tovább, megcsinálja a dolgát.
  3.     Ha hamis break.
  4.   if2 ha igaz megy tovább, megcsinálja a dolgát.
  5.     Ha hamis break.
  6.   ...
  7. }


Idézet:
„sajnos se időnk nincs se komolyabb programozási ismeret.”

Erre hol adnak diplomát? :no:
(#) m2attila válasza czinka hozzászólására (») Máj 7, 2009 /
 

Köszi az CCS update-t!
(#) Thowra válasza icserny hozzászólására (») Máj 8, 2009 /
 
Üdv!
A progi végül nem lesz befejezve
Nem diplomára kellett volna hanem egy végső próbálkozás lett volna a mars küldetésre mert a "profi" programozók otthagyták a dolgot mint eb a ...... . Mivel a csapat többi tagjának nem volt semmiféle programozási tudása így azt próbáltuk írni ami ismerős volt. Régebben önerőből pascaloztam, utána delphiztem, pár dolog jól jött belőle, pl goto. Köszönöm a segítséget, legközelebb fogom alkalmazni.
(#) icserny válasza Thowra hozzászólására (») Máj 8, 2009 /
 
Idézet:
„Nem diplomára kellett volna hanem egy végső próbálkozás lett volna a mars küldetésre”

Ja, akkor ezer bocs! Azt hittem, ez is egy "sietős algoritmussal" megvalósított diplomamunka lesz (annak van most a szezonja).

Sajnálom, hogy most nem jött össze, pedig a CCS-nek nagyon barátságos Help-je van.

(#) kurucz_peter hozzászólása Máj 18, 2009 /
 
Szevasztok,

lenne egy kérdésem a CCS Compiler működésével kapcsolatban. Az adattípusok terén van némi homály a fejemben.
példa:
int32 a;
int16 b;

b = 50000;

a = (int32)b * 2); ez helyes. eredménye 100000.
a = 2 * (int32)b; helytelen. eredmény: 100160
hogyan van ez? Egy ilyen elég nagy kavarodást tud okozni a kódban. Hol lehetne utánaolvasni annak, hogy a kasztolás hogyan működik a ccs-ben?

Köszi!

Üdv:
P
(#) sysy válasza kurucz_peter hozzászólására (») Máj 18, 2009 /
 
Pontosan miért is akarsz kasztoli, mikor a baloldal értéktartományába illeszkedik a jobboldal értéktartomány és nem kell konvertálni.

sysypet
(#) potyo válasza sysy hozzászólására (») Máj 18, 2009 /
 
A C mindig a legmagasabb cast-al rendelkező operandus alapján végzi a műveleteket. Tehát ha összeszorzol két 8 bites számot, annak az eredménye is 8 bites, hacsak nem volt valamelyik tényező castolva. Hiába áll a kifejezés bal oldalán 16 bites változó, akkor is levágja a felső 8 bitet. Ezért kell castolni 32 bitesre a két szám egyikét legalább.
(#) potyo válasza kurucz_peter hozzászólására (») Máj 18, 2009 /
 
Idézet:
„Hol lehetne utánaolvasni annak, hogy a kasztolás hogyan működik a ccs-ben?”


Csakis a CCS-hez adott súgóban, illetve a honlapjukon.

Pl. nézd át innen: Link
(#) kurucz_peter válasza sysy hozzászólására (») Máj 18, 2009 /
 
Helló!

az általam írt példában mindenképpen szükség van kasztolásra, mivel egy unsigned int16 0 és 65535 közti értéket vehet fel. Így az eredmény (100000) int16-on nem ábrázolható. Az teljesen világos, hogy két int8 szorzata int8-ként fog ábrázolódni. Ezért kell a kasztolás, ami számomra érthetetlenül forcsán működik. Az in32-ben tárol érték attól függ, hogy az szorzás operátor mely oldalán mely operandus áll! Szerintem ez így nem OK.

P
(#) icserny válasza kurucz_peter hozzászólására (») Máj 18, 2009 /
 
Így próbáld meg:
  1. #include <16F690.h>
  2. #use delay(clock=6144000)
  3. #use rs232(baud=9600,parity=N,xmit=PIN_B7,rcv=PIN_B5,bits=8)
  4.  
  5. int16 i,j;
  6. int32 a,b;
  7.  
  8. void main()
  9. {
  10.  i=50000;
  11.  j=14;  
  12.  a=((int32)j*i);
  13.  b=((int32)19*i);
  14.  printf("a=%lu  b=%lu\n",a,b);
  15. }


Eredmény: a=700000 b=950000
Következő: »»   20 / 118
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