Simple Pointer Frage

Gast #3995887
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?
Gast #3995934
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
    };
#3995937
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren