[elektro] pic32 C32

hg12345 hg12345 at freemail.hu
Fri Mar 20 21:01:51 CET 2015


Hi, Az elképzelés jó, így kéne kezelni.De második rész hibás, a helyes megoldás a következő lenne:unsigned int *pUART5RXarray[10];és for (int i=0;i++;i<10)  pUART5RXarray=&UART5RXbuff[i][0];ez minden buffer tömb kezdő pointerét adná meg..... ------------------------------------------------------------------------Próbáld meg ellenőrizni, hogy átadja a pointert unsigned char *p=UART5RXbuff;       ezzel kapsz a tömbre mutató pointertunsigned char value = *p;                    ez egyenértékű UART5RXbuff[0][0]-val. ill. lehet próbálkozni mindenféle trükkös megadással is ((unigned char *) UART5RXbuff)[0][0] persze ez ugyan ez csak pointerre vissza vezetve :-)((unigned char *) p)[0][0] Szerintem nézd meg a C kifejtést és asm részt, mert a tömb bazis pointerével lehet a probléma, ha megfelelően van beállítva fordító, akkor megadja a tömb címét a listákban. Ill. még egy probléma lehet, ha úgy érzi, hogy nem használod a tömböt, akkor nem is hivatkozik rá. Ha ez a hiba akkor használj "volatile"-t egy próbát megér, de kicsi az esélye... ----------------------------------------------------------------------Gondolom ez egy 10 többől álló buffer valamilyen kommunikációhoz. Szerencsésebben jársz programozás szempontjából, ha buffereket "önállóan" kezeled és pointeresen adod át a feldolgozóknak, persze lehet egy folytonos memória mezőben. Átadáskor a pointer érvényességet is jelölhet *p=NULL érvénytelen :-)32 biten kevesebb utasítás és kisebb hely egy 32 bites pointer, mint egy tömb indexelés, ha jó a fordító úgyis pointert csinál belőle. :-) Egy 8 bites indexet ugyan úgy 32 biten tárol a fordító, ha nem utasítod másra (__packed). Ha igen akkor meg lassabb mert beolvasáskor helyére teszi, és felesleges biteket maszkolja.  #define UARTBUFFERLENGHT 100#define UARTBUFFERCOUNT 10typedef unsigned char UARTbuf_t[UARTBUFFERLENGHT ];typedef  UARTbuf_t UARTbufArray_t[UARTBUFFERCOUNT]; persze szerencsésebb használni az uint8_t a stdint.h-ból, mint a unsigned char-t, hordozhatóság miatt. Elnézést a belekontárkodásért. Üdv 
Pipi <lista at puzsar.hu> írta:
>Hali!
>Kéne egy kis segítség
>
>az egyik fájlban van
>unsigned char UART5RXbuff[10][100]; , szépen feltöltöm adattal
>
>a másik fájlban deklaráció:
>extern unsigned char UART5RXbuff[10][100];
>ha itt egy változóba kiteszem
>value=UART5RXbuff[0][0]; akkor itt szemetet olvas, a watch ablakban meg jót látok
>
>rosszul deklarálom, vagy mi a nyűg?
>extern unsigned char *UART5RXbuff[100]; ha igy deklarálom akkor exception lesz belőle olvasáskor
>
>
>
>
>
>-- 
>Pipi
>http://www.puzsar.hu
>
>-----------------------------------------
>          elektro[-flame|-etc]


More information about the Elektro mailing list