Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
No, most lenne még egy kérdésem, de ez most már a betöltendő programra vonatkozik
Szóval: hogy tudnám azt elérni, hogy a fordító úgy fordítsa le a betöltendő (egyébként önmagában, "normál módon beégetve" szépen működő) programot, hogy mindenképpen a 0x0000 címtől kezdődően töltse be, és a 0x0000 címen legyen egy ugró utasítás, amely a program kezdetre (main) mutat? Azt tudom, hogy az #ORG direktívával kell valamit varázsolni, de azt már nem tudom, hogy mit. Ez pedig kell hozzá, hogy a bootloader jól töltse be a működő programot. Kérlek, segítsen, aki tud...
Hali
Esetleg a #build(reset=0x200,interrupt=0x208) direktivaval. (CCS Help) Udv Vili
Hát ez sajnos nem működik így. Illetve, nem elegendő, az #org-al is csinálni kell valamit, mert így nem rakja az elejére azt az ugrási címet, ami a main()-ra mutat. Hol találtad ezt a helpet?
Hali
MPLAB -> CCS C project . A build gomb melletti kerdojel. Udv Vili ps : Pre-processor directives. A CCS Peldak kozott van ra mintapelda : ex_bootload.c. Maga a bootloader : ex_bootloader. c. Include :bootloader.h
Hát... Átnéztem, egy csomó dolgot kipróbáltam, de nem tudom úgy megoldani, ahogy kellene. Az a helyzet, hogy a lefordított HEX file első sorában ennek kellene lennie:
:020000040000FA Ez mutatja, hogy a 0x0000 címen ugrási cím fog következni, amit a következő sorban ír le EF és F0 bájtok mögött (GOTO utasítás). Sajnos nekem ezt eddig nem sikerült elérnem. Talán majd elolvassa a kérdést valaki, aki már csinált ilyet és tud segíteni... Minden esetre köszönöm, hogy fáradtál a dologgal.
Ez nem egészen így van. Az :020000040000FA rekord az Intel 32 bites hex formátumú állományokban szerepel, s a 32 bites cím felső 16 bitjét mondja meg (jelen esetben 0000-át állít be). Ha INHX32 formátumú kimenetet kérsz (Microchip fordítóknál az MPLINK opciói között állítható be, CCS C-nél nem tudom, hogyan lehet), akkor lesz ilyen rekordod.
Az általam ismert bootloaderek használata esetén a 0x0000 címre fölösleges bármit is tenni, a bootloader sajátmagát úgysem írja felül, s a bootloader már eleve tartalmazza kell a reset és az interrupt vektorokban a megfelelő ugróutasításokat.
Hát ez az, megoldottad a problémát! Ez a bootloader (továbbiakban BL) ugyanis a következőképpen működik: Ő fixen 0x74c0 címtől kezdődően települ, kb. 0x79ac-ig és kirak a 0x0000 címre egy ugróutasítást, ami a BL main-ra mutat. A működő program (MP) beolvasásakor, ami ebbe az általad említettINHX32 formátumban van, a BL ugrási címe felülíródik. A MP-t minden varázslat nélkül a 0x0000 címtől kezd írni, tart, ameddig tart. Majd pedig a 0x0000 címről kiszedi, ami ott van (a MP ugrási címe) helyére írja az ő(BL) eredeti ugrási címét, a kiszedett címet pedig felrakja a 0x7d80 fix címre. Így induláskor mindig a BL indul el és a PC program egy átküldött paranccsal indíthatja a MP-t. Így induláskor akár lehet új MP-t feltölteni, vagy működtetés közben egy CPU resettel ilyen BL állapotba hozni. Az ötlet alapvetőleg jó, csak a file formátummal kínlódtam...
Aztán éjjel észrevettem, hogy a régebben, még 4.057-es verzióval fordított programjaim a "régi", nekem jó formátumuak, amióta a 4.093 verziót felraktam, azóta ír ilyen hexeket. Én is MPLab keretben dolgozom, hol lehet ezt átállítani, beállítani? Én is keresgéltem valami hasonlót, de nem találtam, miután nem tudtam, mit is keresek...
Ja, igen, 3 hete az MPLab-ot is frissítettem a 8.4-es verzióra.
Az opciók beálítása az MPLAB IDE Project/Build Options/Project menüpontban történhet. CCS C fordítónál azt olvasom a manualban, hogy:
-O8 8-bites Intel HEX kimenet -OW 16-bites Intel HEX kimenet 32 bitex hex kimenet generálására nem látok lehetőséget. Idézet: Ennek így mi értelme van? Minden tisztességes bootloader a memória elején, az úgynevezett bootloader blokkban helyezkedik el, s a vektorokból a boot blokk méretével eltolt fix címekre ugrik. Így a bootloader által elfoglalt területet sohasem kell módosítani, sőt, írásvédetté tehető. „Ő fixen 0x74c0 címtől kezdődően települ, kb. 0x79ac-ig és kirak a 0x0000 címre egy ugróutasítást, ami a BL main-ra mutat.”
A PICCOLO projekt PIC18 támogatói programkönyvtárának második (javított és bővített kiadása) már elérhető. A mintaprogramok részletes leírása és magyarázata még várat magára...
Fontos változás, hogy az eddigi p18_all.h helyébe a piccolo_all.h lépett, s a legfontosabb projektszintű konfigurációs paraméterek definiálása (HID_BOOTLOADER, USE_USB, USE_INTERRUPT) a piccolo_config.h állományban kapott helyet. Ezeket a paramétereket azonban a Project/Build Options/Project menüben (a C18 fordító opcióinál) is meg lehet adni, ahogy némelyik mintaprojektben csináltam. A főprogramba csak a piccolo_all.h állományt kell becsatolni (include-olni). A demó projektekből kiderül, hogy az USB használatánál milyen útvonalakat kell beállítani és mely fájlokat kell hozzáadni a projekthez.
Köszi a segítséget. Végül is rájöttem, hogy a gondot az okozza, hogy a hex file végéhez, már a programon túl hozzáirogat üres 32 bites címzést (04 rekord típus), ezt a file feldolgozó programom nem figyelte eddig, és szépen felülírta hülyeségekkel a már Flashba beírt ugrási címet. Ezt kijavítva, innen kezdve működik. Hiába, az ember csak tanul mindig...ez a szép az egészben, nem igaz?
A honlapról rögvest letöltöttem a mintákat, átnézem majd, köszi.
Bocs, most jöttem rá, hogy tévedésből rossz topikban hirdettem meg a PIC18 támogatói programkönyvtárat, ugyanis az C18-hoz készült! (én leszek legjobban meglepve, ha hasznát tudod venni... )
Hello,
16F628A MCU-ra szeretnék csinálni egy 4x4-es billentyű mátrixot. A mátrix vezérlését a checkButton() függvényben találjátok. Sajnos valami hiba van benne, mert ha megnyomok egy gombot, előfordul hogy másikat érzékel. Tipikus példa erre, hogy a btn2 helyett sokszor btn1-et érzékel, btn5 helyett btn9-et vagy vagy btn13-at. A Col1-2-3-4 lábakat egy 5K ellenállással földre húztam. A 4 sorhoz és 4 oszlophoz tartozó vezetékek egy szalagkábelen (kb 30cm) jutnak el a kapcsolókig. A földre húzó ellenállások a panelon a PIC mellett vannak. Már sokat szenvedtem vele, de nem tudom mi lehet a baj. Meg tudnátok nézni hogy a hiba a kódomban van vagy pedig a kapcsolásomban. A kódot és a kapcsolást csatoltam. Előre is köszi.
Hali
A checkButton() fv szerintem hibas. Az elso oszlop lekerdezese jo:
A masodik (es a tobbi) nem jo:
Itt bekapcsolod a Row2-t majd ugy is hagyod mert a vegen a Row1-et teszed L-be. A tobbi ugyanigy van. Igy termeszetes hogy rosszul mukodik. Vagyis nem a kivansagodnak, hanem az utasitasodnak megfeleloen mukodik. Udv Vili
Köszönöm szépen a segítséget.
A sok másolás... Pedig hányszor végignéztem már a kódot és erre az egy részre nem gondoltam.
Hello!
Már korábban kérdeztem de nem volt rá válasz, nem tudja valaki, hogy hogyan kell beállítani a motor control pwm-et? a helpben van rá példa de nem teljes és nem működik. dsPIC30F2010-hez kellene. Örülnék neki ha valaki tudná már jó sokat vesződtem vele. ÜDV!
Üdv mindenkinek!
Tudtok valahol valami értelmes CCS USB HID bootloadert amihez van forrás (ha lehet a PC-s részéhez is). Két napja túrom a guglit eredménytelenül. Lehet hogy már keresni sem tudok? A Microchip féle megvan, de azt meg le sem tudom fordítani - nem beszélve arról hogy mindenképpen bele kell hogy túrjak, és eddig a CCS-be ástam bele magam, az mplab féle agymenések nekem még kissé átláthatatlanok. Találtam egyet, egész ígéretes, átállitottam a PID/VID-et az mplab féle bootloaderére, meg is találja, de minden gomb szürke marad. Jobb lenne valami olyan amihez van forráskód (C#), amibe bele tudok nyúlni, esetleg beépíteni a kütyü programjába a frissítést.
A HID bootloader (ha valamelyik támogatott, vagy azokkal kompatibilis hardverről van szó), akkor lefordítva, készen is megtalálható a Microchip MCHPFSUSB keretrendszerben. A lefordításával csak annyi gond lehet, hogy a gyári projektek a C:\\MCCP18 könyvtárat feltételezik, én meg nem oda szoktam telepíteni. Ha valami nem megy, akkor kérdezz!
A használatához annyit kell tudni, hogy a bootloader a 0x0000-0x0FFF címeket elfoglalja, s a reset és az interrupt vektorok fixen az 0x1000, 0x1008, 0x1018 címekre ugranak. Ide kell tehát elhelyezni a saját vektoraidat...
Igen. Ott is legtöbben az mplab félét használják, vagy a CDC-t, arról nem beszélve hogy ott PC-s programot találni...
Valami SIOW.exe-t emlegetnek, de tippem nincs rá hogy mi az és hol lakik.
Hali
PCW, tools, Serial port monitor. De a telepitett CCS C konyvtaraban ott lapul. Hasznos segedeszkoz. Nekem sokat segitett. Udv Vili
Valaki használt már 18F46J50-et?
Most tervezném a panelt, és 2 PWM kimenetre lenne szükségem , nyelvi nehézségeim akadtak , így nem értem pontosan melyik lábon fog kijönni a PWM jel.....
Sajna nálam valahogy nincs, de ha volna sem vinne előrébb.
Ezek szerint az is csak a CDC-hez jó. Nekem mindenképpen HID kéne, hogy ne kelljen drivereket telepítgetni. ezt találtam, igen ígéretes, de sajnos a PC-s programját földön égen nem találom.
Hali
Ez vegulis COM portos felulet. En RS232-on hasznalom. Van hozza a CCS peldak kozott soros bootloader. Nem USB. Udv Vili
Azt találtam töménytelen mennyiségben, de egy 18F2550-esbe kéne ami USB-t használ, és a kis lábszám miatt nem tudok már soros portot is kivezetni, és mint említettem szigorúan ragaszkodnék a HID-hez...
Az elképzelésem az hogy ha indításkor az USB csatlakoztatva van, 3-5 mp-ig vár a feltöltésre, ha nem indul el indítja a programot, mivel már egy nyomógombot sem tudok beépíteni. Sajnos egy már elkészült darabot kéne USB-n frissíthetővé tenni, hogy ne kelljen utazgatni, szétszedni stb. Így elmegy emilben a hex, és a felhasználó be tudja tölteni. Idézet: Ehhez miért nem jó neked a PIC18F4550 gyári HID bootloadere? „egy 18F2550-esbe kéne ami USB-t használ”
Mert mint említettem (#665994) le sem tudom fordítani - ezzel még lehet hogy valahogy megküzdenék -, és mindenképpen át kell hogy írjam, és nekem a CCS jobban fekszik. A másik oka, hogy jó lenne megérteni hogy hogyan tölti fel, mert a saját programomba akarom beépíteni a bootloader kezelést is, azaz nem a microchip feltöltő programját akarom használni. A sokadik ok hogy a gyári mindenféle ledeket kapcsolgat meg gombokat kell nyomkorászni amit már szintén említettem hogy nekem nincs.
Azaz gyártanom kéne egy bootloadert - életem elsőjét -, ami tudom hogy mit csinál és miért. Nem vonom kétségbe hogy a gyári működik, de eddig minden fórumon azt olvastam hogy a legkisebb belenyúlástól is fejreáll, nekem pedig a C18 még kicsit nagyon idegen. Anno az egyszerűsége és átláthatóbbsága miatt választottam a CCS-t. Az a kismillió file amit az mplab használ nekem még nem igazán átlátható. Amit a #666119-an belinkeltem az egész kulturáltan van megcsinálva, épp a hex feldolgozását igyekszem megfejteni. Ha sikerül összeütök hozzá egy dll-t, bár gyanúm szerint ez már nem ma lesz. Azaz a problémát nem megkerülni, hanem megoldani szeretném. Hát ezért. Mindemellett továbbra is érdekelne a régi kérdésem, hogy mitől van az hogy egyes gépek gond nélkül felismerik az USB HID eszközöket, némelyik csak néha, és van amelyik egyáltalán nem hajlandó? Ugyan az az áramkör két példánya, ugyan azzal a programmal ugyan azokkal a gépekkel sem egyformán viselkedik. Idézet: Akkor megnézheted a PICkit2 kezelőprogramját, mer az pont ezt csinálja firmware letöltés címén. De a Microchip HID letöltőjének a forrása is rendelkezésre áll.„A másik oka, hogy jó lenne megérteni hogy hogyan tölti fel, mert a saját programomba akarom beépíteni a bootloader kezelést is, azaz nem a microchip feltöltő programját akarom használni.” De megnézhetes a DIOLAN nyílt forrású bootloaderét is... (gondolom, megoldható a PIC18F4455-ről való átírás. Idézet: Ezeket pillanatok alatt ki lehet szedni belőle. A ledvillogtatás eleve feltételes fordítással van beleírva, a nyomógomb figyelés meg néhány utasítás az elején.„A sokadik ok hogy a gyári mindenféle ledeket kapcsolgat meg gombokat kell nyomkorászni” Idézet: Időmilliomos vagy? „Azaz gyártanom kéne egy bootloadert - életem elsőjét -, ami tudom hogy mit csinál és miért.” Idézet: Számíthat akár az adatvezetékek soros ellenállása is, vagy az órajel frekvenciája (FSUSB 0.25 % tűrésű)„mitől van az hogy egyes gépek gond nélkül felismerik az USB HID eszközöket, némelyik csak néha” Bootloadernél/firmware-nél pedig az a tapasztalatom, hogy ha nincs bekapcsolva a BORV, akkor a program véletlenszerűen kinyírhatja magát (újra be kell égetni). Ez az önprogramozási képesség miatt lehet, s amikor éppen eltűnőben van a tápfesz, elszabadulhat aprogram... A Brown-out detektálás ebben annyit segít, hogy bizonyos szint alatt RESET-ben tartja a CPU-t.
Ha jól látom, a 46J50 esetében a PWM kimenetek (és még néhány más periféria) bármelyik RPx kivezetéshez (van belőlük 22 db) hozzárendelhetők programozottan.
Köszi, megnézem amiket ajánlottál, lehet tanulságos.
Igazán most a hex feldolgozásra vagyok kíváncsi, és a PIC-PC közti protokollra. Nem, nem vagyok időmilliomos, pont ezért keresek egy jó, átlátható, csak a feltétlen szükséges dolgokat végző kiindulási alapot, amit belátható időn belül át tudok szabni a saját igényeimnek megfelelően. Az USB problémára visszatérve, az adatvezeték ugyan az minden esetben, a kristályokat cserélgettem, a 470n-os kritikusnak kikiáltott kondi sem kritikus, 220n-egészen a 2u elkoig mindennel megy, és ugyan azt produkálja. |
Bejelentkezés
Hirdetés |