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 Ezt nem tudom, hogy honnan vetted. WiFi Shield-el különböző eszközöket tudsz vezérelni WAN/LAN-on keresztül, illetve a shield-en lévő foglalatba dugott SD kártyán lévő fájlokat érheted el. Bár képzelem, hogy a fájlokat mennyire elképeszően nagy sebességgel kezelheti. Bővebben: Link
Ez a három paraméteres operátor (egymásbaágyazva).
Ha "valami" 2, akkor "ertek" 5 lesz, egyébként meg 9. Semmi köze sem a switch-hez, sem a makróhoz. A hozzászólás módosítva: Dec 16, 2014
Ezt értem,de itt nincs megadva a 3. paraméter az első két sorban.
Ha kirakom a zárójeleket érthetőbb lesz?
Esetleg, ha így nézed, akkor érthetőbb?
Tehát: if(y==3) akkor LCD_LINE4, ha nem akkor if (y==2), akkor LCD_LINE3, ha nem akkor if(y==1) akkor LCD_LINE2, ha nem, akkor LCD_LINE1 az értéke.
Meg van adva. De ez nem parameter, hanem operandus, ami lehet egy tetszoleges kifejezes, aminek a tipusa megegyezik a kettospont elott allo kifejezes tipusaval . A kettospont utan nem csak egy konstans allhat, hanem barmi, akar egy ?: operator, de lehetne ott fuggvenyhivas, vagy osszeadas, tok mindegy.
Ha bezarojelezed, akkor talan tisztabb a kep: (y == 2) ? 12 : ((y == 3) ? 3 : 13);
Kösz, így már értem (?
![]() ![]()
Idézet: Nem. A switch az utasitas, a ?: pedig operator.„De ez egy switch,nem ?!” Az operatoroknak vannak operandusaik, amikkel valamit csinalnak, es az egesznek van egy eredmenye. A eredmenynek van erteke es van tipusa is (int, char, pointer..) Vannak egyoperandusos operatorok mint pl. a !, ~, *, &, -. Vannak a szokvanyos ketoperandusos operatorok mint pl. a +, -, *, /, ==, >, stb. Az == operatornak is van eredmenye. Ha a ket operandusa egyenlo, akkor az eredmeny 1, ha kulonbozo, akkor az eredmeny 0. Tehat az y == 5 az egy olyan muvelet, aminek az eredmenye 1, ha y erteke 5, kulonben pedig 0. Az == (es az osszes relacios) operator tipusa mindig int. A ?: az specialis operator, mert annak harom operandusa van, bar a K&R konyv kettonek irja. Az ?: operator eredmenye az elso operandus erteketol fuggoen vagy a masodik vagy a harmadik operandus lesz. Ezert a masodik es harmadik operandus tipusa azonos kell legyen. C alapismeretek, K&R konyv. A hozzászólás módosítva: Dec 16, 2014
OK,köszönöm ! Hülyeséget írtam. Bocs a kezdő kérdéseimért !
![]() Ha tényleg nem lehet élni, C tudás nélkül? Hasznos C++ oktató anyag: INFO C Bővebben: Link A menüsor alcsoportjait érdemes átnézni! Bővebben: Link A programozás alapjai Bővebben: Link Bővebben: Link Bővebben: Link ... A hozzászólás módosítva: Dec 16, 2014
Ez idáig elboldogultam az asm-el(mega48),de e felett én is mazochizmusnak tartom
![]()
Elakadtam szoftveres PWM-nél. Attiny2313, Bascom, 14 Mhz. RGB LED szalagot szeretnék vezérelni. Ciklusokban nulláról felfutnak egyenként a színek. Ne legyen olyan gyors a felfutás 80 ms késleltetés van a ciklus magban. Egy idő után, de mindig adott helyen vibrálnak a színek. Ez miért lehet? (Timer0 megszakításban csak a 3 led-et kapcsolom ki-be.)
Tápegység volt kicsi. Össze sem számoltam, hogy mennyi a fogyasztás. Kapcsoló üzemű tápegység (asztali DVD lejátszóból) 12V-os része kevésnek bizonyult.
Idézet: Jogos. „Szerintem ezt a kérdésed a Forrásnál tedd fel!”
Meglehetősen gyorsan kiábrándultam AVR alatt az assembly-ből. Sok munkát fektettem bele, megcsináltam, működött boldog voltam.
Boldogságom addig tartott, amíg bele nem néztem, hogy a gcc mit csinál és szembesültem azzal, hogy jobban csinálja mint én. Értsd: gyorsabb és tömörebb kódot készített nálam. Ezután vontam le a következtetést, hogy nem fogok az avr-gcc-vel versenyezni, inkább használom.
Meg tudom erősíteni,pár programomat próbaképpen átírtam GCC-be.Max. 5-6% plusz jött ki,de ez betudható a start up-nak és a kezdő C tudásomnak.
Mi a magyarázat arra, hogy pl az LDI utasítás csak az r16-os regisztertől működik, alatta meg nem? És hol lehet annak utánanézni, hogy az utasítások mely regisztereken működnek? Az adatlapban nem találtam erről semmi infót.
AVR Studio helpjében jól le vannak írva ezek. Egyedül az egyik komparálási utasításnál találkoztam olyannal, hogy nem úgy működik ahogy abban van.
A konstans paraméterű utasítások csak R16-tól használhatók: sbci,subi,cpi,andi,ori,de pl. az sbr,cbr is,mert az ori/andi utasításnak felel meg,vagy a ser,ahol szintén konstans kerül a regiszterbe.
Az ra a magyarazat, hogy az utasitasszóban csak 4 biten van lekodolva a cel regiszter. r16..r31 az pont 16 darab. Bizonyos utasitasoknal 5 bit van a regiszternek, abban r0-r31 barmi lehet. Igy jott ki a tervezesnel.
Idézet: Van kulon utasitaskeszletet leiro pdf. Valoszinuleg van frissebb is (Mega AVR) az Atmel oldalan. „És hol lehet annak utánanézni, hogy az utasítások mely regisztereken működnek? Az adatlapban nem találtam erről semmi infót.”
Sziasztok,
Van egy Atmega162, amit szeretnék programozni. USBasp a programozó eszköz, amit használok hozzá. eXtrame Burner a SW, amivel programozni szeretném. Van olyan szituáció, hogy valamit rosszul állítok be rajta, akkor többet nem lehet programozni? Most már a devideID-t sem tudom kiolvasni. 5V-t megkapja. Van hozzá kapcsolva külső kvarc. Az sem nem rezeg.
Csak tipp...
Ha előzőleg tudtad olvasni a device ID-t, most meg már nem, alapvetően két dolog lehet: 1. bekötési vagy érintkezési hiba (forrasztás, kábel, stb) 2. kizártad magad a chip-ből, átírtad a fuse biteket (letiltottad a reset lábat vagy SPI portot) A 2. esetben csak HV programozó segíthet...
A második eset sanszos.
Milyen az a HV programozó?
A HV programozó, High Voltage programozó lenne. Pl itt van leírás róla.
|
Bejelentkezés
Hirdetés |