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   141 / 840
(#) Topi válasza roleeka hozzászólására (») Aug 12, 2009 /
 
Nem szeretem saját magam idézni, de: Bővebben: Nyolc lábbal cikksorozat

Egyszerűség, érthetőség volt a cél.
(#) roleeka válasza Topi hozzászólására (») Aug 12, 2009 /
 
Köszönöm!

Olvastam már egy részét és nagyon tetszett.
Ha megjön a programozóhoz az alkatrész szépen végig is próbálom a cikkben leírtakat.

A programnyelv megismeréséhez (BASCOM esetében BASIC) milyen segédanyagok lelhetőek a neten, lehetőleg magyar nyelven?

Sajnos ebben is tök kezdő vagyok
(#) Topi válasza roleeka hozzászólására (») Aug 12, 2009 /
 
BASCOM is található a neten áttételesen Cseh Róbert tollából, magyar fordításként.

DE! Nem javaslom a bascom nyelvet, mert ha komolyabb céljaid vannak a mikrovezérlő programozással, akkor a C-n és az Assembly nyelveken kívül nem sok nyelv marad a talpán. Legyen ez a személyreszabhatóság, optimalizálás, _dokumentáltság_, mások által esetleg perifériákhoz írt illesztőprogramok, library-k, driverek. C ezen a téren igen kiemelkedő.

Elsősorban ennek az az oka, hogy a többi fordítóval ellentétben az AVR-GCC (windowsra WIN-AVR) teljesen korlátozás mentesen szabadon használható, ingyenes. Nem ilyen x KB-ig ingyenes, meg X sorig.
Egy C kódot bármikor a jövőben le fogsz tudni fordítani. A Basic nyelv egyre ritkább, egyre halottabb.
(#) roleeka válasza Topi hozzászólására (») Aug 12, 2009 /
 
Hát megfogadom a tanácsod.

Mivel se basic se C ismereteim nincsenek így végül is teljesen mind1 melyik irányba indulok, legalábbis ez az érzésem.

Win AVR-ről van valami magyar írás?
(#) 5cmarzo hozzászólása Aug 12, 2009 /
 
Hello!

A következő érdekes probléma merült fel (Attiny 2313):
Csináltam egy számlálót, a TIMER0 túlcsordulása növeli a kijelző értékét. A probléma, hogy csak 128-as előosztóig enged! A 256 és 1024-es előosztóval nem csinál semmit, alapállapotban van. A kijelzőn nem változik semmi, folyamatosan "00"-át jelez ki.
Ha valaki tapasztalt hasonlót, megtudja velem osztani?
Jóéjszakát!
(#) Topi válasza 5cmarzo hozzászólására (») Aug 12, 2009 /
 
Külső library vagy saját? Külső timer piszkáló library-k általában nem vesznek arról tudomást, hogy egyes típusok adott timerei néha más bit maszkolással rendelkeznek.
Konkrétan írd a TCCRxx regiszterbe az előosztót, adatlapból kinézve. Konkrét értékként.
(#) 5cmarzo válasza Topi hozzászólására (») Aug 12, 2009 /
 
Hogy érted, hogy konkrétan írd bele?

LDI R16, 0B00000101
OUT TCCR0B, R16

Ez a módszer akkor nem jó?
(#) Topi válasza 5cmarzo hozzászólására (») Aug 12, 2009 /
 
Ez így tökéletes. Én arra gondoltam, hogy ne ilyen univerzális library-val dolgozz. De így jó.

Viszont!

Idézet:
„A probléma, hogy csak 128-as előosztóig enged!”

Tudtommal nincs 128-as előosztó tiny2313-ban., 1, 8, 64, 256, 1024 van csak.
(#) 5cmarzo válasza Topi hozzászólására (») Aug 12, 2009 /
 
ok, köszi a helyreigazítást, jogos a felvetésed.
(#) Topi válasza 5cmarzo hozzászólására (») Aug 12, 2009 /
 
Nem lehet hogy ez volt a gond? Hogy Te 128 felett esetleg már külső órajelre állítottad? Hogy ezért nem működött, mert mikor Te 128-nak gondoltad, az volt az 1024? Mert ez magyarázat lenne.
(#) 5cmarzo válasza Topi hozzászólására (») Aug 12, 2009 /
 
Igen, jól gondolod. Beleraktam még pluszba egy 15-ös előosztót és már jó is lett.
(#) vagnerjazon hozzászólása Aug 14, 2009 /
 
Üdv!

Szeretnék belekóstolni az AVR-programozásba, és próbálok összeszedni mindent, ami kell hozzá, de sehonnan sem tudom letölteni az AVR Studio-t, pedig ahogy elnézem, az kell. Esetleg tud valaki egy linket?
(#) Tomi20 válasza vagnerjazon hozzászólására (») Aug 14, 2009 /
 
Szia

A hivatalos oldalról ingyenesen letölthető, csak regisztrálni kell. Itt megtalálod. (Én pl véletlenszerű adatokat adtam meg, csak az e-mail cím valós, a spam-eset érdemes megadni a reklámok miatt)
(#) vagnerjazon válasza Tomi20 hozzászólására (») Aug 14, 2009 /
 
Köszönöm a segítséget! Már töltöm is le.
(#) Sir-Nyeteg hozzászólása Aug 14, 2009 /
 
Miért lehet az, hogy a PC felismeri Topi AVR programozóját, elnevezi Com4-nek, de AVRStudió nem érzékeli?
(#) aticska válasza Sir-Nyeteg hozzászólására (») Aug 14, 2009 /
 
Szia!

Nem USB hub-ról használod? Annak idején én is szívtam vele.
Csak ha közvetlenül a gépbe dugtam akkor működött.
(#) Topi válasza Sir-Nyeteg hozzászólására (») Aug 14, 2009 /
 
Ha vista, akkor hiába nevezi el. Nem fog menni, amíg nem cserélsz drivert.

1. Driver eltávolítás eszközkezelőben
2. Vista LowBulk driver betallózása.
3. Örül.
(#) Sir-Nyeteg válasza Topi hozzászólására (») Aug 15, 2009 /
 
1. és 2. pont megtörtént már többször is.
4 újratelepítés és 3 driver-csere után sikerült elérni a 3. pontot.
Valami miatt ezt minden új oprendszernél el kell játszanom. Most működik
Köszönöm!

Általános kérdés: Attiny13/45-ben a komparátort lehet úgy használni, hogy mindkét bemenetét elérjem kivülről?
Vagy csak ADC-vel érhetem el egyiket? Mert én katalógusból ezt vettem ki.
ADC mennyi órajelet vesz el? Mert akkor lehet hogy külső komparátort kellene használnom...
(#) Topi válasza Sir-Nyeteg hozzászólására (») Aug 15, 2009 /
 
ŐŐ. Analóg komparátornak nincs köze az ADC-hez. Az analóg komparátor teljes egészében az ADC-től független egység. Annyi közös van, hogy esetleg használhatják ugyan azt a lábat. De az analóg komparátor egy normál logikai értéket, vagy esetleg interruptot "ad vissza".
(#) MaSTeRFoXX válasza Topi hozzászólására (») Aug 15, 2009 /
 
Idézet:
„Valószínű valami optimalizációs dolog lehet. Masterfoxx! Küldj nekünk a kérdéses részről LSS-t! Hadd tanuljunk a dologból.”


Hú, bocs, ezt csak most olvastam. Azóta sajnos(szerencsére) sokat változtattam azon a részen, nem tudom hogy elő tudom-e idézni megint, de megpróbálom.

Most néztem utána, s-es, méretre optimalizálásra van beállítva. Eddig nagyon nem tűnt fel, meg nem szokott leesni hogy ilyenkor optimalizálási hiba lehet, általában nekiesek máshogy megírni. (Hozzászoktam a rövid bascomos pályafutásom alatt hogy mindig kel egy másik útnak lennie , ott elég sokszor előfordult hogy egyszerű dolog nem ment...
(#) MaSTeRFoXX válasza MaSTeRFoXX hozzászólására (») Aug 15, 2009 /
 
Nos, kipróbáltam.
0-s optimalizálással atmega64-re 26kbyte méretűre fordul,
de a hiba nem jelentkezik
s-es optimalizálással 13kbyte fordul, és megint megjelenik a hiba

Nem volt egyszerű megtalálni, de sikerült előderiválni:

A nem optimalizált verzió

  1. 20c0:   0e 94 ea 25     call    0x4bd4  ; 0x4bd4 <lcd_puts>
  2.                                         lcd_mode(PLAY);
  3.     20c4:       81 e0           ldi     r24, 0x01       ; 1
  4.     20c6:       90 e0           ldi     r25, 0x00       ; 0
  5.     20c8:       0e 94 4c 29     call    0x5298  ; 0x5298 (lcd_mode)
  6.                                         if(compare_ext(PSTR("MP3\0")))
  7.     20cc:       88 ec           ldi     r24, 0xC8       ; 200
  8.     20ce:       90 e0           ldi     r25, 0x00       ; 0
  9.     20d0:       0e 94 2c 1f     call    0x3e58  ; 0x3e58 (compare_ext)
  10.     20d4:       00 97           sbiw    r24, 0x00       ; 0
  11.     20d6:       21 f0           breq    .+8             ; 0x20e0 (main+0x506)
  12.                                         {
  13.                         comstr("ez MP3");
  14.     20d8:       8b e2           ldi     r24, 0x2B       ; 43
  15.     20da:       91 e0           ldi     r25, 0x01       ; 1
  16.     20dc:       0e 94 c1 17     call    0x2f82  ; 0x2f82 (comstr)
  17.                                         //      start_timer1();
  18.                                         //      dummy=play_file(fi.cluster);
  19.                                         }
  20.                                                
  21.                                         if(compare_ext(PSTR("BMP\0")))
  22.     20e0:       83 ec           ldi     r24, 0xC3       ; 195
  23.     20e2:       90 e0           ldi     r25, 0x00       ; 0
  24.     20e4:       0e 94 2c 1f     call    0x3e58  ; 0x3e58 (compare_ext)
  25.     20e8:       00 97           sbiw    r24, 0x00       ; 0
  26.     20ea:       21 f0           breq    .+8             ; 0x20f4 (main+0x51a)
  27.                                         {
  28.                         comstr("ez BMP");
  29.     20ec:       82 e3           ldi     r24, 0x32       ; 50
  30.     20ee:       91 e0           ldi     r25, 0x01       ; 1
  31.     20f0:       0e 94 c1 17     call    0x2f82  ; 0x2f82 (comstr)



Az optimalizálással

  1. f56:    0e 94 c0 11     call    0x2380  ; 0x2380 (lcd_puts)
  2.                                         lcd_mode(PLAY);
  3.      f5a:       81 e0           ldi     r24, 0x01       ; 1
  4.      f5c:       90 e0           ldi     r25, 0x00       ; 0
  5.      f5e:       0e 94 fe 15     call    0x2bfc  ; 0x2bfc (lcd_mode)
  6.                                         if(compare_ext(PSTR("MP3\0")))
  7.      f62:       81 ea           ldi     r24, 0xA1       ; 161
  8.      f64:       90 e0           ldi     r25, 0x00       ; 0
  9.      f66:       0e 94 e2 0b     call    0x17c4  ; 0x17c4 (compare_ext)
  10.      f6a:       89 2b           or      r24, r25
  11.      f6c:       21 f0           breq    .+8             ; 0xf76 (main+0x1c8)
  12.                                         {
  13.                         comstr("ez MP3");
  14.      f6e:       88 e1           ldi     r24, 0x18       ; 24
  15.      f70:       91 e0           ldi     r25, 0x01       ; 1
  16.      f72:       0e 94 d7 09     call    0x13ae  ; 0x13ae (comstr)
  17.                                         //      start_timer1();
  18.                                         //      dummy=play_file(fi.cluster);
  19.                                         }
  20.                                                
  21.                                         if(compare_ext(PSTR("BMP\0")))
  22.      f76:       8c e9           ldi     r24, 0x9C       ; 156
  23.      f78:       90 e0           ldi     r25, 0x00       ; 0
  24.      f7a:       0e 94 e2 0b     call    0x17c4  ; 0x17c4 (compare_ext)
  25.      f7e:       89 2b           or      r24, r25
  26.      f80:       21 f0           breq    .+8             ; 0xf8a (main+0x1dc)
  27.                                         {
  28.                         comstr("ez BMP");
  29.      f82:       8f e1           ldi     r24, 0x1F       ; 31
  30.      f84:       91 e0           ldi     r25, 0x01       ; 1
  31.      f86:       0e 94 d7 09     call    0x13ae  ; 0x13ae (comstr)
  32.  
  33. Egy picit kozmetikáztam 1-2 kacsacsőr miatt


Remélem ennyiből kiderül, bár még nem próbáltam értelmezni. Nem tudom kell-e hozzá a függvény
(#) MaSTeRFoXX válasza MaSTeRFoXX hozzászólására (») Aug 15, 2009 /
 
És lemaradt az amikor s-es opimalizálással jól fut le, amikor a ==1 oda van írva


  1. lcd_mode(PLAY);
  2.                                         if(compare_ext(PSTR("MP3\0"))==1)
  3.                                         {
  4.                         comstr("ez MP3");
  5.      f3c:       88 e1           ldi     r24, 0x18       ; 24
  6.      f3e:       91 e0           ldi     r25, 0x01       ; 1
  7.      f40:       0e 94 db 09     call    0x13b6  ; 0x13b6 (comstr)
  8.                                         //      start_timer1();
  9.                                         //      dummy=play_file(fi.cluster);
  10.                                         }
  11.                                                
  12.                                         if(compare_ext(PSTR("BMP\0"))==1)
  13.      f44:       8c e9           ldi     r24, 0x9C       ; 156
  14.      f46:       90 e0           ldi     r25, 0x00       ; 0
  15.      f48:       0e 94 e6 0b     call    0x17cc  ; 0x17cc (compare_ext)
  16.      f4c:       01 97           sbiw    r24, 0x01       ; 1
  17.      f4e:       21 f4           brne    .+8             ; 0xf58 (main+0x1aa)
  18.                                         {
  19.                       comstr("ez BMP");
  20.      f50:       8f e1           ldi     r24, 0x1F       ; 31
  21.      f52:       91 e0           ldi     r25, 0x01       ; 1
  22.      f54:       0e 94 db 09     call    0x13b6  ; 0x13b6 (comstr)
  23.                                         //      image(fi.cluster);
  24.                                         //      dummy=0;


(#) Topi válasza MaSTeRFoXX hozzászólására (») Aug 16, 2009 /
 
Egyetlen igazi különbséget látok:
O0 esetén:
- 0 konstanst kivonja a (feltehetően r24) visszatérési értékből.
- Ha Z = 1 (tehát 0-át kivonva az eredmény 0), akkor ugrik nyolcat, lényegében átugorja a függvényt.

Os esetén:
- r24-hez hozzá orolja a 0-át (r25-ön keresztül). Ha így nulla lesz (tehát az r24 is nulla volt) akkor átugorja a függvényedet.

Os esetén ==1-el:
- Nem nullát hanem egyet von ki belőle. Ha az fgv r24-e egy volt, akkor az eredmény nulla lesz. Ez esetben nem ugorja át a fgv-t, mert itt BRNE van. Assembly-ben ez is jó, mint az első három.

Egyetlen egy betegséget fedezek fel, hogy optimalizálás esetén 0-ával orol, továbbá r25-öt a fgv. előtt állítja be. Így ha a fgv használja belül az r25-öt, akkor lehet hogy az "or r24, r25" sornál, az r25-ben már más van! Ez az egyetlen egy betegségét látom, ami miatt a felvázolt eset létrejöhet. És ráadásul pont akkor, olyan optimalizációval amit írtál.

Logikailag 0-át kivonni csak Zero flag miatt minden gond nélkül lehet, működik (1. verzió), 0-át rá orolni is lehet csak Zero flag vizsgálat miatt (2. verzió) és egyet kivonni inverz logikával is lehet.

Egy különbség. r25 esetleges használata. Az az egy hibás sort találom így benne. Kukkantsd már meg kérlek a függvényed belsejét, lehet hogy használja az r25-öt stack-elés nélkül?!
(#) MaSTeRFoXX válasza Topi hozzászólására (») Aug 16, 2009 /
 
Úgy néz ki igazad van. Használja az r25-öt, de ahogy látom nincs push az r25 birizgatása előtt.

(Bevallom őszintén hogy sajnos az AVRnél kezdő vagyok assemblyben, annó a PIC16-okat csak assemblyben programoztam)

Szóval a nem optimalizáltnál (-O0) én azt látom hogy ugyan használja az R25-öt, de előtte elmenti valahova és visszatérés előtt visszaállítja az értékét

  1. uint8_t compare_ext(const char* str)
  2. {
  3.     3e58:       df 93           push    r29
  4.     3e5a:       cf 93           push    r28
  5.     3e5c:       cd b7           in      r28, 0x3d       ; 61
  6.     3e5e:       de b7           in      r29, 0x3e       ; 62
  7.     3e60:       2b 97           sbiw    r28, 0x0b       ; 11
  8.     3e62:       0f b6           in      r0, 0x3f        ; 63
  9.     3e64:       f8 94           cli
  10.     3e66:       de bf           out     0x3e, r29       ; 62
  11.     3e68:       0f be           out     0x3f, r0        ; 63
  12.     3e6a:       cd bf           out     0x3d, r28       ; 61
  13.     3e6c:       9a 87           std     Y+10, r25       ; 0x0a
  14.     3e6e:       89 87           std     Y+9, r24        ; 0x09
  15.         uint8_t *ptr;
  16.         ptr=&fi.extension;
  17.     3e70:       8a e9           ldi     r24, 0x9A       ; 154
  18.     3e72:       93 e0           ldi     r25, 0x03       ; 3
  19.     3e74:       98 87           std     Y+8, r25        ; 0x08
  20.     3e76:       8f 83           std     Y+7, r24        ; 0x07
  21.     3e78:       1a c0           rjmp    .+52            ; 0x3eae (compare_ext+0x56)
  22.         while (pgm_read_byte(str) != 0x00)
  23.         {
  24.                
  25.                 if(*ptr!=pgm_read_byte(str)) return 0; //nincs egyezés
  26.     3e7a:       ef 81           ldd     r30, Y+7        ; 0x07
  27.     3e7c:       f8 85           ldd     r31, Y+8        ; 0x08
  28.     3e7e:       20 81           ld      r18, Z
  29.     3e80:       89 85           ldd     r24, Y+9        ; 0x09
  30.     3e82:       9a 85           ldd     r25, Y+10       ; 0x0a
  31.     3e84:       9e 83           std     Y+6, r25        ; 0x06
  32.     3e86:       8d 83           std     Y+5, r24        ; 0x05
  33.     3e88:       ed 81           ldd     r30, Y+5        ; 0x05
  34.     3e8a:       fe 81           ldd     r31, Y+6        ; 0x06
  35.     3e8c:       84 91           lpm     r24, Z+
  36.     3e8e:       8c 83           std     Y+4, r24        ; 0x04
  37.     3e90:       8c 81           ldd     r24, Y+4        ; 0x04
  38.     3e92:       28 17           cp      r18, r24
  39.     3e94:       11 f0           breq    .+4             ; 0x3e9a <compare_ext+0x42>
  40.     3e96:       1b 86           std     Y+11, r1        ; 0x0b
  41.     3e98:       17 c0           rjmp    .+46            ; 0x3ec8 (compare_ext+0x70)
  42.                 ptr++;
  43.     3e9a:       8f 81           ldd     r24, Y+7        ; 0x07
  44.     3e9c:       98 85           ldd     r25, Y+8        ; 0x08
  45.     3e9e:       01 96           adiw    r24, 0x01       ; 1
  46.     3ea0:       98 87           std     Y+8, r25        ; 0x08
  47.     3ea2:       8f 83           std     Y+7, r24        ; 0x07
  48.                 str++;
  49.     3ea4:       89 85           ldd     r24, Y+9        ; 0x09
  50.     3ea6:       9a 85           ldd     r25, Y+10       ; 0x0a
  51.     3ea8:       01 96           adiw    r24, 0x01       ; 1
  52.     3eaa:       9a 87           std     Y+10, r25       ; 0x0a
  53.     3eac:       89 87           std     Y+9, r24        ; 0x09
  54.  
  55. uint8_t compare_ext(const char* str)
  56. {
  57.         uint8_t *ptr;
  58.         ptr=&fi.extension;
  59.         while (pgm_read_byte(str) != 0x00)
  60.     3eae:       89 85           ldd     r24, Y+9        ; 0x09
  61.     3eb0:       9a 85           ldd     r25, Y+10       ; 0x0a
  62.     3eb2:       9b 83           std     Y+3, r25        ; 0x03
  63.     3eb4:       8a 83           std     Y+2, r24        ; 0x02
  64.     3eb6:       ea 81           ldd     r30, Y+2        ; 0x02
  65.     3eb8:       fb 81           ldd     r31, Y+3        ; 0x03
  66.     3eba:       84 91           lpm     r24, Z+
  67.     3ebc:       89 83           std     Y+1, r24        ; 0x01
  68.     3ebe:       89 81           ldd     r24, Y+1        ; 0x01
  69.     3ec0:       88 23           and     r24, r24
  70.     3ec2:       d9 f6           brne    .-74            ; 0x3e7a (compare_ext+0x22)
  71.                
  72.                 if(*ptr!=pgm_read_byte(str)) return 0; //nincs egyezés
  73.                 ptr++;
  74.                 str++;
  75.         }
  76.         return 1; //sikeres volt
  77.     3ec4:       81 e0           ldi     r24, 0x01       ; 1
  78.     3ec6:       8b 87           std     Y+11, r24       ; 0x0b
  79.     3ec8:       8b 85           ldd     r24, Y+11       ; 0x0b
  80. }
  81.     3eca:       2b 96           adiw    r28, 0x0b       ; 11
  82.     3ecc:       0f b6           in      r0, 0x3f        ; 63
  83.     3ece:       f8 94           cli
  84.     3ed0:       de bf           out     0x3e, r29       ; 62
  85.     3ed2:       0f be           out     0x3f, r0        ; 63
  86.     3ed4:       cd bf           out     0x3d, r28       ; 61
  87.     3ed6:       cf 91           pop     r28
  88.     3ed8:       df 91           pop     r29
  89.     3eda:       08 95           ret



Akkor az -Os optimalizálásnál én azt látom hogy itt se pusholja az r25-öt, de nem is menti le sehova. Beletölt értéket, ÉSeli magával, de nem állítja vissza végül

  1. uint8_t compare_ext(const char* str)
  2. {
  3.     17c4:       9c 01           movw    r18, r24
  4.     17c6:       aa e9           ldi     r26, 0x9A       ; 154
  5.     17c8:       b3 e0           ldi     r27, 0x03       ; 3
  6.     17ca:       08 c0           rjmp    .+16            ; 0x17dc (compare_ext+0x18)
  7.         uint8_t *ptr;
  8.         ptr=&fi.extension;
  9.         while (pgm_read_byte(str) != 0x00)
  10.         {
  11.                
  12.                 if(*ptr!=pgm_read_byte(str)) return 0; //nincs egyezés
  13.     17cc:       8c 91           ld      r24, X
  14.     17ce:       89 17           cp      r24, r25
  15.     17d0:       11 f0           breq    .+4             ; 0x17d6 (compare_ext+0x12)
  16.     17d2:       80 e0           ldi     r24, 0x00       ; 0
  17.     17d4:       08 95           ret
  18.                 ptr++;
  19.     17d6:       11 96           adiw    r26, 0x01       ; 1
  20.                 str++;
  21.     17d8:       2f 5f           subi    r18, 0xFF       ; 255
  22.     17da:       3f 4f           sbci    r19, 0xFF       ; 255
  23.  
  24. uint8_t compare_ext(const char* str)
  25. {
  26.         uint8_t *ptr;
  27.         ptr=&fi.extension;
  28.         while (pgm_read_byte(str) != 0x00)
  29.     17dc:       f9 01           movw    r30, r18
  30.     17de:       94 91           lpm     r25, Z+
  31.     17e0:       99 23           and     r25, r25
  32.     17e2:       a1 f7           brne    .-24            ; 0x17cc (compare_ext+0x8)
  33.     17e4:       81 e0           ldi     r24, 0x01       ; 1
  34.                 if(*ptr!=pgm_read_byte(str)) return 0; //nincs egyezés
  35.                 ptr++;
  36.                 str++;
  37.         }
  38.         return 1; //sikeres volt
  39. }
  40.     17e6:       08 95           ret
(#) Topi válasza MaSTeRFoXX hozzászólására (») Aug 16, 2009 /
 
Pff. Ez inkább fordító bug szerintem mint felhasználói hiba. De legalább mostmár látod / látjuk akkor a probléma tényleges, igazi okát.
(#) MaSTeRFoXX válasza Topi hozzászólására (») Aug 16, 2009 /
 
Hát, akkor ezzel sajnos nem sokat lehet tenni mint együtt élni vele, és erre gondolni amikor makacskodik.
Vagy szépen megfogalmazni egy emailt és írni a fejlesztőknek.

Amúgy én nagyon tudom utálni az ilyen dolgokat, amikor az ember csinálna valamit de attól kell félnie hogy mikor esik be egy olyan dolog ami egyszerűnek tűnik de nem tud túllépni rajta mert olyan hiba jelentkezik.

Amúgy ilyenkor oké hogy nyílt forráskód ezek előfordulhatnak, de vajon egy fizetős imagecraft, codevision vagy egyéb fejlesztőkörnyezetnél előfordulhatnak-e ilyen hibák?
(#) Sir-Nyeteg hozzászólása Aug 16, 2009 /
 
C nyelven van olyan parancs, mint assembler-ben a nop-nak felel meg?
(#) gtk válasza Sir-Nyeteg hozzászólására (») Aug 16, 2009 /
 
  1. asm volatile("nop");
(#) Topi válasza MaSTeRFoXX hozzászólására (») Aug 16, 2009 /
 
Idézet:
„de vajon egy fizetős imagecraft, codevision vagy egyéb fejlesztőkörnyezetnél előfordulhatnak-e ilyen hibák?”


Pár sorral feljebb, magad adtad meg erre a választ

Idézet:
„Hozzászoktam a rövid bascomos pályafutásom alatt hogy mindig kel egy másik útnak lennie , ott elég sokszor előfordult hogy egyszerű dolog nem ment...”
(#) roleeka hozzászólása Aug 16, 2009 /
 
nekem notebookon Win 7 RC1 van. Azzal szerintetek megy a programozó?
Következő: »»   141 / 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