Fórum témák
» Több friss téma |
Hali!
Egy kis segítséget kérnék! C ben szeretnék PIC-et programozni! Eddig Basic - ben progiztam, de az ne igazán vált be, kivéve a 18 - as sorozatot(ahoz találtam használható szoftvert)! Az lenne a kérdésem ki milyen C fordítót használ, és mik a tapasztalatok? A segítségeteket előre is köszi! ui: és hol lehet hozzájutni?
Mplab C 18-at használok és nagyon király, én neten gubiztam egy xarwaret aztán gubiztam tovább... és tudod, hogy van ez.
Küldtem 10Mb-ás emailt... remélem kitalálod
Nagyon szépen köszönöm a segítséged, és az e-mailt!! Azt hiszem ez jó lesz nekem is!! (sőt biztos)
persze, hogy, bár nem a legújabb de legalább nem az agyon herélt student... ha meg bárki kérdi nekünk úgysincs számítógépünk
elfeledtem mondani, de alighanem rájöttél ez csak a 18Xxxxxx szóval csak a 18-as picekhez van... van C30 is de azt nem is tom mire jó... én most nagyon bódog vagyok ezzel, azóta nem is írok csak C-ben
Köszi! Igen feltünt, hogy csak 18 - as sorhoz való!! Tényleg 16 - os pic hez nem tudsz valami jó compilert, mertz még van itthon egy pár darabom, és fel kéne őket használni v.mire! De ahoz fel kell progizni Most teszteletem a c18 - at! Ez tényleg király
Én eddig a Pic Basic Compilert használtam. Ezzel csak az a bajom, hogy csak subrutinokat lehet csinálni, eljárásokat, és függvényeket nem!!!:no:
Hello!
Meg tudnátok mondani, hogy honnan tudom letölteni a C18-at? Mert ami a microchip oldalán van, az csak frissítés, mert magában azt nem lehetett telepíteni.
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nod...006011
A Student verzió ! Az upgrade-t nehogy rátelepítsd.
köszi, de eddig én is eljutottam, de itt csak upgrad van, és ezt nem engedi telepíteni...
Ok, de a Student verzió az ingyenes. Ott van az Upgrade alatt.
Bár lehet hogy csak én látom, mert regisztráltam magam.
sziasztok
C-be szeretnék PICet programozni ezért föltelepítettem a C-18 compilert, viszont mikor megnyitom az MPLAB-ot és kijelölném a megfelelő fordítót (C-18-at, nincs piros X, tehát, tudja, hogy létezik) ezt a hibaüzenetet produkálja, holott az elérési út is stimmel. Mi lehet a gond?
Hát a hibaüzenet elég egyértelműen leírja, hogy mi a gondja. Nem csak egy fájlból áll egy fordító, hanem kell a compiler, linker, libraryan, assembler. Aminél nincs piros X, azt a fájlt ismeri, de ahol van piros X, azokhoz be kellene állítani az elérési útvonalat. Azt tudom elképzelni, hogy a C18 telepítésekor nem pipáltad be a pipadobozokat, és azért nincsenek az elérési tutak beállítva.
szia
Újra telepítettem, bejelöltem az összes jelölőnégyzetet ahogy mondtad, és így már működik, köszi üdv
Hello,
egy progit akarok compilalni C18 compilatorral, pic18F452 eszkozre. A problemam abbol adodik, hogy a kovetkezo hiba uzenetet kapom: Executing: "D:\Program Files\Microchip\MCC18\bin\mplink.exe" /l"D:\Program Files\Microchip\MCC18\lib" "18f452.lkr" "main2.o" "serial\serial.o" "ParTest\ParTest.o" "..\..\Source\tasks.o" "..\..\Source\queue.o" "..\..\Source\list.o" "..\..\Source\portable\MemMang\heap_1.o" "..\Common\Minimal\flash.o" "..\..\Source\portable\MPLAB\PIC18F\port.o" /u_CRUNTIME /z__MPLAB_BUILD=1 /m"rtosdemo2.map" /aINHX8M /o"rtosdemo2.cof" MPLINK 4.22, Linker Copyright (c) 2008 Microchip Technology Inc. Error - section '.udata_heap_1.o' can not fit the section. Section '.udata_heap_1.o' length=0x00000400 Errors : 1 Link step failed. Ebben az esetben a 18F452.lkr a kovetkezokeppen nez ki: LIBPATH . FILES c018i.o FILES clib.lib FILES p18f452.lib CODEPAGE NAME=page START=0x0 END=0x7FFF CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED ACCESSBANK NAME=accessram START=0x0 END=0x7F DATABANK NAME=gpr0 START=0x80 END=0xFF DATABANK NAME=gpr1 START=0x100 END=0x1FF DATABANK NAME=gpr2 START=0x200 END=0x2FF DATABANK NAME=gpr3 START=0x300 END=0x3FF DATABANK NAME=gpr4 START=0x400 END=0x4FF DATABANK NAME=gpr5 START=0x500 END=0x5FF ACCESSBANK NAME=accesssfr START=0xF80 END=0xFFF PROTECTED SECTION NAME=CONFIG ROM=config STACK SIZE=0x100 RAM=gpr5 Arra rajottem, hogy ha modositom ezt a .lkr filet akkor a programom szepen compilalodik: // $Id: 18f452.lkr,v 1.4 2003/03/13 05:02:23 sealep Exp $ // File: 18f452.lkr // Sample linker script for the PIC18F452 processor LIBPATH . FILES c018i.o FILES clib.lib FILES p18f452.lib CODEPAGE NAME=vectors START=0x0 END=0x39 PROTECTED CODEPAGE NAME=page START=0x3A END=0x7FFF CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED ACCESSBANK NAME=accessram START=0x0 END=0x7F DATABANK NAME=BIG_BLOCK START=0x80 END=0x5FF ACCESSBANK NAME=accesssfr START=0xF80 END=0xFFF PROTECTED SECTION NAME=CONFIG ROM=config STACK SIZE=0x60 RAM=BIG_BLOCK A kerdesem az lenne, hogy ezzel a modositassal valojaban en mit csinaltam, hogy lefordult a program? A mikrokontroller minden DATABANK-ot el fog erni, tovabbra is vagy csak az elso 0xFF-et? koszi elore is a valaszokat
Szerintem nem a linker állományt kellene elbabrálni, hanem vagy a forráskódot, vagy a fordítási beállításokat rendberakni. A RAM ugyanis csak lapozással kezelhető. Ha becsapod a linkert, akkor lehet, hogy lefordul a program, de mit fog csinálni?
Az .udata_heap_1.o' length=0x00000400 mérete nagyon soknak tűnik... Nagyméretű tömböket definiáltál, vagy mitől lett ez ekkora?
Ezzel a szoftver stack-edet szepen racsaptad a heap teruletere -- nem hinnem, hogy ez jo otlet! (bar lehet ettol meg a linker eleg okos es azt a hex 60-as meretet figyelembe veszi -- en biztos ami zicher meghagynam kuon teruletnek)
Amugy igazandibol ugy szoktak csinalni, hogyha van nagyobb tombod, akkor annak kulon teruletet jelolnek ki PROTECTED-el es szekcio deklaracioval, es mikor a tombod definialod akkor #pragra-val megadod neki, hogy azt a tombot szepen arra a szekciora helyezze. A tobbi valtozo es heap marad valtozatlan -- de ha mar heap szoba kerult, lehetoseg szerint kerulni kell a dinamikus memoria foglalast microcontrolleres kornyezetben. Ugy kell megtervezni az algoritmusokat, hogy azok statikus ill overlayed teruletekre keruljenek.
Valojaban amit en compilalni akarok az egy Demo, amit a netrol toltottem pontosabban a www.freertos.org cimrol.
Ez egy valos ideju operacios rendszer, amelynek van nehany taskja, az en esetemben ledeket pillogtatok kulonbozo frekvenciakon, mas mas task felugyelve rajuk. A Demo compilalhato, a pic18f452.lkr fileban pedig a DATABANKok egy BiG_Block nak vannak deklaralva, mint ahogy az elobb mutattam. Sosem lattam ilyet, ezert kicsereltem ezt a C18 kompilator pic18f452.lkr re es azzal probaltam kompilalni, de sajna akkor mar a fennti hibauzenete adta. Jelenleg nincs fejlesztolapom, amin ki tudnam probalni, ezert kerdeztem, hogy mi a kulonbseg, s vajon menne elesbe?
"A Demo compilalhato, a pic18f452.lkr fileban pedig a DATABANKok egy BiG_Block nak vannak deklaralva"
Én sem láttam még ilyet. Elvileg szimulátorban is futtathatod a lefordított programot. Ha DEBUG beállításban futtatod, még az RTOS Viever is használható hozzá. (Az MPLAB IDE Tools menüjében).
Vegul is ezt hasznalom es mukodik, a memoria foglalast ugy oldottam meg, ahogy Trudnai javasoltta, kijeloltem egy teruletet es a tomb definialasanal pragmat hasznaltam. Koszi mindenkinek!
// File: 18f4620.lkr // Sample linker script for the PIC18F4620 processor LIBPATH . FILES c018i.o FILES clib.lib FILES p18f4620.lib CODEPAGE NAME=page START=0x0 END=0xFFFF CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED CODEPAGE NAME=eedata START=0xF00000 END=0xF003FF PROTECTED ACCESSBANK NAME=accessram START=0x0 END=0x7F DATABANK NAME=gpr0 START=0x80 END=0xFF DATABANK NAME=heapregion START=0x100 END=0x5FF PROTECTED DATABANK NAME=gpr6 START=0x600 END=0x6FF DATABANK NAME=gpr7 START=0x700 END=0x7FF DATABANK NAME=gpr8 START=0x800 END=0x8FF DATABANK NAME=gpr9 START=0x900 END=0x9FF DATABANK NAME=gpr10 START=0xA00 END=0xAFF DATABANK NAME=gpr11 START=0xB00 END=0xBFF DATABANK NAME=gpr12 START=0xC00 END=0xCFF DATABANK NAME=gpr13 START=0xD00 END=0xDFF DATABANK NAME=gpr14 START=0xE00 END=0xEFF DATABANK NAME=gpr15 START=0xF00 END=0xF7F ACCESSBANK NAME=accesssfr START=0xF80 END=0xFFF PROTECTED SECTION NAME=CONFIG ROM=config SECTION NAME=heap_section RAM=heapregion STACK SIZE=0x60 RAM=gpr13
PIC18-ra egyébként létezik a Micrium OS/II-nek is egy implementációja , továbbá van egy PICOS18 is. Szerintem ezekre is érdemes egy pillantást vetni.
Kooperatív multitaszkos rendszerből meg annyi van, mint csillag az égen...
En idaig csak a FreeRTos-t tanulmanyoztam, s probaltam ki Atmel uCre, s gondoltam keszitek egy alkalmazast PIC18 ra is. De most ahogy irtad, lehet PICOS18 at fogok hasznalni, jobban dokumentalt es ez csak PICekre van. Hasznaltad icserny te a PICOS18at?
Idézet: „Hasznaltad icserny te a PICOS18at?” Nem én, s egyelőre még próbafordítást sem csináltam belőle, pedig kíváncsi lennék, hogy mennyit eszik meg a memóriából. A FreeRTOS-nál viszont elborzasztott, hogy az első demó megette a ROM nagyobbik felét, a RAM-nak meg a 80 %-át (PIC18F452-ra csináltam tegnap egy próbafordítást).
Sziasztok!
CCS C Compiler 5.037-es verziójában programozok jelenleg. Kezdő vagyok a PIC programozás területén, ezért kérdeznék tőletek. Egy programomban szeretném a PIC egyik portját bemenetnek definiálni. Vegyünk egy példát, legyen ez a bemenet az A2-es láb, amire SW1 néven szeretnék hivatkozni. Ezt ugye a TRIS regiszterrel kéne megoldani. Beírom még a program elejére, hogy "#define SW1 TRISA2=1". A Compile gomb megnyomása után olyan hibával jön elő, hogy a "TRISA2" egy nem meghatározott változó (undefined identifier). Miért nem fogadja el a TRIS regisztert? A súgóban ír is valamit, hogy probléma van vele, de nagyon hiányos az angol tudásom, és fogalmam sincs, hogy hogy kéne megválasztanom bemenetnek az "SW1" hivatkozást. Ez csak egy példa, egy jóval bonyolultabb programról van szó, ami kész is lenne, ha tudnám definiálni ezeket a hivatkozásokat, több is van belőle. Nagyon fontos lenne! Köszönöm előre is!
Nézd meg, hogy a header file-ban megvan-e a TRIS regiszter.
Definiáltad az SW1 -et és értéknek egy olyan változó értékét akarod neki adni, ami még előzőleg nem lett definiálva. Hivatkozol TRISA2 -re, de az még nincs létrehozva.
A CCS kézikönyvében az van, hogy a regisztereket getter/setter függvényekkel lehet lekérdezni és írni.
A hozzászólás módosítva: Feb 5, 2015
Bocsánat, megnéztem jobban a példakódot, a regisztereket a setter függvénnyel konfigurálod, hogy ki, vagy bemenetként funkcionáljanak és a konfigurációt a getter függvénnyel tudod lekérdezni.
A kézikönyvből kiollózott mintakód 7. sorában a set_tris_b() függvény állítja be a B0....B3 regisztereket inputra, a B4...B7 regisztereket pedig outputra, a Tris_value változó értékének megfelelően. A kód 8. sorában kiküld egy H szintet a B7 outra a program, a 9. sorban pedig az input(PIN_B0) függvénnyel lekérdezi a B0 bemeneten lévő értéket. A hozzászólás módosítva: Feb 5, 2015
Lehet elore definialni neveket a regisztereknek, es utana ezen a neven hivatkozni ra.
Utana igy hivatkozhats ra:
|
Bejelentkezés
Hirdetés |