Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   56 / 153
(#) k válasza mps hozzászólására (») Máj 8, 2012 /
 
Köszi, ez a C-ben sokat segít, de pont a pic c18 syntaktikája hiányzik belőle.
Most pont ott tartok hogy magát a program működését értem, de ha bele akarok nyúlni akkor egy- egy szintaktikai hibával órákig küzdök.

Pl: a a példaprogramjaim a fejlesztőpanelemhez ccs c ben vannak, és azokat kellene egy két helyen kijavítanom.
(#) k hozzászólása Máj 9, 2012 /
 
[code=c]



uch read_byte(void)
{
uch i;
uch value=0;

static bit j;
for(i=8;i>0;i--)
{


erre a részletre a következő hibát dobta a gép

C:\PICula\ioports\my_ temp.c:174:Error: syntax error
Halting build on first failure as requested.

a 174-es sort a következő:
static bit j;

ilyen jellegű hibák javítása miatt kellene egy microchip c18-hoz való szintaktikát is tartalmazó leírás
(#) pipi válasza k hozzászólására (») Máj 9, 2012 / 2
 
Hali!
Nem világos, ccs-ben írsz progit és mchip C18 szintaktika leírást keresel?
Mindkét fordítónak van helpje, a változó deklarációkat nézd meg bennük.
(#) vilmosd válasza k hozzászólására (») Máj 9, 2012 / 1
 
A C18 telepito konyvtaraban talalsz egy "User Guide" doksit, ami eleg boven leirja a szintaktikat, az utasitasokat es egyaltalan minden hozza kapcsolodo dolgot. Mellette az MPLAB alatt is van "Help".
(#) icserny válasza k hozzászólására (») Máj 9, 2012 / 1
 
Idézet:
„static bit j;”
A C18-ban használható változótípusokról a C18 Users Guide 2. fejezetében olvashatsz. Bit típus nincs.

Ha nincs a telepített fordító mellett, akkor érdemes letölteni, mert a Microchip Help-ekben művészet megtalálni a dolgokat.
(#) k válasza pipi hozzászólására (») Máj 9, 2012 /
 
A kapott példaprogramjaim vannak ccs-ben
ezeket írom át c18-ra. (csak eddig egyszerűbb dolgom volt, mert csak a port bitek deklarációit kellet átírnom és működött a program).
(#) k válasza pipi hozzászólására (») Máj 9, 2012 /
 
Jelenleg a tanulásom menete a következő:

- icserny útmutatása alapján létrehozom a tanuló c és project file-t

- a kapott ccs példaprogramban cserélem a header file -t

-'ráküldöm' a fordítót

- javítom a hibákat
- a működő programot és programrészleteket értelmezem

- kitalálok új funkciót a programnak

- módosítom az eredeti programot úgy, hogy pontosan azt csinálja, amit szeretnék.

(Remélem így már érthetőbb, hogy mit keresett itt a ccs progi és miért a c18 szintaktikai leírását keresem)
(#) k válasza k hozzászólására (») Máj 9, 2012 /
 
A tanulásom másik módja, hogy icserny picula project tanuló file-jait használom, de ott a hardverfüggő beállításokat kell átírnom, de az sem mindig lehetséges.

Pl. nyomógomb kezelés - nálam csak két felhúzó ellenállásos nyomógomb van.
a nyolc nyomógombos panel, az felhúzó ellenállás nélküli, és itt már a más nyomógomb kezelő programra van szükség.

- vagy pl az i wire kipróbálásához nekem más (1820-as) hőmérséklet mérő ic-m van
(#) pipi válasza k hozzászólására (») Máj 9, 2012 /
 
Hali!
bit változó dekrarálása helyett, ha van elég ramod, használhatsz pl unsigned char-t.
(#) Programmer válasza k hozzászólására (») Máj 9, 2012 /
 
A C18 ANSI 89 kompatibilis fordító, nem igazán értem mit jelent az hogy C18 szintaktikai leírás. Ha tudsz írni programot ANSI C-ben azt a C18 biztos le tudja fordítani. Regiszter definíciók, könyvtárak amik könnyítik a munkát már egész más tészta. Ez viszont már nem szintaktika kérdése. Tulajdonképpen minek a leírása kell neked ami segíthet?
(#) k hozzászólása Máj 9, 2012 /
 
Megpróbálom másként feltenni a kérdésemet:
ti miből tanultatok meg a c18-at?

Tehát nem az a gondom, hogy a c-nyelvet nem tudom megtanulni, hanem ahány c fordító, annyiféle c változatot találok.

Kiválasztottam a c18-at, de úgy látszik nincs hozzá egységes átfogó tanulásra alkalmas irodalom.
Olyasmire gondolok, mint a fent is ajánlott C programozási nyelv, de C18-ra.

Így ez az egész tanulási folyamat beláthatatlanul lassú.
Egy - egy szintaktikai hibával, beállítással napokig keresgélni fórumozni- ez nem véges folyamat.
Most éppen a következő hibaüzenetet dobta a gép:


Idézet:


old style function declarations not supported



Ezt épp egy kapcsos zárójel sorára dobta ki.

Most megint kezdjek el megint napokig fórumozni amíg rájövök az újabb hibára?

Azt azért nem hiszem el, hogy a PIC C18 csak szájhagyomány útján terjed, - ezt találta volna ki a microchip?????
(#) Programmer válasza k hozzászólására (») Máj 9, 2012 /
 
Be tudnád másolni azt a sort és a környezetét ahol ezt a hibát kaptad?
(#) potyo válasza k hozzászólására (») Máj 9, 2012 /
 
Értsd meg, hogy nincs olyan, hogy C18 tanulásához irodalom. Van egyfelől a C nyelv, amihez már találtál irodalmat, másfelől a mikrokontroller, ami egy elektronikai eszköz és van adatlapja, annak az az irodalma. A kettőt együtt használva kapjuk a C fordító által kontrollerre fordítható kódot. Meg kell nézni néhány példakódot a kontrollerspecifikus dolgokra, mint pl. a megszakítási rutinok elhelyezése és megjelölése, a konfigurációs bitek beépítése a forráskódba, de ezek mind megtalálhatóak a C18 fordító leírásában, és kb. erről szólnak a példakódok, amiket a C18 is felrak valahová a telepítési mappájába, csak meg kell keresni. Nagyjából ezekben térnek el a C fordítók egymástól, illetve a szállított header fájlokban, könyvtári függvényekben, de ezek megint mind dokumentálva vannak a fordító leírásában.

Én konkrétan több évnyi asm-ezés és némi számítógépen C programozás után álltam neki a C18-nak. Nem volt egy nagy újdonságo, hiszen a szintaktika C, a kontrollert meg ismertem az asm-en keresztül, csak a kettőt kellett ötvözni és már működött is.
(#) Programmer válasza potyo hozzászólására (») Máj 10, 2012 /
 
Idézet:
„Meg kell nézni néhány példakódot a kontrollerspecifikus dolgokra, mint pl. a megszakítási rutinok elhelyezése és megjelölése, a konfigurációs bitek beépítése a forráskódba”

Kicsit pontosítva itt is csak a hova? és a mit? a "kontroller specifikus" a hogyan ugyanaz. Mint már mondtam a C18 egy ANSI C kompatibilis fordító, a megszakítások elhelyezhetők például attribútumokkal (C nyelv tudja), a konfigurációs bitek pedig #pragma direktívákkal.
Ha tudsz C-ben programozni, kell menjen ez is.

Olyan meg nincs, hogy PIC C18 szájhagyomány, a Microchip készített egy C fordítót ami az ő kontrollerükre fordít, ez viszont nem jelenti azt, hogy ne kellene betartsák a C összes szabályát.

Szerk: az idézet potyotól, viszont a válasz k-nak ment..
(#) _vl_ válasza k hozzászólására (») Máj 10, 2012 /
 
Ez az old style function declaration:
  1. void
  2. error(message,a1,a2)
  3.         char *message;
  4.         char *a1;
  5.         int a2;
  6. {
  7.   fprintf(stderr,message,a1,a2);
  8. }

Kb. 25 éve senki nem használja.
Ha szándékosan próbáltad használni, akkor az lesz a baj. Valószínűbb, hogy valami mást szerettél volna, de a fordító "ezt találta", tehát erre panaszkodik.
(#) k válasza _vl_ hozzászólására (») Máj 10, 2012 /
 
Ahhoz képest, hogy 25 éve nem használják, én egy most kapott példaprogramot másoltam be és ott dobta ezt a hibát.
(#) k válasza Programmer hozzászólására (») Máj 10, 2012 /
 
Átgondoltam amit írtatok, és az a legfőbb gondom, hogy kapom a különböző példaprogramokat, c kóddal, lefordított hex- el.
a c kódokban szinte mindegyik esetben hibát talál a fordító, de a mellékelt lefordított hex működik.
ezért nem értem - akkor hol a szabvány ?
ezért kerestem a szintaktikát - hogy a ccs c-t átírjam c18 ba... de
- már a deklarációk is mások
- az ominózus 25 éve nem használt rész is működő ccs programrészlet, csak ccs cben

na mindegy most úgyis majd egy hét külfödi út jön utána folytatom
(#) potyo válasza k hozzászólására (») Máj 10, 2012 /
 
Idézet:
„az ominózus 25 éve nem használt rész is működő ccs programrészlet, csak ccs cben”


Én régóta mondom, hogy hanyagolni kell a ccs-t :yes:
(#) potyo válasza k hozzászólására (») Máj 10, 2012 /
 
Hol találtad ezt a példaprogramot? Mert én is néztem már csomó példaprogramot, de ilyennel nem találkoztam még sosem. Őszintén szólva most hallottam először, hogy ilyen is létezett
(#) Mezoas válasza k hozzászólására (») Máj 10, 2012 / 1
 
Kónya L. féle könyv az jó, de nem 18F4520-ra van kihegyezve és azt nem akarjuk, hogy összezavarjon.
Viszont a PICula projekt az tökéletes neked, dugig van példaprogikkal, azokat érdemes bepötyögni kézzel. Ezt a CSS C-s próbálgatást a saját fordítóval kellene végezni, a kód olyan szintű hordozhatósága amit te elvársz csupán hiú ábránd.
Tehát hajrá, a helyedben csak a PICulát favorizálnám - ha angolul lenne, nemzetközileg is igen nagy népszerűségnek örvendene.
(#) _vl_ válasza k hozzászólására (») Máj 10, 2012 / 1
 
Több dolog keveredik azért abban, amit tapasztaltál.

A C fordító hiába "szabványos", ha az include fájlokra, amiket a környezeteddel kapsz, azokra nem létezik szabvány. Innentől kezdve nagyon nehezen mozgatható egyik környezetből a másikba egy program.

Én azt az elvet vallom, hogy az "eredeti" gyártói környezet konvencióihoz érdemes igazodni, amelyik környezet ezt tudja, az okés, amelyik nem, az nekem nem kell (és a CCS itt el is bukott). Az IC data sheet-je nélkül nem lehet programozni semmit értelmesen, az pedig a gyártói regiszterneveket tartalmazza. Semmi kedvem nincs állandóan fejben fordítgatni a különböző nevek között, csak mert a fordító környezetét megalkotók nem voltak képesek a PORTB regiszter nevét PORTB-nek választani...

Az old style függvénydeklarációkról csak annyit, hogy oka van annak, hogy nem használják: aki ilyet használ, az elbukja a paraméterek típusellenőrzését. Ez ritka nagy "ár" azért, hogy cserébe egy semmilyen előnnyel nem járó szintaktikát használhassunk. Nem olvashatóbb, nem kevesebb karakter, semmiben nem jobb, egy halom mai fordító meg le sem fordítja. Aki tényleg szándékosan ilyet használ mostanság, annak a programját amúgy sem javaslom mintapéldának, vedd úgy, hogy az illető nálad is kezdőbb, és írt egy rossz programot, teljesen függetlenül attól, hogy végülis talált hozzá egy fordítót, ami bírt belőle valami futtatható kódot generálni.
(#) k válasza potyo hozzászólására (») Máj 10, 2012 /
 
Hanyagolnám én is a ccs-t, de azzal tudok elindulni, amilyen segítséget kapok.
(bár most kaptam tippet, hogy ez nem is ccs-c hanem lehet, hogy Hitec-c (ráadásul 25 éves ) )
A programokat nem találom, hanem kapom - itteni fórumozó társaktól segítségként, illetve a demópanelhez kaptam.
(#) k válasza _vl_ hozzászólására (») Máj 10, 2012 /
 
Ma egész nap úton voltam, volt időm közben gondolkozni, - nagyjából arra jutottam én is , mit te, csak te még értesz is hozzá, és összeszedetten le is tudtad írni. Köszi
(#) k válasza Mezoas hozzászólására (») Máj 10, 2012 /
 
Végre egy konkrét könyv. Valami ilyet kerestem, most már csak egy olyan valaki véleménye kellene, aki ebből tanult.
(#) k válasza Programmer hozzászólására (») Máj 10, 2012 /
 
  1. #define  RD0  PORTDbits.RD0
  2. #define  RD1  PORTDbits.RD1
  3. #define  RD2  PORTDbits.RD2
  4. #define  RD3  PORTDbits.RD3
  5. #define  RD4  PORTDbits.RD4
  6. #define  RD5  PORTDbits.RD5
  7. #define  RD6  PORTDbits.RD6
  8. #define  RD7  PORTDbits.RD7
  9.  
  10. unsigned char table0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  11.        0x88,0x83,0xc6,0xa1,0x86,0x8e,0};  
  12. unsigned char table1[]={0x21,0x22,0x24,0x28 } ;
  13. void delay1( unsigned int x)
  14. {
  15.     unsigned int  i,j;
  16.     for(i=0;i<x;i++)
  17.        for(j=0;j<100;j++);
  18. }
  19. void sigma_portint()
  20. {
  21.     TRISA=0X00;                //Îť
  22.     TRISB=0X00;               //śÎÂë
  23. }
  24.  
  25.  
  26.  
  27. void show(show_bit,show_code)
  28. {
  29.     PORTA = table1[show_bit];
  30.     PORTB = table0[show_code];
  31.   delay1(5);
  32. }
  33.  
  34. void main()
  35.  {
  36.    
  37.     unsigned int n=0Xd6,k=0,i=0; PORTB=0XFF;
  38.     sigma_portint();
  39.     while(1)
  40.       {k++;
  41.       show(0,i);
  42.       show(1,i);
  43.       show(2,i);
  44.       show(3,i);
  45.      
  46.     //  PORTB=0XFF;
  47.       if(k==20 | k==40){i++;if(i==17){i=0;}}
  48.   // if(k==50){k=0;}
  49.       if(k==50){k=0,n=~n; PORTA=n;}
  50.       else   PORTA=n;/**/
  51.       delay1(10);
  52.    
  53.       }
  54.  }


Az A és B port kimenetre állítása után következő részre dobta a hibát, bár gondolom ezt te úgyis látod.

Én még nem tartok itt
(#) _vl_ válasza k hozzászólására (») Máj 11, 2012 /
 
Ez egy elég rossz példa, ne tanulj belőle. Illetve de: na _ilyet_ nem csinálunk.
(#) bankimajki válasza k hozzászólására (») Máj 11, 2012 /
 
Engem konkrétan tanítottak is a szerzők. Így tudom garantálni, hogy érthetően és jól le van írva minden. Én is átnéztem ezt a könyvet, szerintem szuper.
(#) potyo válasza k hozzászólására (») Máj 11, 2012 /
 
Pontosan melyik sorra írta azt a hibát? Arra tippelek, hogy a 27. sorban kezdődő függvényre, mert ott nincs a bemenő paramétereknek típus adva. De ha nemis erre írja, akkor is kell típust adni ezeknek.
(#) k válasza potyo hozzászólására (») Máj 11, 2012 /
 
Igen pontosan a 27 sorra adta a hibát, de ehhez én még nagyon kezdő vagyok.
Még egy kérdésem van 'átlagosan' mennyi idő kell a C alapfokú elsajátításához.

Ezt azért kérdezem, mert az oshon pic basicban- egy hét elég volt a kezdeti sikerekhez. - Talán innen jön az egyik hibám - a türelmetlenség.


A c tanulásra pedig láttam 20 órás, és egy éves tanfolyamot is. Ez így túl nagy szórás.
(Persze tudom, hogy a jó pap is holtig tanul )
(#) Programmer válasza k hozzászólására (») Máj 13, 2012 /
 
Több mint valószínű, hogy a potyo által említett tipusok hiányoznak.
Én amikor egy állományba több függvényt bepakolok, az elejére beteszem a függvények prototipusát is, sokat segít hibakeresésnél...
Következő: »»   56 / 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