AVR - Verlust von Wert in Array

OP #4379620
Hallo,

Ich muss Werte von einem Array in einen anderen "kopieren".
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <stdlib.h>
4

5
#include "uart.h"
6

7
uint8_t pwm[8];
8

9
void update() {
10

11
  char s_val[3];
12

13
  for ( uint8_t i = 0; i < 8; i++ ) {
14

15
    itoa(pwm[i], s_val, 10);
16
    sendString(s_val);
17
    sendString("\r\n");
18

19
  }
20

21
  sendString("\r\n");
22
  sendString("\r\n");
23

24
}
25

26
int main(void) {
27

28
  init_USART();
29

30
  //Clear screen
31
  sendString("\033[2J");
32

33
  while ( 1 ) {
34

35
    pwm[0] = 1;
36
    pwm[1] = 7;
37
    pwm[2] = 15;
38
    pwm[3] = 33;
39
    pwm[4] = 40;
40
    pwm[5] = 80;
41
    pwm[6] = 140;
42
    pwm[7] = 255;
43

44
    update();
45
    _delay_ms(1000);
46

47
    pwm[0] = 255;
48
    pwm[1] = 140;
49
    pwm[2] = 80;
50
    pwm[3] = 40;
51
    pwm[4] = 33;
52
    pwm[5] = 15;
53
    pwm[6] = 7;
54
    pwm[7] = 1;
55

56
    update();
57
    _delay_ms(1000);
58

59
  }
60

61
  return 0;
62

63
}

Dass dieser Code in der Form keinen echten Nutzen hat, ist mir bewusst, 
sei jetzt aber erst einmal egal.

Einmal pro Sekunde wird das Array per Hand umgedreht. Das überprüfe ich 
via UART. Nun aber der Output, der mich vor ein Rätsel stellt:
1
1
2
7
3
15
4
33
5
40
6
80
7
140
8
255
9

10

11
255
12
0
13
80
14
40
15
33
16
15
17
7
18
1
19

20

21
1
22
7
23
15
24
33
25
40
26
80
27
0
28
255
29

30

31
255
32
0
33
80
34
40
35
33
36
15
37
7
38
1

Wo ist die 140 ab der zweiten "Ausgabe" hin? Entweder der Compiler macht 
Müll (was ich stark bezweifle), ich sehe den Fehler einfach nicht oder 
es gibt etwas über Arrays zu wissen, dass ich noch nicht weiß.

Wenn mir jemand helfen kann, wäre ich mehr als dankbar,

LG Peter
Ein String belegt immer 1 Zeichen mehr, weil er mit einem NUL-Zeichen 
terminiert ist. Dein s_val[3] kann also nur Zahlen von 0-99 aufnehmen. 
Bei 255 schreibt itoa() das NUL-Zeichen irgend wo hin und trifft 
scheinbar genau pwm[1]. Dann steht 0 drin und mit mit itoa() korrekt in 
"0" umgewandelt.

Also s_val[4] und der Fehler sollte weg sein.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.