Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   962 / 1203
(#) kissi válasza bbb hozzászólására (») Júl 18, 2017 /
 
A kiíró rutinod biztos a ROM-ból kereste az adatokat... ha nem írod a const-ot, akkor a RAM-ba tette (?) és olvasni a ROM-ból (?) olvasott!

A C a tömböt pointerként kezeli ( hiszen az is !), ezért megy "simán" is !
(#) bbb válasza kissi hozzászólására (») Júl 18, 2017 /
 
Az alap felvetésem az volt, hogy nem sikerül ilyen nagy tömböt megcímeznie, ezért kell pointerrel ugrálni...

De mint most kiderült, a probléma, hogy ha nem konstans a tömb, akkor az adatterületre kerül, ha pedig konstans, akkor a programterületre és onnan jól éri el.
Gondoltam most kap egy kis "erőszakolást", így a konstans tömböt meghagyva készítettem egy másikat is, majd ez utóbbit (ami az adatterületen van) feltöltöm a programterületen lévő tömbből.
Ekkor ugyan úgy hibás adatokat ír ki, szóval arra kellene rájönnöm, vajon mi lehet a nyűgje az adatterülettel (létezhet, hogy a pic ezen része meg van makkanva?).
(#) kissi válasza bbb hozzászólására (») Júl 18, 2017 /
 
Szerintem azt kell megnézned, hogy a "WriteI2C1" függvény milyen memóriaterületet használ ( honnan tudná, hogy pl. egy 0xf0 cím az most RAM vagy ROM területre mutató pointer ?!), ez a doksiban kellene, hogy benne legyen...!

Nem hiszem, hogy baja lenne a PC memóriájának... !
A hozzászólás módosítva: Júl 18, 2017
(#) killbill válasza bbb hozzászólására (») Júl 18, 2017 /
 
Alljunk mar meg egy szora! Eloszor azt mondtad, hogy nem kuld ki semmit az I2C vonalon, ami arra enged kovetkeztetni, hogy meg sem hivja a WriteI2C1() fuggvenyt. Most meg azt mondod, hogy nem jo az adat, amit kikuld. Hat, akkor most mi az igazsag? Egyebkent meg, ha megnezed az (dis)assembly listajat a leforditott programodnak, akkor minden kerdesedre valaszt kapsz, ha ismered a PIC utasitaskeszletet.
(#) bbb válasza killbill hozzászólására (») Júl 18, 2017 /
 
Először még nem küldött ki semmit. Aztán volt haladás, mikor már felfogta, hogy a tömbből kell kiadnia valamit. A jelenlegi próbánál ott tartok, hogy ha konstans a tömb, vagyis a programterületen van, akkor kirakja, amit kell, ha az adatterületen, akkor meg nem megfelelő adat lesz.

Szóval az igazság ott van, hogy nem álltam meg egy pontnál és vártam a sültgalambot, hanem mindig az utolsó hozzászólásom az aktuálisan igaz.
(#) pajti2 válasza bbb hozzászólására (») Júl 18, 2017 /
 
A 8 bites pic-ek esetében külön memória bankok vannak, és csak úgy tudsz címezni nagyobb memória tömböt, hogy a felsőbb bitek esetén aktualizálni kell egy másik bankot. Ha teljesen a C fordítóra bízod a tömb elérését, tudnia kellene automatikusan memória bankot váltani. A jelek szerint azt nem teszi meg. Le kellene tisztázni egy lehető legegyszerűbb projectet, legyártani belőle a lista file-t, hogy tisztán látható legyen.

Most nem tudom, van-e hibalistája az aktuális xc8-nak valahol. Szerepel az a jelenség az ismert hibák között? Ha igen, lehet ott javasolt workaround a hibára.
(#) bbb válasza pajti2 hozzászólására (») Júl 18, 2017 /
 
Igen, ezzel a bankolással tisztában vagyok, de nem gondoltam volna, hogy nem képes az XC8 normálisan kezelni ezt a dolgot. A hibalistát még nem sikerült megtalálni, s ami furcsa, hogy más nemigen futott még bele ugyan ebbe a problémába (vagy csak én nem gugliztam eleget, hogy megtaláljam).
Minden esetre feladni nem fogom, legfeljebb átigazítom a kódot úgy, hogy jó legyen (akár úgy is, hogy beleférjek egy-egy bankba a tömbökkel és több tömbből rakom össze). Érdekes élmény lesz az már biztos.
(#) pajti2 válasza bbb hozzászólására (») Júl 18, 2017 /
 
Kotord fel a pic adatlapjában a memória bankokat, hány van belőle, milyen hosszúak, és kicsike ram tömböket gyárts, amik nem lépik át azt a korlátot. Aztán jó szórakozást a kezelésükkel. Vagy válts 32 bitre, és ott nulla problémád lesz egyben látni a ram tömböt. 32 biten már nincsenek külön bankok. Amelyik tetszik.
(#) usane válasza pajti2 hozzászólására (») Júl 19, 2017 /
 
Melyik PIC-ről is beszélünk? Van benne elég RAM?
Hoppsz, nem neked akartam címezni.
A hozzászólás módosítva: Júl 19, 2017
(#) Hp41C válasza usane hozzászólására (») Júl 19, 2017 /
 
?.?.?.... Nem értem a kérdést.
Hozzászólásomra feltöltötte az egész projectet. Csak nekem sajnos nincs tapasztalatom a XC8 -cal (illetve a tapasztalataim miatt már nyugdíjaztam) és az MpLabX -el.
18F25J50 -ről van szó, 3776 byte RAM van benne.
A fordító használja a dataBIGRAM szegmenst, a pic18_i2c.X\dist\default\production\pic18_i2c.X.production.lst szerint szépen átmásolja a program memóriában tárolt kezdeti értéket a tömbbe. A tömb elemének elküldése után a pointert 16 bitesen növeli.
  1. ; Initialize objects allocated to BIGRAM (1024 bytes)
  2.   1066                           ; load TBLPTR registers with __pidataBIGRAM
  3.   1067  0078FE  0EF8                    movlw   low __pidataBIGRAM
  4.   1068  007900  6EF6                    movwf   tblptrl,c
  5.   1069  007902  0E7B                    movlw   high __pidataBIGRAM
  6.   1070  007904  6EF7                    movwf   tblptrh,c
  7.   1071  007906  0E00                    movlw   low (__pidataBIGRAM shr (0+16))
  8.   1072  007908  6EF8                    movwf   tblptru,c
  9.   1073  00790A  EE0A  F0C0              lfsr    0,__pdataBIGRAM
  10.   1074  00790E  EE14 F000               lfsr    1,1024
  11.   1075  007912                     copy_data0:
  12.   1076  007912  0009                    tblrd           *+
  13.   1077  007914  CFF5 FFEE               movff   tablat,postinc0
  14.   1078  007918  50E5                    movf    postdec1,w,c
  15.   1079  00791A  50E1                    movf    fsr1l,w,c
  16.   1080  00791C  E1FA                    bnz     copy_data0
  17.   1081  00791E  50E2                    movf    fsr1h,w,c
  18.   1082  007920  E1F8                    bnz     copy_data0
  19.   1083  007922                     end_of_initialization:
  20. ...
  21.   1339                           ;main.c: 153: for(column=0;column<=127;column++)
  22.   1340  007BA4  0E00                    movlw   0
  23.   1341  007BA6  6E0C                    movwf   main@column+1,c
  24.   1342  007BA8  0E00                    movlw   0
  25.   1343  007BAA  6E0B                    movwf   main@column,c
  26.   1344  007BAC  500C                    movf    main@column+1,w,c
  27.   1345  007BAE  0A80                    xorlw   128
  28.   1346  007BB0  0F80                    addlw   -128
  29.   1347  007BB2  0E80                    movlw   128
  30.   1348  007BB4  B4D8                    btfsc   status,2,c
  31.   1349  007BB6  5C0B                    subwf   main@column,w,c
  32.   1350  007BB8  B0D8                    btfsc   status,0,c
  33.   1351  007BBA  D018                    goto    l69
  34.   1352                          
  35.   1353                           ;main.c: 154: {
  36.   1354                           ;main.c: 155: WriteI2C1(*buf);
  37.   1355  007BBC  C007  FFD9              movff   main@buf,fsr2l
  38.   1356  007BC0  C008  FFDA              movff   main@buf+1,fsr2h
  39.   1357  007BC4  50DF                    movf    indf2,w,c
  40.   1358  007BC6  EC94  F03C              call    _WriteI2C1
  41.   1359  007BCA                     l816:
  42.   1360  007BCA  A4C7                    btfss   4039,2,c        ;volatile
  43.   1361  007BCC  D003                    goto    u350
  44.   1362  007BCE  6A06                    clrf    ??_main& (0+255),c
  45.   1363  007BD0  2A06                    incf    ??_main& (0+255),f,c
  46.   1364  007BD2  D001                    goto    u358
  47.   1365  007BD4                     u350:
  48.   1366  007BD4  6A06                    clrf    ??_main& (0+255),c
  49.   1367  007BD6                     u358:
  50.   1368  007BD6  50C5                    movf    4037,w,c        ;volatile
  51.   1369  007BD8  0B1F                    andlw   31
  52.   1370  007BDA  1006                    iorwf   ??_main,w,c
  53.   1371  007BDC  0900                    iorlw   0
  54.   1372  007BDE  A4D8                    btfss   status,2,c
  55.   1373  007BE0  D7F4                    goto    l816
  56.   1374                          
  57.   1375                           ;main.c: 157: *buf++;
  58.   1376  007BE2  4A07                    infsnz  main@buf,f,c
  59.   1377  007BE4  2A08                    incf    main@buf+1,f,c
  60.   1378  007BE6  4A0B                    infsnz  main@column,f,c
  61.   1379  007BE8  2A0C                    incf    main@column+1,f,c
  62.   1380  007BEA  D7E0                    goto    L1
  63.   1381  007BEC                     l69:
A hozzászólás módosítva: Júl 19, 2017
(#) usane válasza Hp41C hozzászólására (») Júl 19, 2017 /
 
A hozzászólásokból nem derült ki a típus, a mainben sem láttam, elindítani meg nem volt időm, ezért kérdeztem mivel játszik.
(#) pajti2 válasza Hp41C hozzászólására (») Júl 19, 2017 /
 
A tblptr a program memóriához fér hozzá (konstans tömb esetén), az nem ram elérés. "DS39931D-page 81" / "6.1.6.2 Table Reads" adatlap
(#) killbill válasza pajti2 hozzászólására (») Júl 19, 2017 /
 
Es ki beszelt itt a tblptr-rol? Hp41C csak annyit mondott, hogy a startup kod atmasolja a ROM-bol a RAM-ba a tombot, majd a main() onnan olvassa fel (es kuldi ki I2C-n). A pointer, amirol szo van (main@buf) egy 16 bites valtozo. Ezt mondtam kb. 12 HSZ-szel ezelott, hogy az assembly lista alapjan nincs semmi baj a koddal, inkrementalja a buf nevu valtozot. Es elotte meg lathatoan betolti az FSR2-be, es azt hasznalva veszi fel a tomb elemeit a RAM-bol.
(#) Hp41C válasza pajti2 hozzászólására (») Júl 19, 2017 /
 
Köszönöm, kívülről tudom már évek óta, főleg az utasításokat...

A WriteI2C1() után nem kellene megvizsgálni az ACK bit értékét? Hátha azért nem megy, mert a slave NACK -ot küld...
A hozzászólás módosítva: Júl 19, 2017
(#) bbb válasza Hp41C hozzászólására (») Júl 19, 2017 /
 
Szia!

Folyamatosan néztem a logic programmal, hogy mi történik egyik, illetve másik esetben.
"Sajnos" a slave ACK-t küld vissza akkor is, amikor hülyeséget küld neki a program, és akkor is, amikor jó adatokat. A különbség a jó eredmény és a rossz eredmény között ott van, hogy konstans a tömb és így a programterületre kerül (ekkor szépen kimegy a tömb értéke, csak ugye használhatatlan, mert nem tudom módosítani), vagy nem konstans és az adatterületre kerül (ekkor a tömb nulladik elemét küldi ki egyfolytában és olyan, mintha nem növelné az értékét a pointernek).
A konstans tömb esetében teljesen mindegy, hogy direkt számolással címzem ki az elemet, vagy pointert növelgetek, mindkét esetben jó lesz az eredmény.
A nem konstans tömb esetén ha pointert használok, amit ráállítok a tömb nulladik elemére, akkor azt küldi ki és megjön mindig az ACK, ha pedig direkt kicímezném számolással, akkor össze-vissza értékeket, viszont azt két kikapcsolás között nem változtatja, hogy mi lesz ez az össze-vissza halom, de ezekre is megjön az ACK minden esetben.
Keresgéltem manuálok, leírások tucatjaiban a bigdata történetre, de látszólag az xc8 ezt automatikusan kezeli (a C18-hoz talált linkerben átírni a dataszekciót és pragma utasítással hivatkozni hova is kerüljön dolog itt nem ment). Ha a fordításkor a reportnál bekapcsolom a psect mutatása opciót, akkor szépen meg is mutatja, hogy ő elkészítette ezt a bigdata részt.

Közben kíváncsiságból készítettem olyan (nem konstans) tömböt, ami nem ilyen nagy, mindössze 10 elemből áll. Az se működött jól a kódon belül! Holnap teljesen új lappal kezdek és a tömböket kipróbálom önmagukban (megbillegtetem velük a RA3, RA4 lábakat), hogy melyikkel működik, melyikkel nem, s jobb híján ha nem akar működni, akkor feldobom a labdát a microchip fórumon is, hátha...
(#) pajti2 válasza killbill hozzászólására (») Júl 19, 2017 /
 
Oké, akkor elkezdem nemérteni az egészet @bbb azt írta a sima ram tömb kezelés kipróbálásáról, hogy nem működik.
(#) Hp41C válasza bbb hozzászólására (») Júl 19, 2017 /
 
A feltöltött verzióról:
- Nincs a forrásban a konfigurációs regiszterek beállítása. Default beállításnál az utasításkiterjesztés és a watchdog aktív.
- Működik a nagy tömb kezelése, csak van egy apró hiba a programban, a main.c 157. sorában:
  1. *buf++;

Mit is kellene csinálnia ennek a sornak és mit csinál helyette?
A buf által megcímzett adatot (a buffer[0] -t) növeli ahelyett, hogy magát a pointert növelné...
  1. buf++;

Ez már a pointert növeli.
Sajnos nincs I2C tesztelésére lehetőségem. A régi MpLab 8.90 beépített szimulátora buktatta le a hibát. Sajnos azzal sem lehet az I2C rutinokat szimulálni.
(#) rolandgw válasza Hp41C hozzászólására (») Júl 19, 2017 /
 
Szerintem a buf-ot így is léptetni kéne, mert azonos a precedencia, jobbról-balra történik a kiértékelés és a léptetés van először értelmezve, de utólag végrehajtva.
A megcímzett adatot így növelné:
  1. (*buf)++

Lehet, hogy tévedek, nem ellenőriztem.
(#) killbill válasza Hp41C hozzászólására (») Júl 19, 2017 /
 
Jelen esetben a *buf++ pontosan azt csinalja, mint a buf++. Megnoveli buf-ot eggyel. Igazabol nem is ertem, hogy a kod miert nem WriteI2C1(*buf++);
(#) bbb válasza killbill hozzászólására (») Júl 20, 2017 /
 
Mivel ebben a mikor növeljük és mikor a mutatott értéket növeljük dologban én se voltam biztos, ezért megkerestem ezt a leírást a pointerekről.
Nemsokára nekilátok a minimálkódnak, hogy vajon ott hogyan viselkedik a tömb, s utána kiderül mi történik.

Egyébként volt egy sokkal viccesebb hiba is a korábban mellékelt kódban, méghozzá, hogy a tömb kezdőelemét a pointernek egy ciklussal kijjebb adtam meg, mint kellett volna, így a végtelenségig (túlcsordulásig) növekedett volna, mert sose áll vissza az első elemre.

A most mellékelt kódban viszont az az izgalmas, hogy ha tényleg csak annyit változtatok, hogy a tömb hova kerül (const kulcsszó bekerül elé, vagy sem), akkor látszik a probléma.
(#) bbb válasza bbb hozzászólására (») Júl 20, 2017 /
 
Ráadásul rosszul is mondom a tünetet. Most a kommunikációt figyelve azt látom, hogy nem a nulladik elemet írja ki, hanem mindig 0x8F kerül ki (0x00 lenne a tömb első eleme).
(#) Hp41C válasza bbb hozzászólására (») Júl 20, 2017 /
 
Nem vagyunk hivatásos hibavadászok. Állítsd be a fejlesztődön a szimulátort és kövesd végig a programodat saját magad. Egyrészt sokkal gyorsabb lesz, másrészt látni fogod a változásokat sorról sorra. Ha ez sem segít, a PICkit3 -mal is van mód a program követésére....
Érdemes továbbá a fordított kódot is nézegetni a Program memória ablakban a Symbolic nézettel vagy a lista állományban pic18_i2c.X\dist\default\production\pic18_i2c.X.production.lst.
Egyébként a legutóbbi változat már nem tartalmazza a buffer adatainak a program tárból a RAM -ba való másolását. Így nem is tűnik rossznak, hogy nem a várt adatot írja ki, hanem a RAM -ban találtat. A konstansnak megadott tömb esetén azért működik, mert nem kell másolni.
Egyébként akkor az I2C rutinok működnek? Nem lehet, hogy a Watchdog reset közbeszólt? Az inicializáló adatmásolás ideje elég hosszú.

Én vettem a fáradságot, MpLab 8.90 -nel végiglépkedtem a kiküldő ciklust...
A hozzászólás módosítva: Júl 20, 2017
(#) pajti2 válasza killbill hozzászólására (») Júl 20, 2017 / 1
 
Még ha a standard meg is határozza, hogyan kell a "*buf++"-nak viselkednie, létezik az alkalmazott gyakorlat is. Amennyire elfuserált fordító program fejlesztések vannak a mai világban, a hócipő sem szeret megbízni abban, hogy az mindig úgy fog működni, ahogyan kellene. Jobb explicite szétszedni két statement-re, ha csak nem akarsz valamelyik verzió váltásnál extra munkát csinálni magadnak csak azért, hogy néhány text karaktert megspórolj a forráskódban, ami egyébként nulla különbséget fog eredményezni a végleges gépikódban. Nagyon fiatalok biztos szeretnek azzal bravúrkodni, de aztán majd fájni is fog a fejük miatta párszor, és leszoknak róla.
(#) killbill válasza pajti2 hozzászólására (») Júl 20, 2017 /
 
Szerintem a standard ilyen merteku megserese meg a mikrocsipnek sem fer bele, bar az o 8 bites forditojuk tenyleg csapnivalo. Nem jobb szetszedni, mert ha a fordito rendesen van megcsinalva, akkor rovidebb kodot eredmenyez, ha egybeirod. En 30 eve programozok C-ben, es csak biztatni tudok minden nagyon fiatalt es idost is, hogy hasznalja ki a C nyelv adottsagait, hogy szebb, rovidebb, atlathatobb, gyorsabb programokat irjon. A 30 ev alatt rengeteg C forditval dolgoztam mar, de ilyen alapveto dolgot egy sem rontott el. Ettol nem kell tartani.
(#) killbill válasza bbb hozzászólására (») Júl 20, 2017 /
 
Ha ennek a problemanak a vegere akarsz jarni, akkor csak az fog hatekonyan segiteni, ha megnezed a C programbol forditott assembly kodot.
(#) killbill válasza bbb hozzászólására (») Júl 20, 2017 /
 
Roppant furcsa, ugyanis ebbol a verziobol hianyzik az a resz, ami bemasolja a FLASH-bol a RAM-ba a 'buffer' valtozo tartalmat. Ezt hogy sikerult? A .lst file 1 masodperccel kesobb keszult, mint a main.c, tehat nem a forras valtozott utobb. Valtoztattal valami beallitast a forditasi opciok kozott?
Feltehetnel egy olyan .zip-et, amiben const van es jol mukodik.
(#) pajti2 válasza killbill hozzászólására (») Júl 20, 2017 /
 
Szerintem a C fordítók eléggé szépen szanaszéjjel vannak már optimalizálva ahhoz, hogy ezt a két sort:
  1. z= *p++;
  2. z=*p;p++;
ugyan arra a kódra fordítsák végül, és behúzzák az automata memória pointer inkrementálás funkciót is, ahol az támogatott. _Ha_ tényleg normális az a C fordító. Ha pedig nem, akkor jobb is szétszedni a műveletet két külön statement-re, mert az új verziói már hibásak is lehetnek annak a fordítónak.

A mikrocsip - és mindegyi másik is - csinál a mai világban sokkal őrültebb dolgokat is. Szerintem most simán bele tud férni, hogy elszúrjanak egy másodlagos precedencia szabályt. (És majd azt mondják róla, hogy az nem a standard megsértése, hanem a felújítása - példának okáért. Vagy elismerik hibának, viszont soha az életbe ki nem fogják javítani, míg végül mindenki hozzászokik, alkalmazkodik, végül standard lesz belőle )
A hozzászólás módosítva: Júl 20, 2017
(#) bbb válasza killbill hozzászólására (») Júl 20, 2017 /
 
Szia!

Itt bent van a const és jól működik (azt rajzolja ki a kijelző, amit kell). A Hp41C által említett watchdog timert kikapcsoltam, illetve a debughoz szükséges bitet is átírtam, így most tudom szimulálni, de a kód többi részén nem változtattam. És igen, biztos jól működik az I2C, minden üzenet, amit a kijelzőnek küldök, visszakapja az ACK-t (hogy ezt megmutassam, ezért csatoltam legutóbb a Salea Logic-ból kimentett, értelmezett forgalmat).
Az XC8 linker opciói között van egy "Initialize data" opció, azt próbáltam ki, hogy mi történik, ha bekapcsolom, ez okozhatta a kérdésedben felvetett jelenséget.
A hozzászólás módosítva: Júl 20, 2017
(#) killbill válasza pajti2 hozzászólására (») Júl 20, 2017 /
 
Az igaz, hogy egy jo fordito a ket fenti sort ugyanarra forditja (felteve, hogy 'p' nem volatile), de attol meg nem kell slendriannak lenni, vagy mondkjuk úgy, C-ben érdemes C-ül programozni és nem BASIC-ben. Es az operatorok precedenciaja az baromira nem egy masodlagos szabaly. Ez egy alapszabaly, amit nem sertenek meg még a mikrocsip forditok sem. Jo, hogy nem azt mondod, hogy lassan az "a + b * c" kifejezesben inkabb zarojelezzuk be a b * c-t, mert ezt is elronthatjak a forditok. Persze az is igaz, hogy a 8 bites PIC fordito nem reentrans kodot general, ami alapjaiban ellenkezik a C nyelvvel, de ezt irja is a fordito dokumentacioja. Persze innentol kezdve nem is lehetne C-nek hivni, mert ez lenne a C nyelv masik nagyon fontos tulajdonsaga.

De, hogy valami ertelme is legyen ennek a beszelgetesnek, ha megnezed bbb altal leforditott kodot, akkor lathatod az assembly listaban, hogy nem rontja el a *buf++ kifejezest, jot fordit belole.
(#) Hp41C hozzászólása Júl 20, 2017 / 1
 
Megint nagyon elkalandoztatok...
Ahogy megírtátok már egy oldallal előbb, a pointer növelése rendben megtörténik a disassembly lista szerint. Inkább a C sorban kifogásoltam az indirekt elérés szimbólumát, ami teljesen felesleges abban a sorban. A fordító szépen el is hagyta az FSR beállítását és az indirekt olvasást...
Egyáltalán nem a tömbkezeléssel lesz a probléma, hanem inkább azzal, hogyan is van a buffer deklarálva. Szerintem a csomagban található C forrás és az lst állomány nem fedi egymást. Tudni kellene mi is történik, miért maradt ki a buffer inicializálása a második csomagbeli lst -ből.
Következő: »»   962 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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