Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   76 / 153
(#) Hp41C válasza nyarfa hozzászólására (») Máj 31, 2013 /
 
View / Disassambly Listing
(#) nyarfa válasza Llajti hozzászólására (») Jún 1, 2013 /
 
Hol találok egy leírást erről a C18 -ró amiben érthetően (számomra is azaz hülye gyerek módjára) le vannak írva ezek a változó létrehozások. A fordító folyamatosan a nem tetszését fejezi ki számomra minden próbálkozásomra . A Kónya féle PIC.... könyv harmadik kiadása tartalmaz C-t, de eleve C30-at, valamint a Kopják József úr feltételezi, hogy láttam már C nyelvet valaha. Most látok először, és már kezd is elmenni tőle a kedvem. Segítsetek!!!

Épkézláb leírásról kérek egy linket, vagy bármit. Lehetőleg magyarul mert az angoltudásom elég gyatra.
A hozzászólás módosítva: Jún 1, 2013
(#) _vl_ válasza nyarfa hozzászólására (») Jún 1, 2013 /
 
Idézet:
„valamint a Kopják József úr feltételezi, hogy láttam már C nyelvet valaha. Most látok először”

Van egy jótanácsom: ne PIC-en akard a C-t megtanulni.
Fogj egy PC-s ingyenes C fordítót meg környezetet, nézzél hozzá valami kezdőknek szánt C leírást, és előbb tanuld meg a C nyelvet használni kényelmes környezetben, csak aztán álljál neki küszködni mikrokontrolleren.
(#) kissi válasza nyarfa hozzászólására (») Jún 1, 2013 /
 
Szia!
Ha a HobbiElektronika fórumnak végigolvasod (figyeled ) a PIC-es témáit, akkor magyarul is sokat tanulhatsz: pl. Bővebben: Link ! Icserny fórumtárs oldalán is sokat lehet tanulni MAGYARUL, de keress rá !
Egyébként csak úgy fogsz előrejutni, ha nem mindig a "sült galambot" várod, hanem Te is próbálsz előre jutni ( keresők használata ) !!
A hozzászólás módosítva: Jún 1, 2013
(#) nyarfa válasza kissi hozzászólására (») Jún 1, 2013 /
 
Köszi a jó tanácsokat de hidd el nem a sült galambot várom. Pont ezért tévedtem el, mert mertem gondolkodni és nem akartam másolni. Programoztam már egy pár nyelven (Clipper, VBasic, Delphi, ASM, SQL) egy-két gyengécske alkalmazást ami nekem kellett, de a C mindig a mumus volt. Szerintem az előítéleteimmel van gond azaz velem de ezt is leküzdöm majd.
(#) kissi válasza nyarfa hozzászólására (») Jún 1, 2013 /
 
Az nem másolás, ha olvasol, esetleg példaprogramokat kipróbálsz és így megértesz egy nyelvet! Remélem ezzel Te is egyetértesz, mivel már használtál pár nyelvet, még ha minimális szinten is! A kereső használatára való utalást nem személyeskedésnek szántam, hanem tényleg nagyon sok információ megtalálható már itt az oldalon: el kell olvasni, keresni kell és ha nincs ( vagy a leírtak ellenére nem érthető ! ), akkor kell rákérdezni !
(#) vicsys válasza nyarfa hozzászólására (») Jún 1, 2013 /
 
Valaki egyszer linkelt egy video kurzust, ha jól emlékszem pont C-ül beszéltek...
(#) p_istvan válasza nyarfa hozzászólására (») Jún 1, 2013 /
 
Ezt olvasd el mindenekelőtt, ha bármilyen C-ben akarsz programozni: A C könyv!
(#) kissi válasza p_istvan hozzászólására (») Jún 1, 2013 /
 
Én is ezt linkeltem HP41C kolléga "által" !
A hozzászólás módosítva: Jún 1, 2013
(#) nyarfa válasza p_istvan hozzászólására (») Jún 1, 2013 /
 
Örök hála neked

Végre egy könyv ami nem haladja meg szellemi képességeimet. Szerintem egy darabig nem fogok kérdezni, de a végeredményt mindenesetre közlöm veletek.

Köszi még egyszer.
(#) kissi válasza nyarfa hozzászólására (») Jún 1, 2013 /
 
Az általam belinkelt hozzászólás alján is ez volt ... Figyelj kicsit jobban !
(#) nyarfa válasza kissi hozzászólására (») Jún 2, 2013 /
 
Elnézésedet kérem, de csak most vettem észre a linket a belinkelt hozzászólás alján.
(#) kissi válasza nyarfa hozzászólására (») Jún 2, 2013 /
 
OK, semmi gond, de mit gondoltál, miért mutatom , ill. p_istvan hozzászólásánál is jeleztem ?!
A hozzászólás módosítva: Jún 2, 2013
(#) nyarfa hozzászólása Jún 30, 2013 /
 
Első nekirugaszkodásra ezt sikerült összehoznom. A szimulátorban működik, de valamiért a megszakításkor nem ugrik, hanem elszámol szépen a 808-as címig és végrehajtja az utasításokat. Kezdek azon lenni, hogy nem használok bootloadert mert akkor egyszerűen csak 8 utasításnyit késik max. Ha van valakinek valami építő jellegű ötlete, azt elfogadom.
(#) kissi válasza nyarfa hozzászólására (») Jún 30, 2013 /
 
Szerintem a szimulátor nem tud a bootloader-ről ! Megszakítás esetén a normál címre ugrik és mivel Te a bootloader miatt oda nem írtál utasításokat, ezért végiglépked az ott lévő NOP-okon, míg el nem éri a loader miaati megszakítás címet! Ha élesben nem megy, akkor valami más gondnak kell lennie! A programot nem néztem, sajnos most más bajaim vannak !
A hozzászólás módosítva: Jún 30, 2013
(#) icserny válasza nyarfa hozzászólására (») Jún 30, 2013 /
 
Nem bogarásztam utána minden részletnek, de a
#pragma code _RESET_INTERRUPT_VECTOR = 0x0800
sor után szerintem kellene egy
  1. void _reset (void)
  2.         {
  3.             _asm goto _startup _endasm
  4.         }

definíció is (nálam legalábbis így működik a reset vektor áthelyezése).

Csatlakozva az előttem szólóhoz: a szimulátor számára 0x0, 0x08, 0x18 címekre el kellene helyezni egy-egy ugró utasítást a 0x800-zal magasabb címekre!
(#) AZoli hozzászólása Jún 30, 2013 /
 
Sziasztok!
MPLAB C30 30F6012A -t használva a lenti union-t nem a kívánt területre teszi a fordító.
  1. unsigned int __attribute__((address(0x900))) ProgrammingArray [64];
  2. unsigned int __attribute__((address(0x980))) WriteError = 0;   
  3. unsigned int __attribute__((address(0x982))) TesterCommand = 0;
  4. unsigned int __attribute__((address(0x984))) ProgrammmingStatus = 0;
  5.  
  6. union
  7. {
  8.         struct
  9.         {
  10.                 unsigned int ProgrammingAddress;
  11.                 unsigned int ProgrammingAddressH;
  12.         } P_A_comp;
  13.         unsigned long __attribute__((address(0x986))) ProgrammingAddressLong;
  14. }A_U ;


Mindezt egy régebbi projetemből másoltam át, amiben (most újra fordítás után is) jó helyre kerülnek!
Warning mindkét projectben van, azt mondja hogy: ignoring address attribute applied to member ProgrammingAddressLong
De akkor a régiben miért van azóta is jó helyen? Hogy kellene neki megmondani hogy 0x986-0x988 területre tegye?
(#) AZoli válasza AZoli hozzászólására (») Jún 30, 2013 /
 
Így meg.. de hogy a másik projectben miért jó, az rejtély..
  1. typedef union UnTyp
  2. {
  3.         struct
  4.         {
  5.                 unsigned int ProgrammingAddress;
  6.                 unsigned int ProgrammingAddressH;
  7.         } P_A_comp;
  8.         unsigned long ProgrammingAddressLong;
  9. } ;
  10.  
  11. union UnTyp __attribute__((address(0x986)))  A_U;
(#) watt válasza AZoli hozzászólására (») Jún 30, 2013 /
 
A két project linker fájljai és a felhasznált PIC-ek egyformák?
Találkoztam olyan gyári projectekkel, amikben kapcsolók(script parancsok) voltak beállítva, az is megváltoztatja a környezetet. Sajnos nem volt erőm megérteni, mire voltak jók, csak beállítottam úgy, mint a gyári és jó lett. Lehet, itt is ilyesmi van.
A hozzászólás módosítva: Jún 30, 2013
(#) AZoli válasza watt hozzászólására (») Jún 30, 2013 /
 
Én változtattam a linker fájlokon, de csak annyit hogy a program memóriában szekciókat hoztam létre, minden más ugyan az. A PIC is ugyan az. Azt néztem még, hogy a régi projetben lehet hogy csak véletlenül kerültek jó helyre, mert előtte minden hely foglalt volt. Ezt majd még megnézem, de végül is megoldódott.
(#) nyarfa válasza icserny hozzászólására (») Júl 1, 2013 /
 
Na ez nekem nem műkszik. Valami hiányzik még.

Meg is találtam, mielőtt a módosítás lejárt volna
A hozzászólás módosítva: Júl 1, 2013
(#) AZoli válasza _vl_ hozzászólására (») Júl 4, 2013 /
 
Sziasztok!
Kérlek benneteket térjünk még vissza erre a kérdésre, mert még mindig nem tiszta számomra minden.
Szóval:
Most van két egymástól teljesen független C30-as projetem, egy saját bootloader (0-0x3FFE címig), és egy nevezzük firmware-nek (0x4000 -től). Mindkét program (külön-külön) a szimulátorban és a PIC-en (30F6012A) is tökéletesen működik.
A bootloadert rengeteget teszteltem, jó helyre ír, saját magát nem bántja, stb.
A firmware nem hív a boot területen lévő függvényt, a boot induláskor megnéz egy EEPROM területet, ettől függően maradunk a bootloader módban, vagy meghívjuk a firmware függvényt (fix 0x5000 címen) a firmware területen. Ezen kívül volt 6 megszakítás, amit szintén ugye gyárilag a boot területen volt, innen is fix címeken lévő függvényeket (0x4000-0x4FFE) hívok a firmware területen. De a megszakításokat már kikapcsoltam.

Amíg a program egyben volt, (1 project, 1 .c forrásfájl) addig működött minden, simán tudtam firmware-t frissíteni, de beláttam hogy ez így nem teljesen ok, nem szívesen térnék erre vissza.

A fenti módon viszont egyszerűen nem tudom összehozni... rendesen debuggolni sem tudok így. Ha Pickit 3-al felprogramozom a PIC -et (bootloader project), majd a bootloaderrel rátöltöm a firmware-t, akkor nem megy:
A firmware függvényból mindent kikommenteztem, már csak egy port billegtetés, de nem jutunk el odáig. Szkóppal nézve mintha még a boot területen resetelne mindig a PIC.
Ha viszont ez után kiolvasom a PIC-et, és átkapcsolok szimulátor módba (firmware projet az aktív), akkor minden rendben, meghívódik a firmware függvény.. a program memóriában az van, aminek lennie kell, 0x4000 -is boot, majd onnantól firmware..
Mit nem csinálok jól a két program összelinkelésénél? Hogy szoktatok ilyenkor debuggolni? Egy hete küzdök vele esténként, már nagyon kezd bosszantani..
(#) watt válasza AZoli hozzászólására (») Júl 4, 2013 /
 
Reset után minden alaphelyzetbe kerül, de ha a bootloader részről akarod átdobni a vezérlést, nem elég csak a kezdő címre irányítani a végrehajtást, minden bankot és vezérlő regisztert ami szóba jöhet a címzésnél és elágazásoknál, megszakításoknál, alap helyzetbe kell állítani(mint, ha reseteltél volna). Persze lehet, hogy nem pontosan értem a feladatot, de szerintem itt lehet a gond.

A debuggolás nem fog menni két egymástól elkülönülő programnál. Vagy az egyik, vagy a másik...
A hozzászólás módosítva: Júl 4, 2013
(#) AZoli válasza watt hozzászólására (») Júl 4, 2013 /
 
Szerintem jól érted.
A bootloader szerkezete:
  1. void __attribute__((section("my_firmware"))) Firmware (void);
  2. //*** Megszakításból ezeket a függvényeket hívjuk, (írható területen, de fix (nem változtatható) címeken
  3. void __attribute__((section("my_isr_1"))) Main_ISR_INT1Interrupt (void); //0x4000 - 0x4100
  4. void __attribute__((section("my_isr_2"))) Main_ISR_T1Interrupt (void);  //0x4100 - 0x4200
  5. main ()
  6. {
  7.         // Portok, perifériák, változók, egyéb inicializálás...
  8.        
  9.         // Nézzük hogy normál futás, vagy Bootloader:
  10.         TBLPAG = 0x7F; //EERROM
  11.         NVMADRU = 0x7F; //?
  12.         a =(__builtin_tblrdl (0xF000));
  13.         if (a != 0x5AA5)        Firmware ();
  14.  
  15.         //********************************* Ha ide jutunk, akkor firmware frissítés: *****************************************
  16.         while (2)
  17.         {
  18.                 // Itt van a bootloader program.
  19.                 // Csak 0x4000 -től írja program memóriát
  20.         }
  21. }
  22. //*********************************
  23. void Firmware (void)
  24. {
  25.         Nop (); //Ide nem kell semmi, első frissítés majd felülírja
  26. }
  27. //*********************************
  28. void _ISR _INT1Interrupt (void)
  29. {
  30.         Main_ISR_INT1Interrupt ();             
  31. }
  32. //Timer:
  33. //*****************TIMER1 megszakítás TMR1=PR1:**************
  34. void _ISR _T1Interrupt (void)
  35. {
  36.         Main_ISR_T1Interrupt  ();              
  37. }
  38. // többi megszakítás...
  39. //*****************INT1 megszakítás:**************
  40. void Main_ISR_INT1Interrupt (void)
  41. {
  42.         Nop (); //Ide nem kell semmi, első frissítés majd felülírja                       
  43. }
  44. //Timer:
  45. //*****************TIMER1 megszakítás TMR1=PR1:**************
  46. void Main_ISR_T1Interrupt  (void)
  47. {
  48.         Nop (); //Ide nem kell semmi, első frissítés majd felülírja       
  49. }


És a Firmware project:
  1. void __attribute__((section("my_firmware"))) Firmware (void);
  2. //*** Megszakításból ezeket a függvényeket hívjuk, (írható területen, de fix (nem változtatható) címeken
  3. void __attribute__((section("my_isr_1"))) Main_ISR_INT1Interrupt (void); //0x4000 - 0x4100
  4. void __attribute__((section("my_isr_2"))) Main_ISR_T1Interrupt (void);  //0x4100 - 0x4200
  5. main () //Itt ez csak MPLAB szim. miatt kell, eza 5.-15. sor soha nem kerül bele a PIC-be.
  6. {
  7.         /*
  8.         * Portok, perifériák, változók, egyéb inicializálás...
  9.         */
  10.        
  11.         // Nézzük hogy normál futás, vagy Bootloader:
  12.         TBLPAG = 0x7F; //EERROM
  13.         NVMADRU = 0x7F; //?
  14.         a =(__builtin_tblrdl (0xF000));
  15.         if (a != 0x5AA5)        Firmware ();
  16.  
  17.         //********************************* Ha ide jutunk, akkor firmware frissítés: *****************************************
  18.         while (2)
  19.         {
  20.                 Nop (); // Ide nem kell semmi, a bootloader úgy is kitakarítja..
  21.         }
  22. }
  23. //*********************************
  24. void Firmware (void)
  25. {
  26.         // Itt újra tudok bármit pl. perifériákat inicializálni, ha később nem lesz jó ami a Boot inicben van..
  27.  
  28.         while ()
  29.         {
  30.                 // Itt a programom..
  31.         }
  32. }
  33. //*********************************
  34. void Main_ISR _INT1Interrupt (void)
  35. {
  36.         //megszak. kiszolgáló rutin..        
  37. }
  38. //Timer:
  39. //*****************TIMER1 megszakítás TMR1=PR1:**************
  40. void Main_ISR _T1Interrupt (void)
  41. {
  42.         //megszak. kiszolgáló rutin..        
  43. }
  44. // többi megszakítás...


Mindkét project linker fájljában:
  1. ISR_1_START = 0x4000;
  2.       ISR_1_LEN = 0x0100;
  3.       my_isr_1 ISR_1_START :
  4.       {
  5.        *(my_isr_1);
  6.        . = ISR_1_LEN;
  7.       } > program
  8.  
  9.       ISR_2_START = 0x4100;
  10.       ISR_2_LEN = 0x0100;
  11.       my_isr_2 ISR_2_START :
  12.       {
  13.        *(my_isr_2);
  14.        . = ISR_2_LEN;
  15.       } > program
  16.  
  17.     FIRMWARE_START = 0x5000;
  18.       FIRMWARE_LEN = 0x12FFE;
  19.       my_firmware FIRMWARE_START :
  20.       {
  21.        *(my_firmware);
  22.        . = FIRMWARE_LEN;
  23.       } > program
(#) AZoli válasza AZoli hozzászólására (») Júl 14, 2013 /
 
A boot program nem függvényeket hív a firmware területeken, hanem goto -val adja át a vezérlést. Így tökéletesen működik. Veremhibák voltak, vagyis a lokális változók veremben történő elhelyezésével voltak problémái a fordítónak.
A hozzászólás módosítva: Júl 14, 2013
(#) gapati hozzászólása Júl 14, 2013 /
 
Sziasztok!
Szeretnék segítséget kérni, grafikus LCD-hez keresek Hi-Tec C könyvtárat. PIC16F877A-val szeretnék hajtani egy DISPLAYTECH 64128Q (Lomex 37-00-71) kijelzőt. A kijelzőn SBN6400G meghajtó van, amiről annyit sikerült kideríteni, hogy megfelel a KS0108-nak. Ha esetleg van valakinek, vagy tud linket, ahonnan letölthető kérem szánjon meg vele.

Köszönettel: gapati
(#) Ideiglenes válasza gapati hozzászólására (») Júl 14, 2013 /
 
Bátor vállalkozás, tekintve, hogy a grafikus megjelenítés igényel némi memória kapacitást, amiben a 16F sorozatú vezérlők azért nem bővelkednek annyira. A 18F sorozatot már inkább érzem alkalmasnak grafikus kijelzőhöz.

Mindenesetre ajánlom figyelmedbe ezt az oldalt.

Nem Pic-re ugyan, de C-ben könnyen lehet adaptálni.
(#) Ideiglenes válasza gapati hozzászólására (») Júl 14, 2013 /
 
(#) gapati válasza Ideiglenes hozzászólására (») Júl 15, 2013 /
 
Szia!

Elszomorít amit mondasz!
Mikropascalban kezdtem a kijelzőt szeliditeni, de hamar rá kellett jönnöm, hogy a 2K-s demó sajna semmire sem elég. I2C, és az LCD megette a programterületet, és mivel a gyógyításban nem nagyon tudtak segíteni, ezért kellett másik programnyelv után nyúlni. Eddig asm-ben programoztam a PICeket, de ezt a dolgot bizonyára bebuknám ebben a nyelvben. A Hi-Tech C-hez találtam gyógyítást, ezért kezdtem ezzel foglalkozni. A pascal nagyon ígéretes lenne, de mivel magam szórakoztatására használom a PICeket, nem engedhetem meg magamnak a fúllos fejlesztőeszközt. A 16-os sorozatot már elég jól ismerem, ezért is gondoltam továbbra is ezekre.

Köszönöm az infót, gondolkodom rajta, lehet hogy vátani kellene a 18-as sorozatra.

Üdv: gapati
(#) Ideiglenes válasza gapati hozzászólására (») Júl 15, 2013 /
 
Lehetőségként még ott vannak a 16F1xxx sorozat tagjai. Egy köztes lépcső a 18F és a 16F között. Merem ajánlani a 16F1939 a 16F887A helyett.

Érdemes megnézni, hogy mit pakoltak bele.

Vagy összehasonlítva a kettőt.
A hozzászólás módosítva: Júl 15, 2013
Következő: »»   76 / 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