Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: (Felhasználó 1542), idő: Ápr 3, 2006
Lapozás: OK   23 / 118
(#) Hacsi válasza kisszee hozzászólására (») Júl 13, 2009 /
 
Idézem :
"És a tapasztalat azt mutatja, hogy a kezdők is (mint én) inkább használják ezeket a könyvtári függvényeket; más a helyzet mikor valaki saját maga akar írni függvényeket, az szerintem még egy helyes út, az úgyis azzal fog járni, hogy kénytelen lesz megismerni a regisztereket, az assemblyt."

Belső kényszer a megismerésre. Ebben van a lényeg szerintem.
Azt sem hiszem, hogy mire valakinek működik és helyesen működik a programja, az ne tudná hogy mit csinál.
Jó tanulást, és kitartás.
(#) potyo válasza Hacsi hozzászólására (») Júl 13, 2009 /
 
Jól megy, de egy csomó dolog másként van benne, mint az ANSI C fordítókban. Pl. az int az mindenhol 16 bites signed típust jelent. A CCS-ben az int 8 bites, ráadásul unsigned. Mondjuk ez megfelel az eredeti Kernighan&Rithie féle C-nek, ami azt mondta, hogy az int legyen az alap változó tipus az adott processzorhoz, és ahány bites a processzor adatbusza, annyi bites az int tipus. Csakhogy ez idő közben változott, és a kód hordozhatósága miatt az int 16 bitesnek lett kinevezve az ANSI szabványban, a short tipus a 8 bites (vagy a char), illetve a signed módosító az alapértelmezett. Finoman szólva zavaró, ha másik fordítóval vagy másik programozási nyelven is dolgozik az ember...
(#) Hacsi válasza messer hozzászólására (») Júl 13, 2009 /
 
Syntax:
setup_counters (rtcc_state, ps_state)

nálad kimaradt egy vessző, vagy logikai | jel.

"
Parameters:
rtcc_state may be one of the constants defined in the devices .h file. For example: RTCC_INTERNAL, RTCC_EXT_L_TO_H or RTCC_EXT_H_TO_L



ps_state may be one of the constants defined in the devices .h file.



For example: RTCC_DIV_2, RTCC_DIV_4, RTCC_DIV_8, RTCC_DIV_16, RTCC_DIV_32, RTCC_DIV_64, RTCC_DIV_128, RTCC_DIV_256, WDT_18MS, WDT_36MS, WDT_72MS, WDT_144MS, WDT_288MS, WDT_576MS, WDT_1152MS, WDT_2304MS
"


(#) messer válasza icserny hozzászólására (») Júl 13, 2009 /
 
#define set_options(value) ---ez a sor mit jelent?

Létrehoz egy set_options változór egy címre?
(#) potyo válasza messer hozzászólására (») Júl 13, 2009 / 1
 
Ez az előfordítónak szól, hogy ahol talál set_options(value) kifejezést bárhol a kódban, azt cserélje le az utána következő asm betétre. A value helyén álló értéket pedig helyettesítse be az asm betétben a value helyére. Hasonló a függvényhez, de nem az. A fordított perjelek pedig azt mondják meg az előfordítónak, hogy a rákövetkező sort azt ne kezelje új sorként, hanem az még ennek a része, csak a könnyebb olvashatóság miatt van másik sorban.
(#) Hacsi válasza potyo hozzászólására (») Júl 13, 2009 /
 
Szia.

Ebben igazad van, de a CCS is meg tudod kérni hogy 16 bites legyen. Int8, Int16, Int32 stb... tehát nem túl nagy probléma. Természetesen a régebbi CCS-ben megáll amit írsz.
(#) messer válasza Hacsi hozzászólására (») Júl 13, 2009 /
 
Javítottam, de sajnos ugyan azt kapom tehát az option regiszter 0b00001111 nekem pedig ez kellene 0b11011111 azt nem értem, hogy miért változik meg a 7-es és 6-os bit?
(#) icserny válasza messer hozzászólására (») Júl 13, 2009 /
 
Idézet:
„ez a sor mit jelent?”

Gondolom egy inline függvényt definiál, melynek set_options() a neve, "value" a formális paramétere és
MOVLW value
OPTION
a függvény törzse.


(#) potyo válasza Hacsi hozzászólására (») Júl 13, 2009 /
 
Tőlem lehet akár int5 is, de miért nem lehet az alap elnevezésekkel a szabványt követni?
(#) Hacsi válasza potyo hozzászólására (») Júl 13, 2009 /
 
Látod ezt nem tudom, de gyanítom, hogy amiatt lehet amit leírtál, vagyis a régebbi változatok igazodtak az Integer tipusával a maghoz. A kompatibilitás miatt gondolom megmaradt, de bejött az Int16, 32 is, szintén az általad leírtak miatt.
Szerintem jó a CCS, és azonos értékű a HI-Tec rendszerével. Bár ha jól tudom, akkor az Microchip megkaparintott részt a C fordítói jogokból, és várhatóan nagyot fog fejlődni az MPlab C betétje - HI-Tech alapon. (DE csak ha jól tudom.)
(#) Hacsi válasza potyo hozzászólására (») Júl 13, 2009 /
 
Egy kerülőút lehet:

#define _int int16
.
.
_int változónév = 0x00;

...

Ebben az esetben arra definiálod mire akarod.
( még mindig igaz amit fentebb írtál, de nem fog működési hibát okozni )
(#) MPi-c válasza messer hozzászólására (») Júl 13, 2009 / 1
 
Próbáld másik sorrendben, így:

  1. setup_counters (RTCC_INTERNAL, wdt_2304ms);
  2. #asm
  3. movlw 0b11011111
  4. option
  5. #endasm

Vagy az assembler betét helyett, ahogy icserny írta: #define ...
Szimulátorban szépen működik.
(#) Hacsi válasza messer hozzászólására (») Júl 13, 2009 /
 
"Javítottam, de sajnos ugyan azt kapom tehát az option regiszter 0b00001111 nekem pedig ez kellene 0b11011111 azt nem értem, hogy miért változik meg a 7-es és 6-os bit? "

Az OPTION regiszter :
bit 7 GPWU: Enable Wake-up on Pin Change bit (GP0, GP1, GP3)
1 = Disabled
0 = Enabled
bit 6 GPPU: Enable Weak Pull-ups bit (GP0, GP1, GP3)
1 = Disabled
0 = Enabled
bit 5 T0CS: Timer0 Clock Source Select bit
1 = Transition on T0CKI pin (overrides TRIS on the T0CKI pin)
0 = Transition on internal instruction cycle clock, FOSC/4
bit 4 T0SE: Timer0 Source Edge Select bit
1 = Increment on high-to-low transition on the T0CKI pin
0 = Increment on low-to-high transition on the T0CKI pin
bit 3 PSA: Prescaler Assignment bit
1 = Prescaler assigned to the WDT
0 = Prescaler assigned to Timer0
bit 2-0 PS<2:0>: Prescaler Rate Select bits
000
001
010
011
100
101
110
111
1 : 2
1 : 4
1 : 8
1 : 16
1 : 32
1 : 64
1 : 128
1 : 256
1 : 1
1 : 2
1 : 4
1 : 8
1 : 16
1 : 32
1 : 64
1 : 128
Bit Value Timer0 Rate WDT Rate
--------------------------------------------------

tehát a timer0 és a WDT állítása nincs hatással a PULL-UP és a Wake-up rendszerre. Azokat külön parancsokkal tudod programozni.

"port_b_pullups(TRUE);"

(#) messer válasza MPi-c hozzászólására (») Júl 13, 2009 /
 
Ok asm részlet teszi a dolgát, ezt kéne nekem elmagyarázni, hogy miért van!Úgy gondolom, hogy a setuo_counters (rtcc_internaal-csak az option regiszter t0cs, és a t0se bitet piszkálhatná, a wdt_2304ms pedig csak az option regiszter 0,1,2-es bitjeit (ps-osztót) Ezzel szemben ez a parancs bekavar az Option 6,7 biotjeibe is ami nekem nagyon nem jó mert engedélyezi a Wake-up -on pin change opciót, és a felhúzó ellenállásokat is engedélyezi! Nekem nagyon tetszenek ezek a parancsok csak azt szeretném tudni, hogy miért nem azt teszik amik a dolguk?
(#) messer válasza Hacsi hozzászólására (») Júl 13, 2009 /
 
Ezt látom én is "port_b_pullups(TRUE)" ez a parancs a 12-es sorozatnál nincs érvényben kéretik ccs helept kicsit megnézni!
(#) messer válasza Hacsi hozzászólására (») Júl 13, 2009 /
 
nincs hatással a PULL-UP és a Wake-up rendszerre. Azokat külön parancsokkal tudod programozni. "port_b_pullups(TRUE);"

Ha veszed a fáradságot és beírod mplab-ban setup_counters (RTCC_INTERNAL, wdt_2304ms); parancsot és szimulatoron megnézed az option regiszter tartalmát meglátotd hgy hatással van! Azért lovagolok a témán mert szeretném tudni, hogy mi történik lehet hogy én vagyok nagyon balfék. Azt szeretném ha nem vagdalnátok ki nekem help részleteket anélkül, hogy kipróbálnátok azt. Az asm-részlet teszi a dolgát, de azt szeretném, ha c parancsokkal is el tudnánk érni azt az állapotot hogy az option tartalma 0b11011111 legyen!
(#) icserny válasza messer hozzászólására (») Júl 13, 2009 / 1
 
Az assambly nyelvű inline függvény mellé adtam egy linket is. Abból kiderül(hetett volna), hogy a setup_timer_0() függvényel is is írható az OPTION regiszter, csak a megfelelő byte értéket kell neki megadni. (gondolom, a setup_counters() is hasonlóan működik). Ha a magasabb helyiértékekre nem adsz meg 1-eket, akkor ne csodálkozz, hogy kinullázza!

Például:

SETUP_TIMER_0(RTCC_DIV_1 | DISABLEPULLUPS)

A megfelelő konstansokat a #define segítségével lehet megadni. Például:

#define DISABLEPULLUPS 0x80
(#) messer válasza icserny hozzászólására (») Júl 13, 2009 /
 
Ez a lényeg ebből tanul a buta emberke köszönöm átrágom magam rajta.Nem tudtam, hogy kinullázza nem mondtam neki hogy ezt tegy miért nem hagyja default 11-ben köszönöm, és nagyon sokat segítettél.
(#) icserny válasza messer hozzászólására (») Júl 13, 2009 /
 
Idézet:
„Nem tudtam, hogy kinullázza nem mondtam neki hogy ezt tegye”

Pont ez a baj az ilyen "felhasználóbarát" programozási környezetekkel, hogy nem tudni, mit is csinálnak. Ilyenkor csak egyet lehet tenni: meg kell nézni a generált assembly kódot.
(#) MPi-c válasza messer hozzászólására (») Júl 13, 2009 / 1
 
Ha valamire kíváncsi vagy, nézd meg, hogy mire fordul!
Szimulátorral szépen lépéséneként lehet az assembly listában is vizsgálódni. Pl. a te kódod a mellékletben.
(Na, többek közt ezért jó, ha az ember tud assemblyben is... )

mplab1.png
    
(#) MPi-c válasza potyo hozzászólására (») Júl 13, 2009 / 1
 
Uraim! Ez meddő vita. Kinek a pap, kinek a papné...
Egyébként lényegesen szebben el lehet intézni az int1, int8, int16, _int... stb. helyett:
  1. #pragma type short=8,int=16,long=32

(vagy pragma nélkül.) És a még a signed is beállítható "alapértmezettnek"!
(#) Hacsi válasza MPi-c hozzászólására (») Júl 13, 2009 /
 
Maximális egyetértés !
Valóban ez a legszebb megoldás. ( reméljük mindeki pontosan érti hogy miért is )
(#) potyo válasza MPi-c hozzászólására (») Júl 13, 2009 /
 
Én is tudom, hogy lehet, de azt nem értem, hogy miért nem ezek az alapértelmezettek, és ha majd nekem úgy tetszik, akkor állítgatom, ahogy akarom...
(#) MPi-c válasza potyo hozzászólására (») Júl 14, 2009 /
 
Meg sem próbállak meggyőzni, ezért írtam, hogy "meddő vita". Ha nem tetszik, hát nem tetszik. Szerencsére lehet válogatni és mindenki olyat használ, ami neki "bejön", de azért azt hiszem, a CCS-szel is érdemes kezdeni. Akit egy kicsit is érdekel a téma, az egy idő után úgyis kíváncsi lesz más fordítókra is, én legalább is így vagyok vele.
(#) bladika hozzászólása Júl 14, 2009 /
 
Sziasztok!

Nincs meg valakinek a legfrissebb CCS?
(v_4.093)
(#) messer válasza MPi-c hozzászólására (») Júl 14, 2009 /
 
Köszönöm a segítségeteket, szerencsére assembly-ben programoztam egészen eddig, de nagyon szeretnék áttérni a c-re. Sokat jelent, hogy itt ezen a fórumon ilyen felkészült és segítőkész emberek vannak. Többet ér bármelyik tanfolyamnál vagy iskolánál. Még egyszer köszönöm biztosan lesz még bagatel kérdésem, de egyszer csak, majd talán olyan szinten menni fog a c is mint az assembly.
(#) Hacsi válasza messer hozzászólására (») Júl 14, 2009 /
 
Egy pici segédlet --> C_programnyelv
(#) sysy válasza potyo hozzászólására (») Júl 14, 2009 /
 
Elolvastam a babo postját és abban nem láttam azt a sort, hogy kedves potyó, mi a véleményed a CCS versus egyéb C fordítókról. Hagyd már rá, hogy azt a fordítót használja, amit szeretne.
Egyébként ez itt a CCS thread.
Én is végig csináltam a 80-as években az Intel összest ASM-ben meg a Z80-as összest is, plusz BASIC és PASCAL-t. Majd a PIC-nél az ASM-et, BASIC-ot, Hi-Tech C-t és a Microchip C-t is és nekem személy szerint a CCS "jött be" mint leghasználhatóbb fordító. Nem szeretnék hitvitát indítani, meg flémet sem, de ez is, mint minden más, ízlés kérdése. Nem bántam meg, hogy áttértem a CCS fordítójára, mert sokkal barátságosabb fordító minden másik, általam kipróbált fordítónál és kényelmesebben, sokkal gyorsabban és kevesebb fájdalommal tudtam megvalósítani nagyon sok munkámat, mintha másik fordítót használtam volna. Ez számszerüleg több 10.000 sor kódot jelent.
Persze aki dobálja a haját ás a kódok hordozhatóságáról és a tiszta ANSI nyelv megvalósíthatóságáról szeret beszélgetni, annak jó a Hi-Tech és társai. Kevesen vagyunk olyanok akik több fajta MCU-t is használunk napi szintű munkáink során és nem hiszem, hogy mindenki - napjában többször is - portolni akarja a programjait különféle MCU-ra. Otthoni szórakozásra és hobbicélú felhasználásra meg különösen alkalmas szerintem - majd megcáfolják sokan - a CCS fordítója. Nagyon kényelmes, nagyon sok könyvtári támogatás van benne és tömör kódot generál. Senki ne higgye azt, hogy a Microchip és a Hi-Tech fordítókban nincs hiba és azok brilliáns termékek. Azokkal is lehet szívni akkorát, hogy elátkozza azt is aki megtervezte ezeket. Hagyd, hogy mindenki azzal írja a programjait, amivel szeretné. Ha nem tetszik neki, akkor megkérdezi, hogy "akkor most hogy?"
Szerintem nem rossz választás a CCS.
Mindíg arra kell gondolnunk, hogy nem levegő-föld rakétét fognak irányítani vele.

sysy
(#) icserny válasza sysy hozzászólására (») Júl 14, 2009 /
 
Idézet:
„Szerintem nem rossz választás a CCS.”

Hmmm, kinek van legális CCS fordítója? (ez is egy választási szempont!)
(#) gulasoft válasza sysy hozzászólására (») Júl 14, 2009 /
 
Szerintem a CCS sokkal C szerűbb és nem annyira Microchip szerű, ezért barátságosabb, és ezért nem tetszik azoknak akik az asm-et preferálják.
Következő: »»   23 / 118
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