Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   37 / 153
(#) talajmente válasza trudnai hozzászólására (») Jún 2, 2011 /
 
MIPS , még nem hallottam, de nagyon jó.

Érdemes megnézned a gépi kódot 18F-re és 24F-re fordítva, ezt egyszerűen meg tudod csinálni. A kettő között ég és föld a különbség. Igen, mindkettő C-hez van, azért is adtam lejjebb 18F-ig az elméletemből az utóbbi órákban... (Habár nekem személy szerint a HW stack még mindig büdös és azt hiszem, a bankolást is említettem már)

RTOS-t csak PC-n (naná), mikrokontrolleren még nem akadtam olyan feladatra, amit kooperatív kernel ne tudott volna elintézni. Sokkal biztonságosabbnak tartom, hiszen nem kell megoldani a szinkronizálást, ami a programozók természetellenes idegenkedését okozza a szálaktól (és a természetellenes vonzalmukat az áttekinthetetlen state machine-ekhez).
Arra kell csak figyelni, hogy amikor a szál várakozik valamire, lepasszolja a vezérlést a következőnek. Persze ha nem teszi, az úgyis hamar kiderül.
Egyébként nem mértem, de feltételezem, hogy a kooperatív kernel még gyorsabb is mint a ríltájm, mivel a szálak 99%-a úgyis épp várakozik valamire az idő nagy részében, hát az az 1% akinek van dolga, hadd csinálja. Persze a prioritás kérdése itt nincs megoldva, de az még belefér a 99%-ba. Kezdőknek mindenképpen inkább ajánlom.
(#) El_Pinyo válasza talajmente hozzászólására (») Jún 2, 2011 /
 
Az RTOS-ok esetén is ugyanúgy lehet altatni a taszkokat, lehet eseményre is várakozni. Így csak a futásra kész taszkok kerülnek ütemezésre, prioritásuk szerint. Nagyon jó példa erre az open-souce uC/OS-II. Érdemes utánanézegetni, nem egy rossz dolog. Külön előnye, hogy nagyon jól skálázható, ami funkció nem kell, az kikapcsolható a fordítás során, így a helyet sem foglalja a kontrollerben.
(#) talajmente válasza El_Pinyo hozzászólására (») Jún 2, 2011 /
 
Igen, már nézegettem és nagyon tetszik. Talán a következő projektben kipróbálom. Egyelőre az van, hogy annyit szívtam a font antialiasinggel, hogy cserébe megérdemlem, hogy az egyetlen szinkró objektum a mutex. Ja, meg hogy a pipe-ok nem szinkronizálásra vannak, csak a taszkok közötti kommunikációra és az ember akkor vág beléjük egy újabb bájtot, amikor tetszik. Azért ríltájmban ez egy picit bonyolultabb még akkor is, ha a pipe a csomag része. Vagy fene tudja, lehet, hogy csak a microsoftos rossz tapasztalatok beszélnek belőlem.

Ó, meg hát a microchipes rossz tapasztalatok. Én a mai napig nem értem, hogy 1. hogy lehet úgy elbonyolítani a kódot ahogy a példaprogramjaikban szokták 2. minek még tovább bonyolítani azzal, hogy egyetlen forrásba beszórják az összes processzor/ICD/fordító/periféria kombinációkat 3. mi a francnak kell annyi hibát benne hagyni.
Eleinte próbálkoztam a projektjeimben pl. MiWivel, meg a Microchip grafikus könyvtárral, meg minden egyébbel, de eddig mindig az lett a vége, hogy annyira nem találtam valamit két hétig, hogy nekidühödtem, hogy pár nap alatt lekódoltam a saját változatomat.
Ja igen, a nagy kedvencem az USB volt device és host módban is, a szükséges kódmennyiség összesen kb. 1000 sor, a Microchip verzió valami 360kB és nem működik...
(#) El_Pinyo válasza talajmente hozzászólására (») Jún 2, 2011 /
 
Valóban, azt már korábban is tárgyaltuk valamelyik PIC-es témában és legtöbbünk számára érthetetlen, hogy minek kell a segítségül szolgáló frameworkok mintaprogramjait úgy összekutyulni, hogy még véletlenül se lehessen átlátni. Gondolok itt a sok feltételes fordítási direktívákra és társaira. A másik, hogy sokszor tényleg nem működik rendesen a mintakód. Na mindegy ez van, ezt kell szeretni.
(#) potyo válasza talajmente hozzászólására (») Jún 2, 2011 /
 
Idézet:
„Vagy inkább tudás hiányában nem használják ki az erőforrásokat a programozók, hm?”


Maradjunk annyiban, hogy mindig a feladat az adott és ahhoz választunk eszközt, nem pedig fordítva.
(#) trudnai válasza potyo hozzászólására (») Jún 2, 2011 /
 
Idézet:
„Idézet:
„Vagy inkább tudás hiányában nem használják ki az erőforrásokat a programozók, hm?”

Maradjunk annyiban, hogy mindig a feladat az adott és ahhoz választunk eszközt, nem pedig fordítva.”


Igen, ezek mar-mar vallasi vitaba illo dolgok, de azert azt meg had jegyezzem meg, hogy elmult evekben eleg sokat koltozkodtem, hol kisebb hol nagyobb lakasba. Mindig ugyanazok a cuccaim voltak, lehet idovel kicsit gyarapodtak is. Eddig mindig el tudtam helyezni a cuccaimat, meg akkor is ha csak egy szobam volt erre -- csak hat a nagy lakasban konyebben ment a tetriszezes es talan a vegeredmeny is szebb lett.

Ugyanez igaz a PIC merete es a program-ra is: Van mikor beferunk a kicsibe is, de azert kenyelmesebb a nagy helyen garazdalkodnunk. Hozza tennem, hogy a nagy lakas ketszer annyiba kerul, mint a kis lakas, szoval az sem mindegy hogy mennyi a budzsenk...
(#) watt válasza potyo hozzászólására (») Jún 2, 2011 /
 
Pontosan!
(#) adamhollos válasza El_Pinyo hozzászólására (») Jún 3, 2011 /
 
Köszi mindenkinek sikerült.

(#) adamhollos hozzászólása Jún 3, 2011 /
 
Ezt hogyan kéne helyesen megírnom?

  1. #include <pic.h>
  2. #include "delay.c"
  3.  
  4. void main(void)
  5. {
  6.         #asm
  7.         CLRF ANSEL;            
  8.         CLRF ANSELH;
  9.         #endasm
  10.         TRISA=0x00
  11.         while(true)
  12.         {
  13.                 RA4=0b1;
  14.                 DelayMs(100);
  15.                 RA4=0b0;       
  16.         }      
  17. }
(#) potyo válasza adamhollos hozzászólására (») Jún 3, 2011 / 1
 
Az asm blokk helyett egyszerűen
ANSEL=0; és ANSELH=0;

Amott pedig RA4=1; és RA4=0;

Ha nem megy, akkor írd be, hogy mi a hibaüzenet!
(#) adamhollos válasza potyo hozzászólására (») Jún 3, 2011 /
 
Köszi, működik.
(#) watt válasza adamhollos hozzászólására (») Jún 3, 2011 /
 
És hogyan sikerült?
(#) adamhollos válasza watt hozzászólására (») Jún 3, 2011 /
 
Szaladgál ide oda a fény a ledeken. Ha kapcsolok egy kapcsolóval (reed relé) akkor mindegyik led ég és a sötétség mozog.
(#) watt válasza adamhollos hozzászólására (») Jún 4, 2011 /
 
A kérdésem arra vonatkozott, hogy mit csináltál ahhoz, hogy a fordító működik!
(#) trudnai válasza watt hozzászólására (») Jún 4, 2011 /
 
(#) Bell hozzászólása Jún 4, 2011 /
 
Sziasztok!
A pic18f14k50 oszcillátor konfigurálása 16 féle.
Hol van az dokumentálva, hogy C18-ban miként kell az éppen szükséges értéket megadni?
Pl. #pragma config FOSC = IRC
(#) watt válasza Bell hozzászólására (») Jún 4, 2011 /
 
A help-ben találsz erre konkrét információt!
(#) Bell válasza watt hozzászólására (») Jún 4, 2011 /
 
Köszönet!
(Régebbi típusokhoz viszont találtam, ezért nem a fordító helpjét néztem)
(#) icserny válasza Bell hozzászólására (») Jún 4, 2011 /
 
Idézet:
„Hol van az dokumentálva, hogy C18-ban miként kell az éppen szükséges értéket megadni?”
Például így:
  1. mcc18 -p18f14k50 --help-config
(#) watt válasza Bell hozzászólására (») Jún 4, 2011 /
 
Sajnos sok más program megszoktatta velünk, hogy a helpjük nem sokat ér. Ezzel szemben az MPLAB egész jó ebben!
(#) Bell válasza icserny hozzászólására (») Jún 4, 2011 /
 
SZUPER!
Még az:
  1. mcc18 -p18f14k50 --help-config > p18f14k50cfg.txt

is működik!
(#) adamhollos válasza watt hozzászólására (») Jún 4, 2011 /
 
Uninstaláltam a fordítót meg az mblabot aztán feltettem újra az mblab 8.70-es verzióját és a felajánlott fordítót. Ezután a P.W.-ban a univerzális HI-TECH fordítót választottam.
(#) watt válasza adamhollos hozzászólására (») Jún 4, 2011 /
 
Köszi az infót, akkor jól gondoltam, hogy nem jól, vagy nem jó verzió volt feltelepítve. Jó programozást!
(#) adamhollos hozzászólása Jún 4, 2011 /
 
Hogyan tudok feltördelni egy változót karaktereire?
valami ilyesmire gondolok:
  1. int a = 1234567890;
  2. char a6 = brake(a, 5);
(#) watt válasza adamhollos hozzászólására (») Jún 4, 2011 / 1
 
Az int egy egész szám. Nincsenek karakterei. Ha a helyiértékeket akarod megszámlálni, és kijeleztetni(gondolom), akkor egyszerűen elosztod a legnagyobb helyiértékkel és egészként kezelve a hányadost megkapod a kívánt számott, utána kivonod a kapott értéket felszorozva a helyiértékkel és a maradékkal folytatod. Ha az ASCII kódot is elő akarod állítani, akkor hozzáadsz 48-at, és pont a megfelelő kódot kapod egy LCD-hez, vagy PC-hez megjelenítésre.
(#) trudnai válasza adamhollos hozzászólására (») Jún 4, 2011 /
 
Sok megoldas letezik (mint mindenre). Pl itoa() fuggvennyel kiteszed egy stringbe es kikapod a megfelelo helyierteku karaktert...
(#) adamhollos válasza trudnai hozzászólására (») Jún 5, 2011 /
 
Igen erre gondoltam de ez hogy csináljam.
A c#-al nem megy c-ben meg már rég csináltam ilyet.
(#) potyo válasza adamhollos hozzászólására (») Jún 5, 2011 /
 
Valami ilyesmi?

  1. char str[10];
  2. int a=1234567890; // azért ezzel vigyázz, mert az int lehet, hogy csak 16 bites
  3. unsigned char i;
  4. for (i=0; a>0; i++)
  5. {
  6. str[i]='0'+(a%10);
  7. a/=10;
  8. }


Persze ez alapesetben fordított sorrendben tölti fel a tömböt, de ez alapján már meg kellene tudnod csinálni.
(#) adamhollos válasza potyo hozzászólására (») Jún 5, 2011 /
 
Ok Köszi, majd próbálkozom!
Jó éjszakát.:nevetes2:
(#) fkosa hozzászólása Jún 5, 2011 /
 
Most kezdtem el próbálkozni PIC programozással. A Hi-tech C fordítót sikerült felélesztenem (azt hiszem).
Van egy 12C508A-m, ezzel szeretnék HDD motort meghajtani.
Ha jól értem, a GPIO-val tudom írni a kimeneteket (a GPIObits.GPx-szel bitenként). ezeket a 12C508A header file-jából lestem ki.
Arra nem jöttem rá, hogyan tudom konfigurálni a lábakat kimenetként (illetve kellene 1 engedélyező bemenet).
Tud vki segíteni?
Mellékeltem a c file-t.
Előre is köszönöm.

proba.c
    
Következő: »»   37 / 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