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
amikor le akarom forditani hiányol valamijen .elf fájlt amit nem talál
------ Build started: Project: közlamp, Configuration: Release AVR ------ Build started. Project "közlamp.avrgccproj" (default targets): Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!=''). Target "CoreBuild" in file "C:\Program Files\Atmel\AVR Studio 5.0\Vs\AvrGCC.targets" from project "C:\Users\mrgrassy\Documents\AVRStudio\közlamp\közlamp\közlamp.avrgccproj" (target "Build" depends on it): Task "RunAvrGCC" C:\Program Files\Atmel\AVR Studio 5.0\AVR ToolChain\bin\make.exe all make: *** No rule to make target `k?Âzlamp.o', needed by `k?Âzlamp.elf'. Stop. Done executing task "RunAvrGCC" -- FAILED. Done building target "CoreBuild" in project "közlamp.avrgccproj" -- FAILED. Done building project "közlamp.avrgccproj" -- FAILED. Build FAILED. ========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ========== Idézet: „*** No rule to make target `k?Âzlamp.o', needed by `k?Âzlamp.elf'. Stop. Done executing task "RunAvrGCC" -- FAILED. Done building target "CoreBuild" in project "közlamp.avrgccproj" -- FAILED. Done building project” Nincs megadva a .c file, amiből az .o készülne, de kellene a binárishoz (.elf). Próbáld meg ékezetek nélküli file neveket használni: közlamp => kozlamp k?Âzlamp => kozlamp
Mivel mérted ezeket?
köszi és .elf fájlt honnan találok vagy hogy csinálok ?
Kezdetnek egy nyomógombbal üzemeltetett villogót építenék a helyedben. Szigorúan nulláról. Egyrészt csak így ismerkedhetsz meg az AVR-rel ténylegesen, másfelől jó lesz C gyakorlásnak is.
Ha valami konkrétumban elakadsz, akkor szerintem sokan örömmel segítenek. Ellenben más helyett megcsinálni a munkát senki sem szereti. Értsd: amit kérsz az az, hogy nézzük meg helyetted a forráskódot, és értelmezzük azt, majd mondjuk meg mit kellene hova beírni. Szerintem ez nem fórumra való. Ellenben, ha azt mondod, hogy a x-ik sorban nem érted ezt:
akkor arra válaszolunk. Nem kell csüggedni, próbáld meg te is megírni azt amit linkeltél, persze ebből merítve ihletet. Hidd el jobb érzés lesz a végén, amikor elkészül. A FET-tel vezérelt több led pedig teljesen jó ötlet.
ékezetek nélküli hiba:
------ Build started: Project: AVRGCC2, Configuration: Debug AVR ------ Build started. Project "AVRGCC2.avrgccproj" (default targets): Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!=''). Target "CoreBuild" in file "C:\Program Files\Atmel\AVR Studio 5.0\Vs\AvrGCC.targets" from project "C:\Users\mrgrassy\Documents\AVRStudio\AVRGCC2\AVRGCC2\AVRGCC2.avrgccproj" (target "Build" depends on it): Task "RunAvrGCC" C:\Program Files\Atmel\AVR Studio 5.0\AVR ToolChain\bin\make.exe all make: *** [AVRGCC2.o] Error 1 Done executing task "RunAvrGCC" -- FAILED. Done building target "CoreBuild" in project "AVRGCC2.avrgccproj" -- FAILED. Done building project "AVRGCC2.avrgccproj" -- FAILED. Build FAILED. ========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
Az AVRToolchain rossz sajna.
Tedd fel a WINAVR-t és azzal fordítsd. A project optionsban tudod átállítani a Studio4-ben. Studio5- tel nem tudom mi a helyzet 8bit téren, de nekem a STudio4.19 megtalálta az avrtoolchaint és következetesen azzal szeretne fordítani 8bites avr -ekre, de nem képes rá (köszi atmel!). A hozzászólás módosítva: Jan 24, 2016
köszi meg nézem
Sikerült köszi
WINAVR-es fordítás alatt ékezetes betű, illetve szóköz nem lehet az elérési útban...
már csak a felprogramozásnál van probléma :S
hiba : Unable to enter programing mode. Please verify that the programmer is correctly attached to the target and that target and that target power has been switched on. Also verify that the correct device and interface settings have been specified. Programming session setup failed: TCF command: Device:startSession failed: Code:1 ,Service: ,Message from peer:Failed to enter programming mode. ispEnterProgMode: Error status received: Got 0xc0, expected 0x00 pedig csatlakozik és attiny van beállítva :S
Ennél jobban ment a PIC programozása ésdekes modon elsőre ment.
már simulátorban tökéletesen lefut de a dragonnal problémázik :S
Próbálkozom próbálkozom!
Suliban atmega128-at programozunk, de sok a vakfolt. Igyekszem akkor utána menni a dolognak, köszi a jó tanácsot. Esetleg valami oldal, vagy cikk amit fel tudok használni a gyakorláshoz? Előre is köszi: Tecsa! ui.: Amúgy lenne bőven kérdésem, hogy melyik sor micsoda, de erre a fórum nem alkalmas, ilyenre inkább msn-t vagy hasonlót tudok elképzelni. Ott is szívesen fogadok segítséget.
Továbbra is azt mondom, hogy a LED-ek, vagy bármi más leterheli a programozólábakat.
A programozó max. 1-2 mA áramot tud leadni ezeken, ha valami többet vesz fel akkor a jel nem jut át az AVR-be! Sokszor én is így jártam. Nálad(mivel csak Dragon van) a megoldás hogy a programozás idejére kikötöd a LED-eket, vagy azt ami éppen leterheli a MOSI, MISO, SCK lábakat. Bár MISO elvileg nem számít, de kösd ki. Ezekre a lábakra csak a programozó legyen rákötve, és úgy próbáld!
Köszi holnap megpróbálom aztán majd kiderül.
Idézet: „köszi és .elf fájlt honnan találok vagy hogy csinálok ?” A fordító készít a .c file(ok)ból .o object file-t, majd ebből a linker a bináris .elf file-t. Ha rendben megy a fordítás akkor mind a .o mind a .elf elkészül a forrás .c-ből.
Köszi már sikerült a fordítás de azért köszönöm a magyarázatot.
És még valami ha valaki tudja, hogy pontosan hogyan megy a kommunikáció az AVR-és a PC között USB-n. és lenne szives elmagyarázni nekem vagy adni valami magyar nyelvű oldalt azt meg köszönném. Ezen kívül érdekelne a hardware-s usb-t hogyan kell kezelni AVR-ben (atmega8u2-ben)
Ezt megcáfolnám, ugyan úgy rémlik, mintha egyszer lett volna gond valamikor, de most kipróbáltam a következőt:
Az egészet most nem szúrtam be, de lényeg hogy lefordította. Ugyanakkor én is javaslom a linuxról porttól eszközöknél a szóközök és ékezetek mellőzését windowson.
Elsősorban: Avr tutorials
német avr tutorial Avrlibc A lényeg, hogy mindig includeold ezt:
Onnan gyakorlatilag standard C az egész.
sikerült kisebb nagyobb sikerrel
sikerült fel programozni de túl gyors ez már nem akkora probléma
Köszönöm az eddigi segítséget is!
Az extern parancsot próbáltam úgy alkalmazni, ahogy javasoltad, hogy a FAT32.c-ben deklarált változóra hivatkozom a MAIN.c-ben, de úgy agyon danger-özött a fordító, így kénytelen voltam inkább a MAIN-ben deklarálni és a FAT32-ben használtam az extern -t, így tökéletesen működik. (KÖSZÖNÖM!) Az a kérdésem még mindig fenn áll, hogy ha van egy tömböm, akkor azt mindenképp át kell alakítanom, hogy az értékét tudjam növelni, vagy van rá valami egyszerű megoldás? Tehát van ennek valami egyszerű módja, hogy
, vagy mindenképp előbb az általad javasolt itoa és atoi függvényt kell alkalmazni az átalakításra, majd visszaalakításra?
Na várjunk csak, a tömb amiben szeretnéd növelni az értéket az most milyen formában tartalmazza a számot, amit növelni szeretnél? Mert innen az derül ki, hogy kvázi 32bit nagyságú integerként.
Nekem korábbról olyasmi dereng, hogy egy számot kapsz az UARTon ASCII-ként, majd azt akarod növelni eggyel. Szóval én kicsit összezavarodtam. Kérlek önts nekem tiszta vizet a pohárba.
Ez így nem lesz jó! Az atoi az ASCII-vol Integer-be alakít, te pedig egy számot teszel bele a tömbbe ha jól látom. Pl:
char tomb[5] = "1234"; int i = atoi(tomb); ...kellene, magyarán oda ugye szöveget vársz. Vissza alakítás jó, csak figyelj arra, hogy a számos ne legyen 9999-nel nagyobb különben buffert tulcsordulasod lesz.
Egy fájl kezdeti tartalma a "0001", ami gyakorlatilag egy bekapcsolás/működés számlálóként opciónál. Ennek az értékét szeretném növelni minden reset-elés/bekacsolás után egyel.
És akkor az oda (tomb[] -ből i -re ) alakítás hogy lenne jó?
A jelenlegi eredeti kódrészlet, ami nem működik, amúgy az ez:
Elkezdtem tákolni.
Abbol kiindulva, hogy mondjuk az 1234, az 4+3*10+2*100+1*1000, megalkottam a
sorokat. Továbbra is várom a szebb verziót (és valami gebasz van ezzel is, mert nem úgy működik a progi, ahogy szeretném...)
Volna egy újabb problémám a másik mellé:
Erre a kódra a mellékelt fájl-t hozza létre. Azt szeretném, ha nem a 00 , 02, 0D és 0A hexa és kis fekete kocka karaktereket mentené el, mert most a fájl tartalma 00 00 00 02 0D 0A én pedig azt szeretném, ha az lenne ~ugyan erre~ a programra, hogy 48 48 48 50 0D 0A. Hogy lehet a decimálist ASCII-ra alakítani?
Sziasztok!
Egy kis kérdésem lenne, Thunder-bird atmega128 avr fejlesztő panelon tanulok programozni(mellékelek képet). Amit használni kéne tudnom azok a következők: LCD, tasztatúra, 7szegmenses kijelző, RGB led, gombok, ledek. A feladatom: Menü kiírása (4 soros) [ezzel semmi gond] Tasztatúra használatával navigálni a menüben. [itt kezdődnek a gondok.]
Az "a" változó a tasztatúrát lekérdező függvényből való visszatérő érték. A gondom a következő, az 1es gomb lenyomása után kijelzőt kéne törölni és mondjuk a az rgb led fényerejét állítani az 1-es és 3-as gombokkal. Nem tudom megoldani, hogy mi kerüljön az egyes esetek alá, hogy különbség legyen a főmenü és az almenük között. Próbáltam saját függvénnyel, az egyes case-eken belül több case-t létrehozni, valahogy sosem ment rendesen. Előre is köszönöm a segítséget, esetleg ha valaki ráérne egy fél órát ezzel foglalkozni msn-en akkor kérem jelezze itt nekem. Előre is köszönöm. Idézet: „Egy fájl kezdeti tartalma a "0001", ami gyakorlatilag egy bekapcsolás/működés számlálóként opciónál. Ennek az értékét szeretném növelni minden reset-elés/bekacsolás után egyel.” Ha jol ertem, akkor egy ASCII-ban elkodolt szamot ertesz ezalat az idezojeles "0001" alatt? Tehat, hogy egy notepaddal tudnad ezt a szamot modositani -- ugy is mondhatnam ember szamara olvashato modon tarolod a szamokat? Avagy binarisan, nativ tarolnad -- gep szamara ertheto modon? (mert az esetben nem kell atalakitani, feltetelezve a kodolas native, tehat az endian [little-endian/big-endian avagy LSB/MSB] stimmel -- keress ra googlival ezekre a szavakra, ill, szamabrazolasra). Idézet: „És akkor az oda (tomb[] -ből i -re ) alakítás hogy lenne jó?” Ugy, ahogy irtam (mar ha ASCII-ben tarolod el)... A gond az atoi-s peldaddal az, hogy a tombot binaris szamokkal inicializalod, nem karakterekkel, igy a tomb[0] erteke '\0' lesz, azaz ASCII NULL karakter, ami a string lezaro karaktere a C-ben. Emiatt nincs is atalakitanivaloja az atoi fuggvenynek... Azonkivul az utolso elemre (4. pozicio) nem teszel lezaro NULL-t, ami buffer (string) tulolvasashoz vezethet. Ezert mutattam neked, hogy jobban jarnal, ha stringkent inicializalod fel akkor jobban jarnal. Masik modszer:
Magyaran karakterenkent irod be a karaktereket, nem hasznalod ki a C szintaktika adta lehetosegeket -- amit az en peldamban lathatsz. Lenyeg, hogy karaktereket teszel be oda es nem szamot... (figyeld meg az aposztrofok hasznalatat es a lezaro NULL karaktert a 4. pozicioban!). Azutan mukodnie kell az atoi() atalakitasnak. |
Bejelentkezés
Hirdetés |