Fórum témák
» Több friss téma |
WinAVR / GCC alapszabályok: 1. Ha ISR-ben használsz globális változót, az legyen "volatile" 2. Soha ne érjen véget a main() függvény 3. UART/USART hibák 99,9% a rossz órajel miatt van 4. Kerüld el a -O0 optimalizációs beállítást minden áron 5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás 6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et Bővebben: AVR-libc FAQ
ATMEGA8; egy ugyanilyen alapú AVR kódjában ez a függvény helyes volt, és működött Bővebben: Link
#define vagy #include sorok után szúrd be:
Egyébként mivel és milyen paraméterekkel fordítasz? A hozzászólás módosítva: Szept 24, 2013
Sajnos most is hiba van
![]() Linking: main.elf avr-gcc -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o -std=gnu99 -MMD -MP -MF .dep/main.elf.d main.o --output main.elf -Wl,-Map=main.map,--cref -lm main.o: In function `print': d:\!\avr\battery/main.c:32: undefined reference to `lcd_putc' d:\!\avr\battery/main.c:34: undefined reference to `lcd_putc' d:\!\avr\battery/main.c:36: undefined reference to `lcd_puts' d:\!\avr\battery/main.c:37: undefined reference to `lcd_putc' d:\!\avr\battery/main.c:38: undefined reference to `lcd_putc' main.o: In function `main': d:\!\avr\battery/main.c:53: undefined reference to `lcd_init' d:\!\avr\battery/main.c:54: undefined reference to `lcd_clrscr' d:\!\avr\battery/main.c:56: undefined reference to `LCDWriteIntXY' d:\!\avr\battery/main.c:57: undefined reference to `LCDWriteIntXY' d:\!\avr\battery/main.c:64: undefined reference to `LCDWriteStringXY' d:\!\avr\battery/main.c:72: undefined reference to `LCDWriteStringXY' d:\!\avr\battery/main.c:77: undefined reference to `LCDWriteStringXY' d:\!\avr\battery/main.c:89: undefined reference to `lcd_gotoxy' d:\!\avr\battery/main.c:94: undefined reference to `lcd_puts' d:\!\avr\battery/main.c:97: undefined reference to `lcd_gotoxy' d:\!\avr\battery/main.c:99: undefined reference to `lcd_puts' make.exe: *** [main.elf] Error 1 > Process Exit Code: 2 > Time Taken: 00:01
hmm...
LCD kezeléséhez a fájlok hol vannak? Pl. lcd.c és lcd.h ? Ezek nem részei az AVR gcc-nek!
Nemtudom hogy megvannak-e, nemtudom melyik mappában kellene legyen.
Amelyikbe bemásoltad. Mint mondtam az LCD kezelés nem része az avr-gcc -nek!
A kódból kiindulva LCD kezelésre ezt a libet használták: Bővebben: Link Viszont ennek nem része a LCDWriteIntXY; LCDWriteStringXY. Ezeket neked kell létrehoznod.
Tudom, letöltöttem, de nemtudtam hova másoljam, és a main.c melllé raktam ahol a project van.
Eddig oké, de a fordító nem tudja. Elárulod végre, hogy mivel fordítasz? AS4?
WINAVR: a programmers notepad verzioja: 2.0.8.718-basie
A fordításhoz hozzá kell adnod az lcd.c -t is. Attól, hogy bemásoltad még nem fogja tudni, hogy mit akarsz vele.
Viszont az említett függvényeket előbb meg kell írnod vagy #define segítségével létrehozod.
Nincs lcd.c, nemlehet letölteni valahonnan?
Ezt írtad:
Idézet: „Tudom, letöltöttem, de nemtudtam hova másoljam, és a main.c melllé raktam ahol a project van.” Most akkor mit/hova másoltál?
lcd.h fájlt, és a projectnél odaraktam a listába,
Remélem nem hallottad, hogy mekkorát sóhajtottam.
![]() Idézet: „még MCU programozásban kezdő vagyok” Az lcd.h kevés. Nyilván kell az lcd.c is hiszen a lényeg abban van. De a letölthető csomagban ott van az is. Miért csak az lcd.h -t akartad használni ![]() [off]Milyen programozásban vagy jártas?
C/C++ nativ alkalmazasok (dos alkalmazások)--- vesrenyszinten, még csak 11 dikes vagyok, a tanárnőnk nem tanít szinte semmit az iskolába.
Az adatlapodról nem derül ki számomra semmi. Főleg nem a korodat illetően.
21. században DOS alkalmazások és verseny szinten? Úgy, hogy az sem tanultad, hogy egy program nem csak egyetlen C fájlból áll? Tényleg érdekes a mai világ/oktatás. Lényeg: Szükséged van az lcd.c és lcd.h fájlra is. És ezt a fordítóval is közölnöd kell. Ezután már csak a hiányzó függvényeket kell kétrehoznod.
Még egy kis segítség a függvényekhez.
Pl. LCDWriteStringXY létrehozása:
Ezt szépen beteszed a main.c -be az #include sorok után.
Megoldottam, két féle lcd.h és lcd.c -t deklaráltam, az egyiknek átírtam a nevét llcd.h és llcd.c-re.
Százalékjelet írhatok ki, ha az ASCII kódját adom meg?
Ezt a kérdésed most nem feltétlen értem, de most látom hogy amit linkeltél abban ott van minden: Bővebben: Link
Ez alapján C/C++ háttérrel azért meg kellene tudnod oldani. A hozzászólás módosítva: Szept 24, 2013
A C99 standard ota van bool tipus. _Bool a hivatalos neve. Ha include-olod az stdbool.h-t, akkor az tobbek kozott csinal egy typedef-et bool tipusra, azaz az include utan irhatod azt is, hogy:
bool valtozo;
[off] Igen, de jelen esetben/szinten ebbe nem szerettem volna belemenni. Láthatod, hogy ennél alapabb gondok is vannak. Próbálok egyszerűen segíteni. Kár bonyolítani egyenlőre.
Nem akartam en bonyolitani (egyelore), csak gondoltam, szolok, hogy nem igaz, amit tanitasz. Mert van bool tipus. Azt latom, hogy gondok vannak, emlekszem, egy honapja meg te kerdeztel a C tipusokrol (int_8/int32_t).
[off] Nem tanítok csak kezdőként próbálok segíteni egy kezdőbbnek.
Igen egy hónapja még én is küzdöttem a típusokkal. De azon már rég túl vagyok. Még, ha hihetetlen is. Tudom, hogy van bool típus, de kezdőként én is más is bőven beéri az uint8_t -vel. Ebben a topicban azt tapasztalom, hogy a kezdőket jóformán lekiabálják, hogy miért ilyen bénák. Ez nem helyes. Én boci kezdő próbálok másnak segíteni az ő/én szintjén, hogy eltudjon indulni. Erre bumm.. ![]() A hozzászólás módosítva: Szept 24, 2013
Idézet: Hat eppen ez az! Amikor szerencsetlen AVR szeretne "hirtelen" beszivni az aramot, akkor nem tudja. Persze, egy ideig jon az 1µF-bol, de utana honnan? A fojto miatt nem lesz eleg aram, leesik a feszultseg. 10..100nH ok, de 100uH az 1µF melle? Ezert mondtam, hogy szeretnem latni, hogy mi van ott a tap labon. Tenyleg kivancsi lennek. Lehet, hogy ezek a mai uC-k mar nem olyan agressziven cibaljak a tapot, szepen meglesz rajta az 5V. „egy ekkora induktivitason, es ugy altalaban nem tud nagyot ugrani az aramtuske”
Teljesen felreertesz. Oruolok, ha segitesz, neked legalabb valaszol.. Csak azert szoltam bele (bar nem vagyok sem szakmai, sem egyeb moderator), mert olyat allitottal, ami nem igaz. Ha azt mondod, hogy ne hasznald a bool tipust, akkor nem szolok bele, mert az a te velemenyed, az csak egy javaslat. De te azt allitottad, hogy nincs bool tipus. Nem akartam, hogy felrevezess egy kezdot, ennyi. Mellesleg, igenis tanitasz. Ha itt valaki kerdez, es arra egyertelmu valaszt kap, akkor az abbol tanul. Es ezert baromira nem mindegy, hogy itt ki mit allit. Szerintem.
Idézet: „Oruolok, ha segitesz, neked legalabb valaszol..” Ezt nem értem. Olyat állítottam ami nem igaz. Ez igaz is meg nem is. Az alap könyvtárak betöltésén kívül egy kezdőnem eszébe sem jut, hogy a bool miatt kell +1. Hogy van-e értelme? Nem tudom, de holnap kipróbálom. Véleményem szerint egy kezdőt akkor vezetnek meg amikor a LED villogásából is azt hozzák ki, hogy ahhoz csak a PWM jó.
Javasoltam is neki, hogy nF es µF parost rakjon az induktivitas utan. De ha mukodik, akkor jo ;]
Idézet: „Ezt nem értem.” Pedig nem bonyolult. Idézet: „Az alap könyvtárak betöltésén kívül egy kezdőnek eszébe sem jut, hogy a bool miatt kell +1” Mi az, hogy alapkonyvtar? Ezek nem konyvtarak, hanem header-ek, amik makrokat, typedef-eket es fuggvenydeklaraciokat tartalmaznak. A konyvtarak azok, amiket hozzalinkelsz a programodhoz. Azon felul a _Bool tipushoz semmilyen header nem kell, mert az a C99 szabvany szerint alaptipus, mint a char vagy az int. Tudod, hogy en honnan tudom a bool tipust es az stdbool.h-t? Onnan, hogy emlekeztem ra, hogy van a C nyelvben egy ideje mar ez a tipus, bar soha az eletben nem hasznaltam, ugyhogy megneztem a neten. Nem egeszen 12 masodpercembe telt, anelkul, hogy barkitol megkerdeztem volna. Szoval egy kezdonek sem kell ezt tudnia, utana tud nezni. Egyebkent az uint8_t pont ugyanannyira nem alaptipus a C-ben, mint a bool. Csak az speciel az stdint.h-ban van definialva. Ezt honnan tudja egy kezdo? De reszemrol ezt lezarom, mert nem akarok vitazni.
Remeljuk, hogy -10 fokban, amikor a havat akarja torolni az ablakrol az autopalyan, majd akkor is mukodni fog...
Hát, sokunknak új volt ez az stdbool.h-s valami.
Leellenőriztem és ha uint8_t használsz bool helyett, akkor is ugyanazt kapod fordítási eredménynek, tehát lehet használni. Jobban olvasható lesz tőle a kód, de semmi pluszt nem rak hozzá. Kizárólag C-ben használjátok, mert C++-ban nem része a szabványnak az stdbool.h. A hozzászólás módosítva: Szept 25, 2013
|
Bejelentkezés
Hirdetés |