Fórum témák
» Több friss téma |
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.
[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
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.
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".
Idézet: A C18-ban használható változótípusokról a C18 Users Guide 2. fejezetében olvashatsz. Bit típus nincs.„static bit j;” Ha nincs a telepített fordító mellett, akkor érdemes letölteni, mert a Microchip Help-ekben művészet megtalálni a dolgokat.
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).
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)
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
Hali!
bit változó dekrarálása helyett, ha van elég ramod, használhatsz pl unsigned char-t.
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?
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?????
Be tudnád másolni azt a sort és a környezetét ahol ezt a hibát kaptad?
É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.
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..
Ez az old style function declaration:
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.
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.
Á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 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:
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
![]()
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.
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.
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.
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
![]()
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.
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 ![]()
Ez egy elég rossz példa, ne tanulj belőle. Illetve de: na _ilyet_ nem csinálunk.
![]()
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.
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.
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 ![]()
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... |
Bejelentkezés
Hirdetés |