Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
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
Lapozás: OK   565 / 840
(#) Szabi1 válasza blackdog hozzászólására (») Szept 24, 2013 /
 
ATMEGA8; egy ugyanilyen alapú AVR kódjában ez a függvény helyes volt, és működött Bővebben: Link

main.c
    
(#) blackdog válasza Szabi1 hozzászólására (») Szept 24, 2013 /
 
  1. int main(void)

#define vagy #include sorok után szúrd be:
  1. void InitADC();


Egyébként mivel és milyen paraméterekkel fordítasz?
A hozzászólás módosítva: Szept 24, 2013
(#) Szabi1 válasza blackdog hozzászólására (») 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
(#) blackdog válasza Szabi1 hozzászólására (») Szept 24, 2013 /
 
hmm...
LCD kezeléséhez a fájlok hol vannak? Pl. lcd.c és lcd.h ? Ezek nem részei az AVR gcc-nek!
(#) Szabi1 válasza blackdog hozzászólására (») Szept 24, 2013 /
 
Nemtudom hogy megvannak-e, nemtudom melyik mappában kellene legyen.
(#) blackdog válasza Szabi1 hozzászólására (») Szept 24, 2013 /
 
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.
(#) Szabi1 válasza blackdog hozzászólására (») Szept 24, 2013 /
 
Tudom, letöltöttem, de nemtudtam hova másoljam, és a main.c melllé raktam ahol a project van.
(#) blackdog válasza Szabi1 hozzászólására (») Szept 24, 2013 /
 
Eddig oké, de a fordító nem tudja. Elárulod végre, hogy mivel fordítasz? AS4?
(#) Szabi1 válasza blackdog hozzászólására (») Szept 24, 2013 /
 
WINAVR: a programmers notepad verzioja: 2.0.8.718-basie
(#) blackdog válasza Szabi1 hozzászólására (») Szept 24, 2013 /
 
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.
(#) Szabi1 válasza blackdog hozzászólására (») Szept 24, 2013 /
 
Nincs lcd.c, nemlehet letölteni valahonnan?
(#) blackdog válasza Szabi1 hozzászólására (») Szept 24, 2013 /
 
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?
(#) Szabi1 válasza blackdog hozzászólására (») Szept 24, 2013 /
 
lcd.h fájlt, és a projectnél odaraktam a listába,

Capture.JPG
    
(#) blackdog válasza Szabi1 hozzászólására (») Szept 24, 2013 /
 
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?
(#) Szabi1 válasza blackdog hozzászólására (») Szept 24, 2013 /
 
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.
(#) blackdog válasza Szabi1 hozzászólására (») Szept 24, 2013 /
 
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.
(#) blackdog válasza blackdog hozzászólására (») Szept 24, 2013 /
 
Még egy kis segítség a függvényekhez.
Pl. LCDWriteStringXY létrehozása:
  1. #define LCDWriteStringXY(oszlop, sor, adat)      lcd_gotoxy(oszlop,sor); lcd_puts(adat);


Ezt szépen beteszed a main.c -be az #include sorok után.
(#) Szabi1 válasza blackdog hozzászólására (») Szept 24, 2013 /
 
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?
(#) blackdog válasza Szabi1 hozzászólására (») Szept 24, 2013 /
 
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
(#) killbill válasza blackdog hozzászólására (») 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;
(#) blackdog válasza killbill hozzászólására (») Szept 24, 2013 /
 
[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.
(#) killbill válasza blackdog hozzászólására (») Szept 24, 2013 /
 
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).
(#) blackdog válasza killbill hozzászólására (») Szept 24, 2013 /
 
[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
(#) killbill válasza gtk hozzászólására (») Szept 24, 2013 /
 
Idézet:
„egy ekkora induktivitason, es ugy altalaban nem tud nagyot ugrani az aramtuske”
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.
(#) killbill válasza blackdog hozzászólására (») Szept 24, 2013 /
 
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.
(#) blackdog válasza killbill hozzászólására (») Szept 24, 2013 /
 
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ó.
(#) gtk válasza killbill hozzászólására (») Szept 24, 2013 /
 
Javasoltam is neki, hogy nF es µF parost rakjon az induktivitas utan. De ha mukodik, akkor jo ;]
(#) killbill válasza blackdog hozzászólására (») Szept 24, 2013 /
 

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.
(#) killbill válasza gtk hozzászólására (») Szept 24, 2013 /
 
Remeljuk, hogy -10 fokban, amikor a havat akarja torolni az ablakrol az autopalyan, majd akkor is mukodni fog...
(#) csabeszq válasza killbill hozzászólására (») Szept 25, 2013 /
 
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
Következő: »»   565 / 840
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem