Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   58 / 153
(#) whalaky válasza (Felhasználó 15355) hozzászólására (») Jún 13, 2012 /
 
Sajnos ez sem hozott semmi eredményt.
(#) edison14 válasza whalaky hozzászólására (») Jún 13, 2012 /
 
Valami olyasmit akar mondani a proteus hogy nem találja a forráskódot.
(#) whalaky válasza (Felhasználó 15355) hozzászólására (») Jún 13, 2012 /
 
Köszönöm mindenkinek, megoldódott. A hiba oka az AVDD és az AVSS lábak szabadon hagyása volt. Ugyan nem értem hogy ha beállítom hogy Vdd Vss legyen a referencia, akkor miért kell bekötni, de ez már csak ilyen... lényeg hogy megy...
simpi! Köszönöm a segítséget! Ami a proteus témát illeti, amikor a kérdést feltettem, még abban a hitben voltam hogy valami konfigurációs dolog lesz a hunyó, ezért került ebbe a topickba. Most hogy a hiba kiderült a PIC miértek hogyanok-ban lenne a helye, de ha tudtam volna hogy mi a baj oda tettem volna.... vagy meg sem kérdezem.
Ami az u? -et illeti az azért maradt benne, mert cserélgettem az MCUT (más típussal ment), de ez a proteust nagyon nem zavarja ha nincs ütközés.
A power-t azért kellett paraméterezni, mert a másik szimulációban két tápot használ, 3.3 és 5V, így meg kell neki adni hogy melyik legyen.
(#) whalaky válasza (Felhasználó 15355) hozzászólására (») Jún 15, 2012 /
 
Úgy, hogy alapbanban minden cuccnak aminek van hidden pinje a tápnak a VCC/VDD-t adja.
(#) olala hozzászólása Jún 29, 2012 /
 
Heló Mindenkinek!

Programozással kapcsolatban szeretném kérni a segítségeteket. Egy időzítős áramkörön dolgozgatok, aminek egy DS1302 adná az RTC részét. Microchip C18-ban tudok C programokat írni, illetve ebben írtam már meg a programom teljes egészét. Az RTC-t nem tudtam működésre bírni saját kóddal, ezért a neten keresgetve találtam CCS-ben írt kódot, nagyon hasonlót ahhoz, amit Topi tett közzé egyik cikkében. És itt a gondom, hogy tudnám a kettőt összefésülni úgy, hogy ne kelljen átírnom a CCS kódot C18 fordítóra. (Egyébként már megpróbáltam, szerintem jó a kód, de mégsem tudom kezelni az RTC-t.)
Van erre valami fordítási lehetőség, hogy az RTC-t kezelő függvényállomány CCS-ben íródjon, a törzsprogram pedig C18-ban?
Válaszotokat köszönöm!

ui.: Ezt a kérdést feltettem egy másik topicban is, nem tudom hova illene jobban, így előre is elnézést kérek azoktól akiket zavarna ez.
(#) _vl_ válasza olala hozzászólására (») Jún 29, 2012 /
 
Idézet:
„Van erre valami fordítási lehetőség, hogy az RTC-t kezelő függvényállomány CCS-ben íródjon, a törzsprogram pedig C18-ban?”

Röviden: sehogy.
(#) olala válasza _vl_ hozzászólására (») Jún 29, 2012 /
 
Köszi!
Azért gondoltam erre a lehetőségre, mert arról hallottam hogy Assembly és C források működnek együtt. De akkor még ügyeskednem kell a saját kódommal.
(#) _vl_ válasza olala hozzászólására (») Jún 29, 2012 /
 
Az tuti, hogy a Microchip C fordítójával nem fogsz eredményt elérni CCS forrással. És viszont: a CCS nem fogja a Microchip C fordítóhoz gyártott forrást lefordítani; ők ketten kölcsönösen nem kompatibilisek.
Az, hogy a két C fordító eredményét valahogy összelinkelni - ezt nem tartom lehetetlennek, de ebben nem hiszek. Ehhez kéne valami megegyezés, hogy pl. függvények hogy hívják egymást, paramétereket hogy adnak át, meg ehhez hasonlók. Ilyen nincs, továbbá ha csinált is volna a Microchip ilyen platformhasználati kiskátét, akkor se hinném el, hogy a CCS majd pont ezt fogja betartani - ha már a C szabvány alaptípusokról szóló kitételeit is letojták, na akkor mit várhatunk...
(#) olala válasza _vl_ hozzászólására (») Jún 29, 2012 /
 
Igen, ezekben teljesen igazad van, én is pont ezeken gondolkodtam, hogy még ha az object fájlok meglennének, utána valahogy össze kellene linkelni őket, de akkor ott a baj hogy hogyan nevezzük nevén a gyereket (függvények, változók)...
Akkor marad a további próbálkozás a DS1302 lelkivilágának megértésével...

Köszi a segítséget!
(#) vilmosd válasza olala hozzászólására (») Jún 29, 2012 /
 
Szoval azert nem egy tul bonyolult az a driver, hogy ne lehetne atirni masik C-re. Talan az elso 3-4 fvenyt kellene atirni, es a tobbiben is 1-2 sort. Siman bitbillegtetos kezelessel csinalja a DS1302 irasat, olvasasat. Amugy eleg nehez tobbfele C-bol forditott object fileket osszefesulni, mert a valtozo atadas, a SW stack es mas dolgok erosen forditofuggoek.
(#) olala válasza vilmosd hozzászólására (») Jún 30, 2012 /
 
Valóban nem lenne bonyolult, meg átolvasgattam már az IC adatlapját is, de nem tudok értelmes adatokat kiszedni az IC-ből. Nem tudom hogy a beírásnál van a hiba, vagy csak a visszaolvasásnál, de nem működik a dolog.
(#) potyo hozzászólása Júl 3, 2012 /
 
Hogy lehetne egy ilyesmi "struktúrát" csinálni és fordítási időben már adatokkal feltölteni?

  1. {
  2.     {
  3.         nev:"abc",
  4.         ertek:{1,2,3,4,5,6,7,8}
  5.     },
  6.     {
  7.         nev:"def",
  8.         ertek:{2,3,4,5,6,7,8,9}
  9.     },
  10.     {
  11.         nev:"ghi",
  12.         ertek:{6,9,8,8,2,9,8,5}
  13.     },
  14.     {
  15.         nev:"jkl",
  16.         ertek:{8,6,1,9,8,4,6,5}
  17.     }
  18. }


Tehát olyasmi kellene, hogy példa kedvéért négyelemű tömb, aminek az elemei struktúrák, és a struktúra mezői is tömbök. Valahogy úgy használnám, hogy
  1. lista[2].nev
  2. lista[2].kod[3]

Természetesen a nev és az ertek nevű mezők minden struktúrában ugyanakkorák lennének. A lényeg az lenne, hogy már fordítási időben ez az egész létrehozható legyen, és hogy a kódmemóriában lehessen tárolni.
(#) Stefan válasza potyo hozzászólására (») Júl 3, 2012 /
 
  1. typedef struct elem_t
  2. {
  3.     char nev[20];
  4.     uint8_t ertek[20];
  5.  
  6. }elem;
  7.  
  8. const elem gl_Lista[2] =
  9. {
  10.     {
  11.         {"bblabla"},
  12.         {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}
  13.     },
  14.     {
  15.         {"bblabla"},
  16.         {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}
  17.     }
  18.  
  19. };

Szerintem így, a "const rom"-ra nekem valamiért rinyált a fordító.
(#) potyo válasza Stefan hozzászólására (») Júl 3, 2012 /
 
Köszönöm, tökéletes. XC32 is kicsit problémázik, hogy char * helyett const char *-ot adok át az LCD kiíró függvénynek, de működik.
(#) watt válasza potyo hozzászólására (») Júl 4, 2012 /
 
Szia! Csak a típuseltérés miatt. Próbáld módosítani a függvényben a típust.
(#) Programmer válasza watt hozzászólására (») Júl 4, 2012 /
 
A függvény char* paramétert vár, ez jelentheti azt, hogy a függvény módosítani akarja a pointer által mutatott területet (bár kiiratásnál ez nem hiszem, hogy szükséges). Ha const char* típust adsz a függvény nem tudja módosítani a tartalmat, hibás működéshez vezethet(említetted hogy ilyen probléma itt nincs). Globális változók kezdőértéke mindig a kódban kerül elmentésre, ha kitörlöd a const kulcsszavat nem fog a RAM igény megnőni és eltűnik a tipushiba is.
P.S: arra oda kell figyelni, hogy az így létrejött változó ne szerepeljen értékadás bal oldalán, mert akkor létrejön a memóriában(RAM) is.
(#) potyo válasza watt hozzászólására (») Júl 4, 2012 /
 
Arra gondolok, hogy akkor meg azért problémázna, ha char *-ot adok át const char * helyett. De lehet, hogy nem, majd kipróbálom.
(#) potyo válasza Programmer hozzászólására (») Júl 4, 2012 /
 
Idézet:
„Globális változók kezdőértéke mindig a kódban kerül elmentésre, ha kitörlöd a const kulcsszavat nem fog a RAM igény megnőni és eltűnik a tipushiba is.
P.S: arra oda kell figyelni, hogy az így létrejött változó ne szerepeljen értékadás bal oldalán, mert akkor létrejön a memóriában(RAM) is.”


Ez érdekesen hangzik. Ezt is kipróbálom, lehet, hogy tényleg lényegtelen oda a const kulcsszó.
(#) watt válasza potyo hozzászólására (») Júl 4, 2012 /
 
Ha más char* -ként hívja, akkor ugyanott vagy. Ha nem hosszú, akkor két függvény, vagy egy konverziós függvényt közétenni... De tényleg lehet, hogy nem kell a const... Volt már, hogy nem foglalkoztam a fordító nyavajgásával, jól működik most is.
(#) potyo válasza watt hozzászólására (») Júl 4, 2012 /
 
PIC32, ezeknél minden memóriaterület látszódik egy közös területen, szóval két függvényre biztosan nincs szükség. Csak a fordítót kell rávenni, hogy ne csináljon semmi jelzést a kérdéses sorokra.
(#) _vl_ válasza potyo hozzászólására (») Júl 4, 2012 /
 
Nem kéne, hogy problémázzon. Ez gcc, ez nem szokott hülyéskedni
(#) Stefan válasza potyo hozzászólására (») Júl 4, 2012 /
 
Próbáltad hívásnál (char*) -al castolni? Akkor eltűnik a warning szerintem.
(#) potyo válasza Stefan hozzászólására (») Júl 4, 2012 /
 
Azt nem, viszont átírtam a kiíró függvényt, hogy const char *-ot várjon és így nincs warning.
(#) Programmer válasza potyo hozzászólására (») Júl 6, 2012 /
 
A tipuskonverzió önmagában jó megoldás, eltünteti a fordító figyelmeztetését, viszont muszáj meggyőződni arról, hogy a működést ez nem befolyásolja.
Én ezért szoktam kerülni a cast-olást ha olyan függvényről van szó amit nem én írtam.
(#) diablo hozzászólása Júl 17, 2012 /
 
Sziasztok!
Egy egyszerű kérdésem lenne: High-Tech C-ben egy integer típusú változó x. bitjére hogy lehet hivatkozni?
Meg ha erre valaki valamit mondana, megköszönném.

Illetve még egy olyan kérdésem is lenne, hogy ez a C 18 Compiler minden PIC-nél működik? Mert engem ez a HIGH-TECH C egy kicsit idegesít, hogy sok függvényt nem ismer.
16F-es PIC-ről lenne szó.
(#) potyo válasza diablo hozzászólására (») Júl 17, 2012 /
 
C18 mint a neve is mondja, csak a 18F chipekre fordít

Változó x. bitjére attól függ, hogy mit akarsz vele csinálni.
Pl.
  1. if (valtozo&(1<<x))
ha meg akarod nézni, hogy egy vagy nulla az x. bit. Ha egyesre akarod állítani, akkor
  1. valtozo|=1<<x;
ha nullázni, akkor
  1. valtozo&=~(1<<x);
ha ellentétesre akarod állítani, akkor
  1. valtozo^=1<<x;


Lehet csinálni union-t, és akkor el lehet nevezni az egyes bitjeit is a változónak és akkor lehet bitenként hivatkozni rá, a fordító megoldja a többit.

És végül nem High-Tech, hanem Hi-Tech
(#) diablo válasza potyo hozzászólására (») Júl 17, 2012 /
 
Köszi!
Most hogy mondod tényleg Hi-Tech, pedig Vasárnap még jól írtam. ... de ott van az már.
Sejtettem, hogy csak 18F-esre.

Igazából arra lenne szükségem, hogy a változó x. bitjét átpakoljam a 10 bites PWM regiszter 0. és 1. bitjébe. Azt hittem van egyszerűbb is mint ez a tologatás, mert elég sok olyat láttam forráskódokba, hogy "."-tal választják el (pl. variable.4), de persze nekem nem működött. Igaz, hogy inkább TRISx-re, meg PORTx-re csinálták.

Az az uninon az hogy is van?

  1. if (valtozo&(1<<0)) var0 = 1;
  2. else var0=0;
  3. if (valtozo&(1<<1)) var1 = 1;
  4. else var1 = 0;
  5. ...

Ezt a sort kell folytatni 7-ig (1 byte-nál)? Vagy egyszerűbben is lehet?

Habár lehet mégsem jó a kód mivel így elég sok változó kellene, mindegy már nem javítom ki. Esetleg a feltételek után var = 1, var = 2, var = 4.... ami jobb megoldás lenne.
(#) diablo válasza potyo hozzászólására (») Júl 19, 2012 /
 
Na utána néztem ennek az unionnak a Kónya féle könyvben szerencsére van rá példa, viszont nem biztos, hogy teljesen jól értelmeztem.
Azt szeretném most csinálni, hogy lenne egy FLAG nevű 8-bites változóm aminek az egyes bitjeit szeretném írni és olvasni és 0-akat és 1-eseket false-sal és true-val helyettesíteni.
Eddig ennyire jutottam ami le is fordul csak nem tudom, hogy fog-e működni rendesen:
  1. union FLAGbits
  2. {
  3. unsigned f0 : 1;
  4. unsigned f1 : 1;
  5. }FLAG;
  6. typedef enum {false = 0, true = 1} f0, f1;
  7.  
  8. void main()
  9. {
  10. if(FLAG.f0 = true)
  11. {
  12. FLAG.f0 = false;
  13. }
  14. }


A másik megoldás ugyanez csak struktúrával:
  1. struct FLAGbits
  2. {
  3. unsigned f0 : 1;
  4. unsigned f1 : 1;
  5. } FLAG;


És az lenne még a kérdés, hogy mi a különbség a 2 kód között, illetve mit vesz a fordító alapértelmezettnek ha a változók után nem írom oda, hogy 1 bites változóról van szó (":1")?
(#) _vl_ válasza diablo hozzászólására (») Júl 19, 2012 /
 
Ez a "C-s" hagyományos megoldás:

  1. #define FALSE 0
  2. #define TRUE 1
  3.  
  4. struct {
  5.   unsigned bit0 : 1;
  6.   unsigned bit1 : 1;
  7. ...
  8. } var1, var2;
  9.  
  10. var1.bit0 = TRUE;
  11. var2.bit1 = FALSE;


Általában szokás akarni egyben is kezelni a biteket (mondjuk az egész byte-ot akarod másolni), arra meg ez a módi dívik:

  1. union {
  2.   unsigned char data;
  3.   struct {
  4.     unsigned bit0 : 1;
  5.     unsigned bit1 : 1;
  6. ....
  7.   } bits;
  8. } var3, var4;
  9.  
  10. var3.data = 0;
  11. var3.bits.bit0 = TRUE;
  12. var4.data = var3.data;
(#) diablo válasza _vl_ hozzászólására (») Júl 19, 2012 /
 
Köszi szépen! Akkor lényegében az enyém is működne. A define viszont tényleg egyszerűbb, nekem is eszembe juthatott volna. Gondolom akkor ezzel a módszerrel azt is könnyedén már meg tudom csinálni, hogy egy float vagy int típusú változót küldjek ki a soros portra.

*
Következő: »»   58 / 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