Forum: Mikrocontroller und Digitale Elektronik Bitte um kurze Hilfe beim UART: Array-Problem [uart_snd_buffer++]


von Fritz (Gast)


Lesenswert?

Morgen, ich bräuchte mal kurz eine kurze Hilfe:

Ich möchte einen char-Puffer interruptgesteuert versenden...

Code-Ausschnitt:
1
char uart_snd_buffer[100];
2
uint8_t snd_counter = 0;
3
4
void send_uart_character (char *send_buffer)
5
{
6
  UCA0TXBUF = *send_buffer;
7
}
8
9
#pragma vector = USCIAB0TX_VECTOR
10
__interrupt void usciab0_tx_vector (void)
11
{
12
  if (IFG2 & UCA0TXIFG) // USCIA0 transmit buffer interrupt
13
  {
14
    if (snd_counter)
15
    {
16
      UCA0TXBUF = uart_snd_buffer++;
17
      snd_counter--;
18
    }
19
    else
20
    {
21
        IFG2 &= ~UCA0TXIFG;                 // Clear UCA0 transmit flag
22
    }
23
  }
24
}

Meckern tut der Compiler beim...
1
UCA0TXBUF = uart_snd_buffer++;
...und sagt mir: "expression must be a modifiable value"

Das Array ist doch eigentlich nichts anderes als ein String, oder?

Und bei nem String kann ich ja auch schreiben: *string++


Kann mir einer sagen, worans liegt?

von Fritz (Gast)


Lesenswert?

Aufrufen tue ich es mit:
1
send_uart_character (uart_snd_buffer);

von Klaus W. (mfgkw)


Lesenswert?

Ein Feld ist nicht (wie oft behauptet wird) gleich einem Zeiger,
sondern nur in vielen Punkten sehr ähnlich.
Insbesondere ist es am ehesten mit einem konstanten Zeiger
vergleichbar, man kann ihn nicht ändern.
1
  char    arr[100];
2
  char   *p = arr; // kompatibel genug zum Zuweisen
3
  p++;    // ok, p kann geändert werden
4
  arr++;  // geht nicht, weil arr konstant ist (nicht der Inhalt von arr)

von Fritz (Gast)


Lesenswert?

Alles klar, jetzt klappts! Vielen Dank!

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.