Fórum témák
» Több friss téma |
Átállítottam, hogy minden indításnál rendszergazdaként induljon és így már nincs hiba, be lehet zárni a programot.
Köszönöm a segítséget.
Sziasztok!
Nem rég említettem, hogy kellene nekem excel fájlos pinout. "Elkészült" az exportáló program. Csinál 2003/2007-es excel-t. Esetleg érdekel valakit? Ha igen még nem küldöm mert még sufnisan néz ki (kép)
A hibaüzenetek konkrétan:
- ; expected, but 'TRISRA0_Bit' found - ; expected, but 'at' found - Specifier needed - Invaild declarator expected'(' or identifer Ezeket mind a négy sornak megfelelően kiírta, pedig a hibás sorok alatt még kettő sor van ugyanilyen felépítéssel, de arra már nincs ERROR!
Találtan manualját, eszerint:
ezt írtad:"sbit LCD_D4_Direction at TRISRB4_Bit;" helyettte:sbit LCD_RS_Direction at TRISB4_bit; tehát R betű kimarad a direction sorokban.
Tehát az "R" betű nem kell...? Én viszont ezt találtam a súgóban: [mellékelt kép]
Nem olvasható a képed. Esetleg LCD-nél egy porton kell lenni mindennek, tehát pld.: PORTB van az EN, RS, D4-D7. Nem tudom, próba megmondja.
Töröltem az "R" betűket, így már jó, viszont továbbmenve máshol is van ERROR:
- Undeclared indetifier 'C2ON_Bit' in expression - Undeclared indetifier 'ANSELH' in expression
- '}' expected '}' found
- '}' expected '}' found
Eddig ennyit írt ki, bár lehet, hogy ezek kijavítása után talál még... A hozzászólás módosítva: Ápr 14, 2017
Ha új lapon nyitod, akkor nagyítható, de a képen is az van amit írtál.
Nem ismeri a "C1ON_bit" kifejezést, próbáld a PIC leírásból a komparátor konfig regiszterbe írni, CMCON = 0, ANSEL = 0, kész.
Valóban, elfelejtettem, hogy nem ugyanaz a képre, vagy alá a névre kattintani. Most már nagy a kép.
Jó, cseréltem, viszont a video leírásából inkább letöltöttem a kódot, amit átszabtam az én PICemhez, de a portoknál valami még mindig nem jó:
- Assigning to non-lvalue 'TRISA0' - Assigning to non-lvalue 'TRISA1' - Assigning to non-lvalue 'TRISA2' - Undeclared indentifier 'PORTA2' in expression - Assigning to non-lvalue 'TRISA3' - Undeclared indentifier 'PORTA3' in expression - Assigning to non-lvalue 'TRISA4' - Assigning to non-lvalue 'TRISA5' - Assigning to non-lvalue 'TRISA6' - Assigning to non-lvalue 'TRISB0' - Assigning to non-lvalue 'TRISB1' - Assigning to non-lvalue 'TRISB2' - Assigning to non-lvalue 'TRISB3' - Assigning to non-lvalue 'TRISB4' - Assigning to non-lvalue 'TRISB5' - Assigning to non-lvalue 'TRISB6' - Assigning to non-lvalue 'TRISB7' Plusz mindegyik mellé egy ilyen: - Undeclared indentifier 'PORTE' in expression Más baja ezzel most már nincsen, csak még ezek nem jók neki! ![]()
Biztos, hogy C-ben a TRIS regisztereket csak ilyen kisregény stílusban lehet beállítani?
Én azt hittem, azért magasabb szintű programnyelv, hogy kevesebbet kelljen írni mint assemblyben.
Írd be így.
A hozzászólás módosítva: Ápr 14, 2017
Idézet: „Plusz mindegyik mellé egy ilyen: - Undeclared indentifier 'PORTE' in expression” Mert pl. a picedben nincs E-port.... Szóval még szabogasd azt a kódot...
Be van állítva a PIC típusa 16F88? Mert PORTE portnak nem szabadna megjelenni, vagy esetleg a programban van valahol PORTE?
C programozási tippek minden érintettnek.
Értelmezni a C fordító hibaüzeneteit, megtanulni és gyakorolni szintaktikát, azt nem jó ötlet pic környezetben elkezdeni, mert a pic fordítók rigolyásabb fajták. Sokkal könnyebb boldogulni kezdetben asztali gépes környezetben. Általában ha valaki elkezdi a C-t, nem csak a szintaktikákat és a hibaüzenetek értelmezését kell gyakorolnia a programozási logikai gondolkodás elsajátítása mellett, de főleg az átlátható szövegszerkesztést is gyakorolnia kell. Például hogy legalább annyi esze legyen, mint egy egészen szőke titkárnőnek. Fájdalmas tény, hogy némelyik programozónak még annyi sincs, és az nagyon tisztán látszik egyetlen mintányi kódrészletéről. A smile-t azért nem tettem ide, mert szerintem nem vicces az a tény egy kicsit sem. Amit tenni kellene: 1. Telepíteni asztali pc-re erről a lapról a 9.0 MB méretű csomagot. 2. Lépésről lépésre elolvasni, megérteni, kipróbálni a leckéket és példákat itt. 3. Gyakorolni, gyakorolni, és gyakorolni nagyobb programokat írni, félretenni őket pár hónapra, és utána előszedni újra. Kell a tapasztalat, milyen érzés nagy halom mákos tésztával szembesülni utólag, amiért nincs kit hibáztatni, mert mi magunk csináltuk, és mi magunk hagytuk ott olyan állapotban. Az a legjobb - és talán egyetlen - módja kigyógyulni a programozói szőkeségből, ami eltart minimum 1-2 évig.
Ez elég lesz? Mert csak RA2 és RA3 lábaknak kellene bemenetnek lennie a billentyűzet miatt. Vagy hogy van ez?
Idézet: A port bemenet és B port kimenet? „Trisa = % 01111100 Trisb = % 00001111 Porta = 0 Portb = 0”
A típust beállítottam... - Most nézem, hogy én nem is írtam E portot!
![]()
Trisa = %01111100 ez egyben a 8db. A port egymás után írva. Jobbról első a Trisa0, második a Trisa1, így tovább. Ahol 1-es az bemenet, ahol 0 az kimenet. Trisa2 és Trisa3 1-es, így lesznek bemenetek, ahol 0 van azok kimenetek. Ugyanez van TrisB-nél is.
Fordítsd le újra a megfelelő típussal. Mi volt az előző típus? Biztosan maradt a programban valami E portos rész.
Ha a linkelt video alatti link programját gyúrod (19_ora.c), akkor abban pl van ilyen:
void main() { TRISA = 0; PORTA = 0; TRISB = 255; TRISC = 255; TRISD = 0; PORTD = 0; -> TRISE = 0; -> PORTE = 0; Kiemelés tőlem. De lehet még máshol is hivatkozás rá, nem csak itt. Mondjuk a TRISC meg a TRISD is fölösleges... Még egy megjegyzés: a példaprogram nagyon vacakul van tagolva, javaslom, hogy minden kapcsos zárójelet két szóközzel beljebb tegyél, ha továbbiak vannak egymásban, akkor még beljebb következzen, persze a lezárás után következő sorok meg ugyanennyivel kijjebb. Így az összetartozó zárójelek (és utasítássorok) függőlegesen oszlopba rendeződnek, könnyebb lekövetni, melyek tartoznak össze. Ahogy a hibaüzeneteidet néztem, a nagy gyomlálás közepette nem figyeltél a zárójelekre, pontosvesszőkre. Így szegény fordító teljesen belezavarodott végül - ahogy ezt neked meg is jósolták. A tagolásra a példa, hogy is nézzen ki (a 19_ora.c állományt másoltam ide):
(Természetesen nem minden kapcsos zárójel páros a fenti példában, de nem akarom az egészet itt szerkesztgetni...) Azaz, ahogy lépkedsz be a zárójelekbe, egyre beljebb kezded, majd ahogy lépkedsz ki, egyre kijjebb. Így átláthatóbb marad a program és le tudod követni akár görgetéssel is, hogy minden kapcsos zárójelnek van-e párja és ott van-e ahol kell lennie. Ha eltévedsz a zárójelezéssel, akkor sose fogod befejezni a hibakeresést, illetve még ha lefordul is a program valami csoda folytán, egyáltalán nem lehetsz biztos benne, hogy jól is fog működni. mert darabra lehet, hogy meglesznek a zárójelek, de biztos, hogy a megfelelő utasításokat tartalmazzák? A hozzászólás módosítva: Ápr 15, 2017
Átírtam, de még mindig nem jó, és máshol is vannak sajnos hibák:
- ; expected, but 'Trisb' found
- ; expected, but ',' found - Specifier needed - Invaild declarator expected'(' or identifier - ; expected, but ')' found - 'keydata' Indentifier redefined - Specifier needed - Invaild declarator expected'(' or identifier - '' Identifier redefined - Internal error '' Igen, ezt a sokat ugyanarra a sorra írta ki! ![]()
Figyelj oda jobban, Trisa = után mit írtam?
Változók vannak definiálva?
Idézet: „- '}' expected ';' found” Elrontottad a zárójelezést. Kezdd elölről az egészet, mert mivel nagyon-nagyon kezdő vagy, nem biztos, hogy belátható időn belül ki tudod javítani - hiszen azt se tudod, mi mire való, tehát nem is tudod felismerni, mikor mi kell. Pontosvessző: utasítás lezárás. Mindig kell. Ahogy nézem, te kihagyod. Kapcsos zárójel: ha egy utasítás (pl: if ( "feltétel" ) "utasítás, ha igaz" ; ) csak egy további utasítást tartalmazhat, tehát csak a következő sorra (vagy ha mögé írod, arra) fog csak vonatkozni (pl. itt a feltételes végrehajtás), de neked több mindent kéne odatenni, akkor kapcsos zárójelek közé kell tenni azokat, a fordító számára ez egy blokkot jelent, olyan, mintha csak egy utasítás lenne ott, de természetesen az egész blokk lefordul és működni fog. Nagyon figyelj erre! A hozzászólás módosítva: Ápr 15, 2017
Azt már megtapasztaltuk, hogy Zsombinak kissé szelektív a látása.
A hozzászólásokból csak részleteket lát meg. Ezért kell többször leírni neki ugyanazt. Légy vele türelmes!
Ez nincs önálló kapcsos zárójelben:
És ezekkel mi lehet a baja?
Ehhez pedig tényleg 10 hiba van:
És az eredeti kapcsos zárójelekhez pedig nem nyúltam, csupán egy "lcdtele" résznél felkapcsolódó LEDet (egy lábat logikai 1-re kapcsol, míg ki nem ürül az lcd) akartam kigyomlálni!
Trisa = %01111100
Áh, nem oszt, nem szoroz, ott ugyanúgy maradt az a két hiba!
És ezt nem értem:
![]()
Az, hogy az az lcdoszlop jó helyen van-e, azt így nem tudom, mert egy utasítás elhelyezése az a megvalósítandó feladattól függ, ennyire nem mentem bele. De előbb tanulj meg algoritmizálni, azaz a feladatot bontsd le lépések folyamatára (papír-ceruza, rajzolás) és aztán tedd kódba. Hidd el, jobb lesz, nem fogsz elkeveredni a programban.
Ez a hiba Trisa = % 00110000 - Invaild expression - ; expected, but 'Trisb' found Azt mondja, érvénytelen kifejezés, illetve egy pontosvesszőt vár, de azt te kihagytad. Helyesen (nagym6 se írta jól): Trisa = %01111100 ; <- a pontosvesszőre figyelj!!!!! Illetve figyelj arra, hogy a C nyelvű fordítók kisbetű-nagybetű érzékenyek (case sensitive), így nem mindegy, hogyan írod le a neveket. Trisa vagy TRISA? Nem mindegy! Az egy sorra 10 hiba: mivel sem a pontosvesszővel, sem a kapcsos zárójellel nem vagy tisztában és a fene se tudja, mint is "alkottál", így a fordító eltévedhetett. Mert a hibás központozás meg tudja zavarni. A fordító szigorúan logikus - elvégre program - így a rossz zárójelezés, pontosvessző elhagyás olyan dogokat rendelhet össze a kis agyában, amik valójában nem tartoznak össze. Miután ezt a katyvaszt fel akarja oldani, nem fog neki sikerülni, és írja a hibaüzeneteket, de már a belezavarodás miatt látszólag összevissza. A hozzászólás módosítva: Ápr 15, 2017
|
Bejelentkezés
Hirdetés |