Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Azthiszem igazad van!!
![]() ![]() ![]() elmélyülök a 887esben! csak kicsit riasztó volt első látásra a demo board
Ha a -demo board doksijában- a 35. oldalon megnézed a rajzot, láthatod, hogy halál egyszerű az egész. Vannak LED-ek, amik most neked kellenek, és még kristály is van rajta, ha a belső oszci után azt is ki akarod próbálni. Azt kell csak megnézned, hogy a LED-ek melyik lábra kapcsolódnak és milyen polaritással, és ennek megfelelően megírni a LED villogtató első programodat. Először az is elég, ha csak kigyullad, mondjuk minden második....
Lenne egy kérdésem a STACK-el kapcsolatban. Ezt a területet a linker fájlban jelölik ki, és 0x100 hosszú. Ez nálam a 0x300 tól kezdődik. Elvileg innek kezdődően hozza létre a fordító a két karakterláncnak a helyet, illetve minden subrutinnak itt osztja ki a lokális változóknak is a terültetet. Egy subrutinban deklarált változó, ha jól tudom addig él, amíg a rutin is él. Gondolom attól, hogy meghív még lejjebb lévő rutinokat, az nem jelenti azt, hogy már nincs szükség a létrehozott területekre?
Úgy gondolom, hogy itt az USB firmware kutyul el valamit, és nem maga a fordító. Próbáltam debuggolni, de eddig nem jöttem rá, hol változik meg a tartalom. Majd ma... A másik, hogy nem értettem milyen jelentősége van annak, hogy a karakter típusú tömbök a valóságban hosszabbak? Azt sem, hogy most mi jelentősége lenne annak, hogy egy ilyen típusú változót hol hozok létre és hol használok(ha csak a subban van szükség rá, akkor miért hoznám létre globálisnak, hogy pazaroljam a RAM-ot?) Ennek nem szabadna így megváltoznia szerintem semmiképpen! A fordítónak tudnia kéne mit hová osztott ki, és csak felszabadítás után oszthatna ki rá más változókat. A gyanúm az, hogy nálam nem teljesen korrekt a linker kiosztás az 512 puffer miatt, vagy az USB firmware valahogy nincs jól megírva és direkt címzéssel rontja el a területet, ami nem a fordító hibája.
Hello mindenki..
Lenn egy rövid kérdésem: pic16f877 40PIN P-DIP tokozású mikrokontrollerhez milyen gyári programozót érdemes venni? A microchip honlapján azt írja hogy a DV164120 PICkit2 StarterKit támogatja a pic16f877 http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nod...010242 de a DV164120 adatlapján az van, hogy: "Low pin count demo board supporting 8/14/20-pin mid range PIC microcontrollers" akkor most hogy van ez? Elöre is kösz a válaszokat.
Na raneztem a DCD fw-re, es ertem mi a baj...
Jol irod, nem kellene, hogy stack elmasszon, es teljesen korrektul irtad le. A gond nem ez, hanem ha megnezed a cdc.h-t, akkor lathatod, hogy a mUSBUSARTTxRam fuggveny nem is fuggveny hanem makro, de nem is ez az igazi gond, hanem az, hogy ez csupan elokesziti a transfert, de az nem tortenik ezen a ponton meg meg... A main-ben valahol vagy interruptban pl van egy CDCTxService fuggvenyhivas minden bizonnyal, es az intezi a transfert, de akkor mar a fuggvenyed reg kilepett, azaz a stack terulet ahova a dolgaid pakolva lettek felszabadult es nyilvan mas dolgokra lett felhasznalva valahol mashol...
Köszönöm, hogy megnézted! Én még ennyire nem értek a C-hez, de most hogy leírtad pontosan értem mi a gond!
Tanulság, hogy a CDC-vel nem küldhetek ki lokális változóból adatot, csak globálisból, vagy rom-ból. Még egyszer köszi!
Lenne még egy kérdésem.
Próbálok 512 bájtnyi memóriaterületet lefoglalni. Ezt tudtommal csak a char típussal tehetem meg, mert nincs olyan a C18-ban, hogy byte típus, vagy mégis? Ha a linkerben beállítok egy területet, pl. 0x600..0x7FF, akkor ide csak 511 hosszú char deklarálható, mivel a 512. a nullkarakter helye. Még is a MC firmware-ban láttam, hogy ugyanerre a helyre 512bájtot deklarál, és le is fordul hiba nélkül. Hogy csinálják? csatoltam az említett firmware-t(komplett work) jut eszembe, az msd_buffer[512] ről van szó... |