Fórum témák
» Több friss téma |
Köszönöm 2. esetett szeretném de nem megy
void lcd (unsigned int poz, auto const rom char *szoveg[]) { char c; lcd_poz (poz); c=*szoveg[0]; c be szeretném rakni a szövegkaraktereit persze ciklussal de most míg addig nem jutottam nem használtan míg mutatókat most is csak azért mert nem tudom hogy lehetne ezt megoldani persze a normal 1. lcd_poz (poz); 2. printf az megy csak sajátot akartam meg hát ezt egyszerűbb lenne használni
Kösz még egyszer meg lett!
Esetleg hátha másnak is hasznos ide rakom!
Sziasztok!
Engem az érdekelne, Hi-Tech c fordítónál, hogy lehet megtudni a compiler verzió számát a fordítás közben, vagyis attól függően szeretnék lefordítani egyes kódrészleteket, hogy milyen a verziószám, pl. 9.83 vagy 9.70. Előre is köszönöm a válaszokat.
Nézd meg a manual pdf-t, a "Predefined Macros" részben szerepel az a szimbólum, amivel a feltételes fordítás megoldható.
Ezer köszönet mindkettőtöknek a fáradozást ...
Az alábbi C kód megfejtéséhez kérném a segítségeteket:
(már az első kérdés az miből látszik hogy az adott rövidke forrás CSS vagy pl. C18 compilerre van -e megírva?) Feltételezve a C18 at, megnéztem abban a ADC.h függvénykönyvtárát, és mivel van benne ilyen, ebből indultam ki. Ebben viszont nincs adc() függvény. Most akkor mi a helyzet? Másik dolog hogy a *(p+x) mutatót hogyan kell értelmezni a p definiálását is beleértve?
Idézet: Szerintem egyikben sem így néz ki az ADC kezelés.„CSS vagy pl. C18 compilerre van -e megírva?” De a honlapomon találsz C18-hoz ADC példát. Bővebben: Link A PIC18F14K50 olyan típus, amelyben az ANSEL/ANSELH regiszterekben csatornánként, egymástól függetlenül engedélyezhető az analóg funkció. A PIC18F4550 pedig az olyan mikrovezérlőkre jellemző típus, amelyeknél az ADCON1 regiszterben csak folytonosan, AN0-tól kezdve engedélyezhetők az analóg csatornák. Lehet választani...
A *(p+x) az szerintem ugyanaz, mint a p[x].
A p egy mutatóként van definiálva, típusa a zárójelben, értéke a 0x800. A volatile kulcsszó biztosítja, hogy az adott terület mindig a memóriából lesz kiolvasva közvetlen a felhasználás előtt. Ezt olyan változóknál szokás alkalmazni, amit több helyen is meg lehet változtatni. Például írhatja egy periféria és a felhasználó is a kódból.
A *(p+x) egyszerű mutató aritmetika, amit már potyo is leírt. Jó tudni, hogy bár az x 0 tól 127 ig fut, ez nem feltétlenül jelenti a p után következő 128 bájtot. Ha "p" short típusra mutatna akkor (p+1) két bájttal arrébb mutatna. Ha int akkor 4el, stb.
Teljesen mindegy van-e adc fuggveny vagy sem mivel a for ciklus magja egyszer sem fog lefutni: 0-val tortenik az x valtozo inicializalasa majd a feltetel szerint akkor hajtoik vegre a ciklus torzs ha x valtozo egyenlo 127-tel.
Amugy valoszinunek tartom, hogy az "ADC.h" egy sajat header allomany, annal is inkabb, mert standard headereket nem idezojelekkel, hanem kacsacsorokkel szokas megadni (bar vannak ennel nagysagrendekkel durvabb megoldasok ebben a rovidke program reszletben, ugyhogy nem csodalkoznek ennek a konvencionak a be nem tartasan sem)
Tudomásom szerint a kacsacsőr (<>) és az idézőjel ("") az include-nál az állomány keresésének módját adja meg. Ha jól emlékszem a kacsacsőr a standard elérési utakban keres, míg az idézőjel a forrás állomány aktuális mappájában. Az MPLAB például nem engedi, hogy módosítsd a saját include-jait ezért, ha erre szükségem van, másolatot készítek a projekt mappájába amit szabadon szerkeszthetek. Ezt viszont idézőjellel include olom...
Inkább csak a prioritást adják meg. Ha kacsacsőrbe teszed a saját mappádban található állományt, akkor ott is megtalálja, csak előtte megnézi, hogy van-e olyan a standard elérési utakon. Ha talál, akkor a standard útvonalon levőt használja, ha nem, akkor meg a saját mappádban levőt.
Egy praktikus szempont: Az ebbe a fórumba belinkelt programokba nem célszerű kacsacsőrt tenni, mert előfordulhat, hogy a kacsacsőrtől a sor végéig tartó szakasz "eltűnik". Biztonságosabb az idézőjel használata!
Most kipróbálom:
Szerk.: tehát ha code tagok közé tesszük, akkor jól jelenik meg. Egyébként code nélkül is jól kellene, hogy megjelenjen, itt valami el van rontva a kimeneten a html spéci karaktereknél - gondolom nem a htmlspecialchars php függvényre van bízva a dolog intézése, hanem valami saját cucc, ami rosszul kezeli. Talán az új hobbielektronikán már jó lesz, csak nem tudjuk, az mikor lesz ![]()
Helyesbites! Az 'x' valtozot a for ciklusban minden feltetel vizsgalatkor feltolti 127-tel, mivel csak egyetlen egyenloseg jel van ott (meg engem is megkavart reggel). Szoval vegrehajtodik a ciklus torzs, meghozza pontosan vegtelenszer, egyszer sem tobbszor...
Természetesen így van, az először szót is oda kellett volna biggyesztenem.
U.I: ez csak akkor igaz, ha nincs teljes elérési út megadva. Teljesen egyértelmű elérési út esetén nem keres a standard könyvtárakban.
MP-lab ban a c fordító a következőket írja:
[quote] C:\PICula\lcd\lcd8bit.c:1:Error: syntax error Halting build on first failure as requested. Kérdés honnan tudom, hogy melyik sorban van az a syntax error? Idézet: „?C:\PICula\lcd\lcd8bit.c:1:Error: syntax error” A kettőspontok közötti "1" jelenti a sorszámot. Tehát a legelső sor (nálam ott komment kezdődik) el lett babrálva.
Erre gondoltam én is, de:
- hozzá sem nyúltam a programhoz, tehát a kommentet írta hibának -miután én is erre a sorra gyanakodtam, töröltem az egész sort, csak az üres sorszám maradt - és erre is ugyanezt kaptam, (az első üres sor hibás??
[code=c]
00001 00002 00005 00006 #include "piccolo_all.h" 00007 #include 00008 #include 00009 00023 //-- A hardverfüggő részletek elkülönítése ------------------ 00024 #if defined(__18F14K50) 00025 #define BUSY_FLAG PORTCbits.R itt van a kimásolt "javított" -és hibás programrészlet- kezdve azzal az "ominózus" első sorral
Nem lehet, hogy valami "szemét", de nem látható karakter van abban a sorban?
Megvan a hiba!
Amint látszik is a másolt szöveg tartalmazza a sorszámokat is! Az a syintax error
Légy szíves a PICula honlapon a baloldali menüben a PIC18 példaprogramok menüpontra kattintani, s ha eljutottál erre az oldalra, akkor töltsd le és bonts ki a code_examples.zip állományt!
Az ebben levő példaprogramokat nézegesd és használd, ne a dokumentációból kimásolt listákat! A listából másolt programoknál nem csak a sorszámmal lesz gubanc, hanem a kommentek is hiányosak, mert van, amit a Doxygen kiemel belőle.
OK!
Köszi, most már megtanultam. Egyébként úgy is kezdtem, csak ennél a programnál bele kell nyúlnom, és nem akartam a te programodat piszkálni, ezért történt ez a másolás. Az én kártyámon az LCD vezérlő bitek máshova vannak kötve (B4-B6), ezért kell a programba belepiszkálni. Idézet: A javasolt megoldás:„bele kell nyúlnom, és nem akartam a te programodat piszkálni”
Ezután Notepad Editorral megnyitod az my_lcd8bit.mcp állományt, és a
sorban átírod a nevet my_lcd8bit.c-re Nálam ez a "szokásos eljárás".
Köszönöm a segítőkész hozzáállást, és a sok jó tanácsot.
Most éppen a picula-4520.h állományban állítottam át a kapcsolók helyét, de gyakorlatozásnak, és a program működésének megértéséhez ez csak jó. Amit írtál azt is ki fogom próbálni.
Most már egyszerűbb c programokkal elboldogulok, de valami olyan link kellene, ahol pontosan le van írva a c parancsok szintaktikája, és paraméterezhetősége.
Csak a példaprogramokból ezt megtanulni nem lehet. |
Bejelentkezés
Hirdetés |