Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   27 / 153
(#) cua válasza icserny hozzászólására (») Szept 25, 2010 / 1
 
...elegánsabban, bár a lényegen nem változtat:

  1. #define MINTA 0b00001000    // 1-es azon a biten ami kell..
  2.  
  3. unsigned char ucValtozo;
  4.  
  5. if( ucValtozo & MINTA){
  6.     // just do it..
  7. }
(#) watt válasza potyo hozzászólására (») Szept 25, 2010 /
 
Természetesen, a két lányom szobája.
(#) icserny válasza cua hozzászólására (») Szept 25, 2010 /
 
Így egyszerűbb, de nem ez volt a feladat! Ebben nincs benne az x, aminek az értéke fordításkor nem feltétlenül ismert.
(#) icserny válasza watt hozzászólására (») Szept 25, 2010 /
 
Akkor nem kérdés, hogy Slave státuszban (v. ö. #define STATUS_Slave ...) csak te lehetsz.
(#) watt válasza icserny hozzászólására (») Szept 25, 2010 /
 
A valóságban igen, de a modulok Slavek...
(#) cua válasza icserny hozzászólására (») Szept 25, 2010 /
 
igaz, bár általában én előre tudom (szeretem tudni), hogy melyik biteket tervezem/akarom vizsgálni, ami nem zárja ki, hogy szükségem lesz valamikor dinamikusan vizsgálni egy-egy bit állapotát.
az általad említtt k&r féle c könyv alapmű, mindenkinek javaslom aki c-vel ismerkedik. annó 25-26 éve én is abból tanultam, a mai napig a polcon mosolyog
(#) kissi válasza icserny hozzászólására (») Szept 26, 2010 /
 
Igen, ezt én is néztem és nekem is azt sugallta , de mivel még nem használtam, ezért elolvastam a leírást, ott benne volt, hogy a header fájlban konfiguráljam ( lehet, hogy ezt is a headerben olvastam )!

Milyen C-t ajánlanál akkor, hogy átláthatóbb, ingyenes ( oktatáshoz ) és jó könyvtárszerkezetes legyen ( nekem tetszett a mikroc, de itt a listán nem ajánlották, így nem választottam ( a példák pedig nagyon jók benne! )?!

Köszönöm az eddigi segítségeteket!

Steve
(#) icserny válasza kissi hozzászólására (») Szept 26, 2010 /
 
Én eddig csak a Microchip fordítóit használtam huzamosabban. A gyári könyvtárait nem muszáj használni.
(#) icserny válasza icserny hozzászólására (») Szept 29, 2010 /
 
Idézet:
„De az inicializálás nem tökéletes, néha előfordul, hogy szemeteket ír ki!”
Újabb próbákat végeztem a "gyári" LCD rutinokkal, s úgy tűnik, hogy megy 4 és 8 bites módban is. (mellékelem a tesztprogramot)

Úgy tűnik, hogy a korábban említett inicializálási bizonytalanságokat érintkezési problémák okozzák (a kínai repülő zsinórok a precíziós header-ben is lötyögnek ).

example7.c
    
(#) kgabor hozzászólása Szept 29, 2010 /
 
Hello

Volna egy olyan problémám, hogy a diakjaimmal szeretnénk egy versenyen indulni PIC 16f877 es-el készített gömb-propeller óra,animásióval. Ők eddig tanultak Pascalt, most pedig ismerkednek a c-vel. Nekem van egy ChipCad demo panelom 1.2v és hozzá egy ősrégi Mplab ICD, ami sajna csak Mplab 5.5 ből működik.
A kérdésem az volna hogy tud-e valaki olyan leírást ami pic c-re vagy Pic Pascalra, van,
illetve ismere valaki olyan forditót, ami jól fordíja át asm-re a pascal, vagy c file-t, mert amikor a MikroPascal-al kigenerált asm filet áthúzom az Mplab-a az nem fogadja el, létezik egy oldal ami ezen akarna segiteni (http://www.micro-examples.com/public/microex-navig/doc/095-asm-translator.html) de nem jól dolgozik.
Nekem Asemmbly-ben jól megy a programozás, de a gyerekeknek az kinai... valakinek van valamilyen ötlete?
Hogyan tudnánk illetve mivel, irni programot, és utánna átküldeni az mplab-ba az azzal készült asm file-t?

Kösz
(#) 77blsoft válasza kgabor hozzászólására (») Szept 29, 2010 /
 
PIC C COMPILLER
Nekem bevált.
Sajnos nem tudom honnan lehet letölteni.
Ha kell küldj egy e-mailt és zip ben elküldöm.
(#) watt válasza kgabor hozzászólására (») Szept 30, 2010 /
 
Miért nem tanítod a gyári fordítókat(C, ASM)? Lehet, hogy hosszú távon megéri, a gyerekek hálásak lesznek!
(#) icserny válasza kgabor hozzászólására (») Okt 3, 2010 /
 
Ha van a kártyán soros port (vagy ahhoz hasonló), akkor a régi MPLAB+ICD-vel tegyél rá egy bootloadert AN1310 alapján, s utána áttérhetsz egy modernebb MPLAB-ra, amiben van HiTech C fordító. De kis ügyességgel talán a MikroPascal-lal is összebarátkoztatható.

Mellesleg Pascal ismeretekkel esetleg a JAL is számításba jöhet... :smoke: Bővebben: Link
(#) Atielektro hozzászólása Okt 4, 2010 /
 
Sziasztok!

A segítségeteket szeretném kérni abban, hogy hogyan lehet egy tömb adatmemóriabeli kezdőcímét megadni C-ben? A pic, amit programozgatok az egy 16F628A-s, a fordító a Hi-Tech C. Ami parancsot én tudok, az csak bájtos változó elhelyezésére jó (pl: volatile unsigned char chKarakter @ 0x70, sajnos tömbre nem. Kerestem a fordító kézikönyvében is erre utasítást, de nem találtam semmit.
(#) cua válasza Atielektro hozzászólására (») Okt 4, 2010 /
 
a tömb első elemének címe.
  1. unsigned char ucArray[5];
  2. unsigned char *ucAPointer;
  3.  
  4. ucAPointer = &ucArray[0];
  5.  
  6. //..ha szimpatikusabb, akkor:
  7. ucAPointer = ucArray;
(#) trudnai válasza Atielektro hozzászólására (») Okt 5, 2010 /
 
@cue: Nem kideriteni, hanem megadni szeretne Atieketro a tomb kezdo cimet.

Mehany gondolat ezzel kapcsolatban:

1. Tipikusan magas szintu nyelven az ember nem szeretne a valtozok ill tombok kezdo imet meghatarozni. Arra valo a fordito es a linker, hogy azokat szepen elhelyezze. Az egyetlen kivetel amikor a harver miatt van erre szukseg, pl a port vagy egyeb specialis regiszterek cimei, de azok mar tobbnyire ugyis definialva vannak

2. Hi-Tech-et nem ismerem annyira, de pl Microchip forditonal ezt linker scripttel szokas megadni. Tehat letre kell hozni egy speci szekciot csak es kizarolag a tomb reszere, es pragmaval megadni hogy a tombnek hova kell kerulnie. Ezt a Microchip fordito doksijaban a nagy meretu tombok definialasanal targyalja. Lehet Hi-Tech-ben is igy van valahogy...

3. A 'volatile' nak igen keves koze van a valtozo helyenek meghatarozasahoz, az csak amiatt szokott a specialis regiszterek deklaraciojanl ott lenni, hogy a fordito ne probalja meg a kodot kioptimalizalni. Nem lenne pl jo ha egy port iras helyett a fordito ugy gondolna gyorsabb a kod ha a WREG-ben tarolja az erteket el...
(#) cua válasza trudnai hozzászólására (») Okt 5, 2010 /
 
igazad van, túl sokszor magyaráztam már a pointerek és tömböket, rutinból válaszoltam sablonnal
(#) Atielektro válasza trudnai hozzászólására (») Okt 5, 2010 /
 
Igazad van. Túl nagy értelem nem lett volna, ha én mondom meg a tömb kezdőcímét, csak asm-ben megszoktam, hogy a változóimat a minden Bank-ból elérhető memóriaterületre rakom.
A volatile-t nem is a címmel kapcsolatban írtam, de az tény, hogy 100%-ban nem voltam képben annak használatával. Köszi a példát rá, ez jól jött.

Meg amúgy is köszi a segítséget!

Azért cua-nak is köszönöm, még ha nem is arra válaszolt amire én gondoltam. Értékelem a szándékot is
(#) trudnai válasza Atielektro hozzászólására (») Okt 5, 2010 /
 
Ah, ertem mit szeretnel. Mint mondtam nem ismerem a Hi-Tech-et, de a leirasaban ezt talaltam:

  1. Uninitialized static variables are allocated in one of the bss, rbss or bigbss psects. Objects qualified near appear in the rbss psect; objects larger than one bank in size or byte long objects are placed in the bigbss psect and the remainder in the bss psect. They will occupy fixed memory locations which will not be overlapped by storage for other functions.


Magyaran 'near' kulcsszoval lehet a tombodet az access ram teruletere kenyszeriteni - de meg akkor is ha a tomb tul nagy lehet a fordito (ill. a linker) megis ugy dont, hogy azt a bigdata-ra helyezi...
(#) zenetom hozzászólása Okt 16, 2010 /
 
Kezdek összebarátkozni ezzel a C-vel, már megy portról is a megszakítás.
(#) zenetom válasza zenetom hozzászólására (») Okt 17, 2010 /
 
Elszóltam magam. Case elágazásba lehet if-et ágyazni?
Konkrétan így...:
  1. switch (PORTDbits.RD1)
  2.                                 {
  3.                                         case 0:
  4.                                                 kapcsolo = 0;
  5.                                         break
  6.                
  7.                                         case 1:
  8.                                                 if (kapcsolo < 220)
  9.                                                 {
  10.                                                         ++kapcsolo;
  11.                                                 }
  12.                                         break;
  13.                                 }

Mert úgy látszódik, hogy nem akar működni, de ha ez így jó, akkor máshol van a hiba.
(#) vicsys válasza zenetom hozzászólására (») Okt 17, 2010 /
 
Miért ne lehetne? Maximum sikerült összehoznod egy olyan feltételt, ami sohasem teljesül...
Tegyél a végére egy default ágat is, hátha azt hiányolja.
(#) zenetom válasza vicsys hozzászólására (») Okt 17, 2010 /
 
Itt valami más baj van. Egyébként szoftveres pergésmentesítő lenne az RD1-en lévő nyomógombnak.
Aztán így lenne felhasználva:
  1. ToSendDataBuffer[0] = 13;
  2.     if (kapcsolo = 1)  
  3.     {  
  4.         ToSendDataBuffer[0] = 12;
  5.     }


Ha megnyomjuk a gombot az RD1-n, akkor növeli egyel a "kapcsolo" változót. Nekem az a cél hogy ha megnyomom a kapcsolót, akkor a ToSendDataBuffer[0] függvény értéke 12 legyen, ha nem akkor 13. De ha folyamatosan nyomom akkor is csak egyszer legyen 12 a függvény értéke, erre szolgál ez a pergésmentesítő.
Viszont a "kapcsolo" változó értéke 1, akármit csinálok vele. Már mindent átnéztem, jól működik a port beolvasása is, mert akkor 1-et kapok ha le van nyomva a kapcsoló.
Szerk.: lehet nem voltam valami érthető, de úgy tűnik hogy ez a nyavalyás switch nem akar működni, pedig máshol meg megy.
(#) pipi válasza zenetom hozzászólására (») Okt 17, 2010 / 1
 
kapcsolo == 1
(#) zenetom válasza pipi hozzászólására (») Okt 17, 2010 /
 
Ez durva.
E fene egye meg az apróbetűs részt, furcsa is volt nekem, de nem adott hibajelzést az MPLAB, írja is az egyik oldal, ahonnan "tanulgatok" :
Idézet:

Még egy figyelmeztető megjegyzés: a kezdő C programozók gyakran írnak = jelet ott, ahol == kellene. Amint ezt a 2. fejezetben látni fogjuk, az eredmény általában egy érvényes (de az adott helyen értelmetlen) kifejezés, így a fordítóprogram nem ad hibajelzést.


Mégegyszer köszönöm szépen! :yes:
(#) trudnai válasza zenetom hozzászólására (») Okt 17, 2010 /
 
Eppen emiatt latni gyakorlott C programozoktol, hogy a feltetelt megcserelik, azaz:

if ( 1 == kapcsolo ) { ... }

Tehat ha veletlen 1 db egyenlosegjel sikeredne oda, akkor a fordito hibaval leall... Ez termeszetesen csak akkor mukodik ha literalissal (szammal pl jelen esetben az 1) vagy konstanssal (aminek tartalmat nem tudod altoztatni) hasonlitod ossze a valtozod.
(#) zenetom válasza trudnai hozzászólására (») Okt 17, 2010 /
 
Ezt lehet én is így fogom csinálni.
Köszi neked is!
(#) bazs hozzászólása Nov 29, 2010 /
 
Sziasztok azt szeretném megkérdezni, hogy C-ben, hogyan kell az LCD-t vezérelni és deklarálni BASIC-ben már egész jól otthon vagyok de most szeretnék áttérni egy komolyabb nyelvre.
(#) vicsys válasza bazs hozzászólására (») Nov 29, 2010 /
 
(#) bundyland válasza bazs hozzászólására (») Nov 29, 2010 /
 
Szia!

Ajánlom neked a mikroc pro for pic-et.
Bővebben: Link
Teljen jól használható, a help-je tele mintapéldákkal és kapcsolási rajzal is, többekközt az LCD vezérléssel is.
A fordító 2k- ig ingyenes!
Következő: »»   27 / 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