Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Köszönöm szépen a segítséget jó lett!
Kipróbáltam a másik formát de az nem működött gondolom nem mindegy milyen verziójú a fordító. A hozzászólás módosítva: Jan 6, 2015
Üdv Mindenkinek!
CCS 5.025 fordítva a következő programot minidig warningot kapok. A soros portról vár értéket ami pl **100+CR+LF. Ha néhányszor leküldöm egymás után akkor a program kiakad és újraindul, de nem találom, hogy miért! Valaki rá tudna nézni? Előre is köszi a segítséget! PIC18F26K80 INTRC, NOWDT
>>> Warning 216 "main.c" Line 273(1,2): Interrupts disabled during call to prevent re-entrancy: (@ITOF) >>> Warning 216 "main.c" Line 273(1,2): Interrupts disabled during call to prevent re-entrancy: (@DIVFF) >>> Warning 216 "main.c" Line 273(1,2): Interrupts disabled during call to prevent re-entrancy: (@FLT) >>> Warning 216 "main.c" Line 273(1,2): Interrupts disabled during call to prevent re-entrancy: (@MULFF) >>> Warning 216 "main.c" Line 273(1,2): Interrupts disabled during call to prevent re-entrancy: (@ADDFF)
Ha jól sejtem, akkor a getc() az ott vár, amíg nem jön valami karakter. Na az ilyeneket felejtsd el megszakítási rutinból használni. Ugyanígy az atof és társait is mellőzni kellene amennyire csak lehet egy hardveres lebegőpontos modullal nem rendelkező kontroller esetén. Megszakítási rutinba ilyet beletenni kb. az öngyilkossággal egyenlő. A megszakítási rutinod csak annyiból álljon, hogy beteszi egy pufferbe a vett karaktereket, majd amikor megjött az utolsó is (LF), akkor bebillent egy jelzőbitet, aminek hatására a főprogram feldolgozza a beérkezett adatot és törli a jelzőbitet.
tudtam hogy minden kezdet nehéz ... na de hogy ennyire ...
Az alábbi kis "programot" próbálom lefordítani, CCS C compilerrel, és azt mondja undefined identifier porta (próbáltam PORTA, eredmény ugyanaz). # include <16F887.h> main ( ) { porta = 0xFF; } Mi a fenét szúrtam el?
PORTA = 0xFF;
ugyan az ... már próbáltam!
Attól, hogy hangosan mondod (nagybetűvel írod) a PORTA azonosítót, attól még nem fogja tudni, hogy mit is akarsz tőle.
Próbáld meg azt, hogy main előtt megmondod neki: #byte PORTA = 0x05 // ha jól tudom, akkor a 16F877-nél ezen a címen van
A # és az include között van betüköz? Nem kell oda.
@sysy: Pont azért hivatkozna a processzor definícióira, hogy ne neki kelljen az összeset megadnia... A hozzászólás módosítva: Jan 20, 2015
Konya PIC köny alapján próbálkoztam ...
Ott az van leírva hogy a C nyelv megkülönbözteti a kis és a nagy betűket. Ott nincs külön definiálva a PORTA... Közben megnéztem az MPLAB CX8 fordítója simán elfogadja, anélkül hogy előre definiálnám... Jól gondolom hogy ez akkor azon múlik hogy az include után megadott fájlban ezt definiálták-e vagy sem?
Idézet: „Jól gondolom hogy ez akkor azon múlik hogy az include után megadott fájlban ezt definiálták-e vagy sem?” Valóban arról van szó, hogy a felhasználás előtt már definiált-e a szimbólum. Jelen esetben a porta vagy a PORTA. (Ez nem kiabálás, hanem a C kisbetű - nagybetű érzékeny.) A kontroller már elég régi, így kizártnak tartom, hogy a CCS -sel szállított 16F887.h -ban ne lenne a PORTA megadva. Inkább arra gondolok, hogy az incude directory nincs jól beállítva, az elérési út nem felel meg a programnak (ékezetes betűk vannak benne vagy túl hosszú), az állomány nem olvasható (jogosultság), stb. Ezek miatt a fordító nem találja meg. Nincs az undifined symbol előtt más hibajelzés. Jobb lenne, ha a fordító üzeneteit bemásolnád ide.
Szia,
A helyes megoldás a következő: #include <16f887.h> void main () { output_a (0xFF); foir (; ; ); } Ezzel a kóddal menni fog, mivel itt a kimenetre máshogy kell hivatkozni, mint az XC8-ban. A hozzászólás módosítva: Jan 20, 2015
ez az üzenet van csak:
*** Error 12 "main.c" line 18(10,15): Undefined identifier PORTA Kicsit próbáltam belenézni a 16F887.h fájba, olyant hogy PORTA semmilyen formában nem találtam benne. ( néztem a CX8-at is ott sikerült megtalálnom ... sőt két fájl is van, pic16f887.h és a pic16f887.inc amiben benne van ... ) A CCS alapértelmezett könyvtárba lett telepítve nem hiszem hogy az elérési úttal igy gondja lehetne. Ráadásul 2 különböző verziót is kipróbáltam (4.104 és a 5.011) mindkettőnél ugyan az a helyzet. Megoldás lehet Gyimate megoldása, de Én azt honnan tudhatnám hogy az adott compilernél mi a helyes megoldás? Igazából ott tartok, hogy szeretnék kiválasztani egy fordítót amin elkezdek programozgatni, közben meg talán sikerül megismernem kellőképpen, abban bíztam hogy a C fordítók között ( forrás oldalon) nincs lényegi különbség, a forrás fájl ugyan úgy kell hogy kinézzen... de ezek után kezdek elbizonytalanodni. Az microchip oldalról letölthető fordítók valamit reklamálnak hogy a free verzió valamit "irgum burgum" ... mennyire használhatók ezek?
Itt a manualban minden megtalálsz!
Gyimate -nek van igaza, output_a() fog működni.
.. és sysy-nek is igaza van.
Ha úgy akarsz a regiszterekre vagy az egyes bitekre hivatkozni, ahogy a gyári vagy (régebbi) Hi-tech fordítokban, azt neked kell előtte a fordítónak megmondani. Lehetséges saját include fájlt is kreálni. Bővebben: egy régebbi hozzászólás sysy-től. Érdemes az eredmény ellenőrizni: egy régebbi hozzászólás tőlem.
Na en igy szoktam inditani:
Idézet: A compilerhez kapott dokumentáció (Help, Referencia kézikönyv) és mintaprogramok tanulmányozásából. „honnan tudhatnám hogy az adott compilernél mi a helyes megoldás?” Némelyik fordítóhoz szakkönyvek is jelentek meg, de ezek ritkán frissülnek, így lehet, hogy mire megjelenik, már nem mindenben aktuális... Bővebben: Link
Köszönöm az eddigi válaszokat...
Sajnos az angollal elég hadilábon állok, de majd lesz valami! Annyi már világosnak tűnik, hogy ki kéne választani egy compilert és abba beleásni magam ... de melyik legyen az? ( vagy melyik ne?) Tudnátok ebben tanácsot adni? 16F... 18F... PIC-ekben gondolkodom egyelőre, egy LPT portos égetővel. A hozzászólás módosítva: Jan 21, 2015
En a CCS C-re szavazok.
Kb. mire szeretnéd használni?
Sok portja legyen? Nagy eeprom memória legyen benne. Sok perifériát találjál benne? 2 soros portja legyen? A/D átalkító 12bites legyen? 4 PWM portja legyen? stb...
Ha ingyenes megoldás kell, akkor csak az XC8 jön számításba.
5.011-es CCS Compilerben nem tudom beírni a #-et. Az Alt-Gr + x gombra a "Identifier Explorer" ablak nyílik meg. Le lehet ezt tiltani valahogy?
Egyelőre szeretném jobban beleásni magam a témába ... Régebben foglalkoztam PLC programozással, és úgy látom hogy sok akkori feladat megoldható PIC-el, jóval olcsóbban... Sőőőt ezek a cuccok még többet is tudnak ...
A PIC kiválasztás szerintem menni fog a katalógusból.
Options->Editor properties, és azon belül ha jól emlékszem a View lenyíló listában van az Identifier Explorer. Onnan kell kitörölni a hozzárendelést, de csak újraindításig marad úgy, utána megint be kell állítani!
Az tény és való, hogy otthoni körülmények között egy PIC vagy AVR olcsóbb, de ezeket nem használhatod ipari körülmények között, a PLC fel van készítve az ipari környezetben való használatra, amibe nem mennék itt bele, mert már így is off.
Nem teljesen ott de megtaláltam ...
Az 5.011-es menüje kicsit más ... Options / IDE ... Keyboard fül ... Action ablak / View - ID explorer ... Meg még utána mire rájöttem hogy hogy lehet átírni az aktuális beállítást ... De legalább nem felejti el újraindításkor. Ja így jár aki nem tudja hogy az Alt-Gr = Alt + Ctrl
Ha még kérdezhetek ...
Poject létrehozásakor van a PIC vizard (5.011-es verzió) ... ez nekem szépen automatikusan beilleszti a forrás fájlba a szükséges dolgokat (megszakítások, config bitek, stb ... ), ezt a varázslót kesőbb még elő lehet szedni valahonnan, ha módisítani szeretnék valalmit?
Úgy tudom, hogy nem lehet már módosítani utána! Vagy a kézikönyvből nézed ki, hogy mit kell alkalmazni vagy megnyitod a wizardot, majd kimásolod a neked kellő változásokat.
Ennek a verziónak elég idegesítő a hibája, hogy letiltja a megszakításokat printf hívásakor és nem engedélyezi újra! Plusz volt még egy bug, de arra már nem emlékeszem. |
Bejelentkezés
Hirdetés |