Forum: Compiler & IDEs Array[i] = i will nicht


von Herr Ratlos (Gast)


Lesenswert?

Hi,

sorry für den etwas allgemeinen Titel.

Ich habe nun vor mein erstes Array in C zu verwenden. Es ist ein uint8_ 
t Array mit 256 Elementen.
Das ganze will ich fortlaufend hochzählen und über den UART ausgeben.

Also im Grunde
Array[i] = i;
i++;

Leider tut der UART dann aber nix mehr...

Testweise auch ein j zu benutzen dass dann  Arr [i] = j macht 
funktioniert auch nicht.


Was mache ich falsch ?


bitte nicht hauen ...

1
...
2
3
uint8_t _DMX_Arr [255];
4
uint8_t i;
5
6
...
7
8
int main (void)
9
{
10
11
        i = 0;
12
  
13
  
14
  while (i<256)
15
  {
16
    _DMX_Arr[i] = i;
17
    ++i;
18
    
19
  
20
  }  
21
  
22
  
23
  setUARTtransmit();
24
  
25
  while (1)
26
  {
27
    i = 0;
28
    
29
    while (i<256)
30
    {
31
      while (!(UCSRA & (1<<UDRE)))
32
      {  }    
33
      UDR = _DMX_Arr[i];
34
      ++i;
35
      
36
    }
37
  }  
38
}


Danke

von B. A. (bjk)


Lesenswert?

mach  das array auf 256 wörter gross.

von Tobias W. (hacker-tobi)


Lesenswert?

Weil das Program so nicht laufen kann. Du kannst keine Funktion 
innerhalb von main deklarieren und definieren, wie du es hier tust.

richtiger wäre was in der Art

void funktion (void);

main
{
...
funktion();
}

void funktion ()
{
...
}

von g457 (Gast)


Lesenswert?

> uint8_t i;
[..]
> while (i<256)

..Endlosschleife ∗hust∗

HTH

von MWS (Gast)


Lesenswert?

Herr Ratlos schrieb:
> while (i<256)

I wird immer kleiner als 256 sein, damit endet das while nie.

von Tobias W. (hacker-tobi)


Lesenswert?

hab mich verlesen, vergiß den Beitrag von mir!

richtig ist

while (i<255)

wie schon gesagt wurde...

von DirkB (Gast)


Lesenswert?

denn der Maximalwert eines uint8_t ist ...

von Noname (Gast)


Lesenswert?

Bitte vollständigen, kompilierbaren Code posten.
Gegebenenfalls den Code so weit reduzieren, das der Fehler noch 
auftritt.

Du dimensionierst ein Array von 255 Elementen, greifst aber auf das 
Element mit dem Index 255 zu, welches das 256te Element ist.
Falls der Code stimmt, so ist das zufällig i, das mit seinem momentanen 
Wert gesetzt wird, so das es nicht auffällt. Falsch ist es trotzdem.

Der Code scheint abgesehen davon korrekt zu sein, aber wie gesagt, ist 
er ja nicht vollständig, so das das Problem noch woanders liegen kann.

Bitte denke Dir das nächstemal einen aussagekräftigen Titel aus, anstatt 
Dich für einen anderweitigen Titel zu entschuldigen.

Es fehlt im Zusammenhang eine Beschreibung, ob Du, falls Du hier kein 
Array in einer Schleife ausgibst, etwa i selbst auf dem UART erfolgreich 
ausgeben kannst. So kann es auch an der UART-Initialisierung liegen.

von Noname (Gast)


Lesenswert?

Das mit dem uint8_t ist natürlich auch ein Punkt. Hab ich ganz 
übersehen.

von Herr Ratlos (Gast)


Lesenswert?

... 255

hast ja recht...

alter Falter seid ihr schnell...

von Herr Ratlos (Gast)


Lesenswert?

Es funktioniert jetzt... Danke

Den Fehler konnte ich vorher auf diese Passage eingrenzen!

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.