Forum: Compiler & IDEs Simple Pointer Frage


von Simon (Gast)


Lesenswert?

1
// lng = laenge in 1 2 4 byte
2
static void _read_reg(WORD reg, DWORD* data, BYTE lng) {
3
4
    ADE_CS_IO = 0;
5
6
   
7
    while (lng--) {
8
        ADE_SSPBUF = (BYTE)0x00;
9
        WaitForDataByte();
10
        *data[lng] = ADE_SSPBUF;  <------
11
    };
12
13
    ADE_CS_IO = 1;
14
15
}


Ich habe ein DWORD* data und möchte aus dem 1 byte ADE_SSPBUF
der reihe nach (MSB ->LSB) nach *data schreiben.

Wie müsste das richtig aussehen?

von Simon (Gast)


Lesenswert?

ok ich habs
1
 ((BYTE*)data)[lng]  = (BYTE)lng;

Man man man bin ich eingerostet

von Peter II (Gast)


Lesenswert?

Simon schrieb:
> ok ich habs
>  ((BYTE*)data)[lng]  = (BYTE)lng;
>
> Man man man bin ich eingerostet

was nicht ganz ok ist, dann es Funktion nicht auf big und Little edian 
Systemen.
1
   *data = 0;
2
   while (lng--) {
3
        ADE_SSPBUF = (BYTE)0x00;
4
        WaitForDataByte();
5
        *data =  *data << 8;  
6
        *data |=  ADE_SSPBUF; 
7
    };

von Falk B. (falk)


Lesenswert?

1
// lng = laenge in 1 2 4 byte
2
static void _read_reg(WORD reg, DWORD* data, BYTE lng) {
3
4
    ADE_CS_IO = 0;
5
    uint8_t *p = (uint8_t*)data;
6
7
    while (lng--) {
8
        ADE_SSPBUF = (BYTE)0x00;
9
        WaitForDataByte();
10
        p[lng] = ADE_SSPBUF;
11
    };
12
13
    ADE_CS_IO = 1;
14
15
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.