mikrocontroller.net

Forum: Compiler & IDEs AVR verrechnet sich


Autor: Alan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um aus 8 bits(lsb first) ein byte zu machen verwende ich folgenden Code
int i = 0;
  
  int bit;
  char byte = 0;
  int c = 1;
  byte = 0;
  while(i < 8) {
    bit = get_bit();
    uart_puts(intToString(bit, 1));
    uart_putc(':');
    byte = byte + (bit*c);
    uart_puts(intToString(bit*c ,3));
    uart_putc('+');
    i++;
    c *= 2;
  }
  //uart_puts(":");

  uart_puts(intToString(byte, 3));
1:1+1:2+0:0+0:0+0:0+0:0+0:0+1:128+65411
Rein theoretisch müsste 131 rauskommen, warum kommt aber 65411 raus, 
obwohl nur drei Stellen (uart_puts(intToString(byte, 3));) ausgegeben 
werden sollen?

Autor: hownottobeseen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich kann dir zwar bei deinem konkreten Problem nicht helfen,
anstatt ewig viel zu multiplizieren (was auf dem AVR relativ lange 
dauert), kannst du Bits schubsen:

uint8_t i = 8;
int bit;
uint8_t out = 0;
while(i) {
  bit = get_bit();
  if(bit) out |= 128;
  out >>= 1;
  i--;
}

Viele Grüße

hownottobeseen

Autor: Waldemar F. (wally)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi. kenne mich mit den geräten noch nicht aus. aber 2^16 = 65536 ... 
das ist bniär 1 00000000 00000000 ...
oder aber auch darstellbar als eigentlich negative Zahl
11111111 11111111
vielleicht findest du ja so dein fehler ;)
außerdem würde ich nicht so viele rechnungen machen sondern 
bitoperatoren verwenden. google hilft da mit einem haufen pdfs scripte 
anleitungen beispielen usw.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Datentyp char kann signed oder unsigned sein (liegt im Ermessen des 
Compilers). Ändere "char byte = 0;" in "unsigned char byte = 0;".

PS: Hat dir mein Vorschlag für das get_byte nicht gefallen?
Beitrag "Re: Code funktioniert nur außerhalb einer Funktion richtig"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.