Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   38 / 153
(#) icserny válasza fkosa hozzászólására (») Jún 5, 2011 /
 
Idézet:
„Van egy 12C508A-m”
Ez nem csak egyszer programozható véletlenül?
(#) fkosa válasza icserny hozzászólására (») Jún 5, 2011 /
 
Jó kérdés. Átnéztem az adatlapját, nem teljesen egyértelmű.
EPROM-ban tárolja a programot. Szerintem az is törölhető.
Beszél az adatlap OTP PIC-ekről, de nem írja le, egyértelműen, melyik az.
(#) fkosa válasza icserny hozzászólására (») Jún 5, 2011 /
 
Úgy néz ki, tényleg az (http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010103)
Mindegy, ha sikerül jól megírnom a progit, attól még használható. Van kettő - két próbálkozás.
A kérdés ettől függetlenül fenn áll.
Köszi a figyelmeztetést. Sample volt, tehát nem nagy kár érte.
(#) watt válasza fkosa hozzászólására (») Jún 5, 2011 /
 
Kettőből nekem se menne...
Az IO-kat a TRIS-el lehet beállítani.
(#) fkosa válasza watt hozzászólására (») Jún 5, 2011 /
 
Próbáltam. Ezt írja ki:
"15.1 undefined identifier "TRIS""
Nincs a header file-ban deklarálva.
Valami hasonlót bele tehetnék:
"TRIS equ 00xxh"
A címet viszont nem találtam meg az adatlapban.
(#) bazs hozzászólása Jún 5, 2011 /
 
Nem tudom sajnos milyen portjai vannak a 12c508a-nak de például ha jol tudom akkor úgy kell, hogy
TRISA = 0x00;

Nem tudom, hogy itt lehet-e külön de ha igen akkor úgy is megadhatod, hogy TRISA.0=0; ez csak az A port 0. bitjét állítja kimenetnek.
(#) adamhollos válasza fkosa hozzászólására (») Jún 5, 2011 /
 
Én nem értek csak a 16f690-hez nameg a 18f2321-hez de ha modjuk a RA0 ás I/O portot szeretnéd kimenetre állítani akkor a TRISA 0. bitjét kell nullára állítanod.

Simán TRIS nincs szerintem 12C508A-nál sem. Még ha csak TRISA-ja van is.
(#) bazs hozzászólása Jún 5, 2011 /
 
Igen szerintem is magában azt, hogy TRIS nem tudja fordítani meg kell mondani, hogy melyik portot állítod I/O-ra.
(#) potyo válasza fkosa hozzászólására (») Jún 6, 2011 /
 
12C508-ban szerintem másként van a TRIS beállítása. Be kell tölteni a W regiszterbe, hogy milyen ki-bemeneteket akarsz, majd végrehajtani egy
  1. TRIS GPIO

utasítást.
(#) fkosa válasza potyo hozzászólására (») Jún 6, 2011 /
 
Igazad van. Az adatlapja szerint a W regisztert tölti be a TRIS-be.
Csak a TRIS címét nem adja meg.
(#) watt válasza fkosa hozzászólására (») Jún 6, 2011 /
 
Szerintem a TRIS itt egy utasítás...
(#) adamhollos hozzászólása Jún 6, 2011 /
 
Hogyan tudok megadni egy header file-ban (xyz.h) olyan változót melynek értéke a programban össze vissza változhat?

Hogy kell xorolni, vagy ez nekem kell megírnom?
(#) El_Pinyo válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
Van xor operátor a C nyelvben is, ez pedig a ^ kalap jel.
Az első kérdésed kicsit homályos. Ha több forrásfájlt akarsz használni és egy másik forrásban akarod felhasználni azt a globális változót, amelyet az egyik .c forrásban deklaráltál, akkor az extern kulcsszóval kell ellátni a globális változót. Erre a neten biztosan találsz példákat. Bár véleményem szerint, Te nem erre vagy kíváncsi. Ha olyan változót szeretnél létrehozni, amelyet a forrásfájlon belül minden függvény lát (globális változó), akkor azt a forrás elején kell létrehozni, minden függvényen kívül (ehhez nincs szükség a header fájlok módosítgatására). Erre is találhatsz példát.
Véleményem szerint először egy C könyvet kellene tanulmányoznod, tanulni a szintaxist, meg egyebeket és csak utána programot írni a kontrollerre.
(#) adamhollos válasza El_Pinyo hozzászólására (») Jún 6, 2011 /
 
Itt van előttem a C könyv meg az algoritmus könyv.
Az a helyzet, hogy már kétszer megtanultam a c nyelvet de mivel nem használtam ezért alig dereng valami. Azt hiszem kénytelen leszek még egyszer megtanulni.

A header file-ra azért lenne szükség mert több forrásfájlom van. Szóval hogy is van ez?
(#) El_Pinyo válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
Ha előtted a C könyv, akkor miért nem nézed meg az extern kulcsszó tárgyalásánál (egyébként melyik C könyv van meg)?
A megoldás a következő: Tegyük fel, hogy létrehozol egy globális változót a main.c forrásfájlban:
  1. int global_var = 0;

A definíciót egy header fájlban is meg kell adni, pl. main.h- ban:
  1. extern int global_var;

Ezt a header fájlt pedig include-olni kell azokban a forrásfájlokban, amelyekben használni szeretnéd a global_var változót.
(#) trudnai válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
Header file-ban csak a deklaraciojat adod meg -- a definicio egy C file-ban kell legyen. Magyaran a C file-odban az a valtozo globalis (azaz nem fuggvenyen belul van, hanem kivul), mindenellett nem szabad 'static' kulcsszot hasznalni (azaz a lathatosaga a teljes projectre kiterjed, nemcsak a forras file-ra). Ilyenkor a hozza tartozo header file-ban extern-kent deklaralt valtozo alapjan hozza tudsz majd ferni mas C forras fileokbol.
(#) adamhollos válasza El_Pinyo hozzászólására (») Jún 6, 2011 /
 
Köszi kipróbálom

A könyv; Programozzunk C nyelven!
Kiadó: Computer Books 1995
Téma: ansi c, turbo c, grafika, numerikus módszerek.
(#) El_Pinyo válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
Nekem is megvan az a könyv, javaslom a 239. oldalon kezdődő extern tárolási osztályról szóló rész tanulmányozását. Elméletileg a hozzá járó CD mellékleten van példa is.
(#) adamhollos válasza El_Pinyo hozzászólására (») Jún 6, 2011 /
 
A CD már nincs meg, de kösz.
Függvény visszatérési értéke lehet egy tömb is, ugye?
(#) adamhollos hozzászólása Jún 6, 2011 /
 
hogyan tudok, úgy deklarálni egy változót egy függvényben, hogy a függvény után is éljen.
(#) adamhollos hozzászólása Jún 6, 2011 /
 
hogyan tudok, úgy deklarálni egy változót egy függvényben, hogy a függvény után is éljen.
(#) potyo válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
Sehogy. Globális változót kell használnod.
(#) Thomy válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
Szia!

Sehogy. A lokális változó addíg él, ameddig a függvény vissza nem tér.

Használj globális változót! Ha csak abban a c fájlodban használod, akkor static kulcsszóval.
Ha a hardver is változtathatja a változó értékét (megszakítás pl.), akkor volatile legyen!

üdv,
Tam
(#) potyo válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
Tudtommal nem, csak pointer lehet, ami mutathat tömbre. De a tömbnek magának globális változónak/konstansnak kell lennie.

Bár azt nem tudom, mivan, ha egy függvényen belül levő static tömb címét adja vissza a függvény? De akárhogyis van, ez nem szép megoldás.
(#) Thomy válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
Adj át a függvényednek egy pointert a tömbre!
A függvény ezután beleírhat a tömbbe.
Nincs visszatérési érték.
Figyelj, nehogy túlindexelj!
(#) adamhollos válasza Thomy hozzászólására (») Jún 6, 2011 /
 
Az a gond, hogy nekem igazából listára lenne szükségem ami nincs c-ben (a lista egy végtelen tömb).
(#) sikolymester válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
Hogy ne lehetne ?!

Egyszerűen static -ként kell deklarálni.
Szolgáljon erre egy példa:

  1. int foobar(void)
  2. {
  3.   static int i = 0;  
  4.   /*
  5.    * fuggveny mukodeset ide
  6.    */
  7.   return ++i;
  8. }


Ez a függvény pl. visszatér azzal az értékkel, hogy hányszor lett eddig meghívva. A benne lévő i változó a függvény lefutása után is megőrzi értékét, vagyis él utána is.
Természetesen a függvényen kívül nem lesz elérhető.
(#) Thomy válasza sikolymester hozzászólására (») Jún 6, 2011 /
 
Ez rendben van.
De nem tudtuk, mire kellhet neki a homályos fogalmazása miatt.
Tippeltük, hogy nem csak ez a függvény akarja majd használni.
(#) adamhollos válasza sikolymester hozzászólására (») Jún 6, 2011 /
 
Igen erre gondoltam én is de ez lassabb. Azért köszi.
egyébként prímfelbontást akarok csinálni amiből legnagyobb közös osztót csinálok amiből pedig az lesz, hogy megadom egy tizedestört normál alakját.
(#) El_Pinyo válasza adamhollos hozzászólására (») Jún 6, 2011 / 1
 
Azért a spanyolviaszt nem kell újra feltalálni! Az Euklideszi algoritmus éppen a két szám legnagyobb közös osztóját adja meg.
Következő: »»   38 / 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