Bitte um kurze Hilfe beim UART: Array-Problem [uart_snd_buffer++]

Gast #1859854
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?
#1859863
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)

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