Probleme mit avr-gcc stdout unter Linux

Gast #4383285
Hallo zusammen,
ich habe nach einigem hin und her zu Linux gewechselt und versuche 
gerade meine AVR Toolchain einzurichten. Konkret will ich einfach grad 
nur ein simples Testprogramm schreiben, dass über den UART zeichen 
empfängt und sendet. Dafür will ich stdin und stdout mit meine Streams 
laden und printf, scanf nutzen. Leider funktioniert das nicht wirklich. 
Der Controller sendet einfach immer '>' und erwartet keine Eingabe.. 
Wenn ich den Code mit AVR Studio compaliere funktioniert alles und wenn 
ich das elf file von AVR Studio mit avr dude flashe funkioniert auch 
alles.  Hat jemand eine Ahnung woran das liegen könnte
Grüße koro

main.c
1
#include <avr/io.h>
2
#include <stdio.h>
3
#include "usart.h"
4

5
int main(){
6
  FILE uart_output = FDEV_SETUP_STREAM(&iUSARTPutChar, NULL, _FDEV_SETUP_WRITE);
7
        FILE uart_input = FDEV_SETUP_STREAM(NULL, &iUSARTGetChar, _FDEV_SETUP_READ);  
8
  char cZeichen;
9
  vUSARTInit();
10
  stdout = &uart_output;
11
  stdin = &uart_input;
12
  while(1){
13
    printf(">\n\r");
14
    scanf("%c",&cZeichen);
15
    printf("%c",cZeichen);
16
  }
17
  return 0;
18
}

usart.c
1
#include "usart.h"
2

3
void vUSARTInit(){
4
  UCSRA = 0x00;
5
  UCSRB = (1<<RXEN) | (1<<TXEN);
6
  UCSRC = (1<<UCSZ1) | (1<<UCSZ0) | (1<<URSEL);
7
  UBRRL = 7;
8
  UBRRH = 0;
9
}
10

11
int iUSARTPutChar(char _cZeichen, FILE *_ptStream){
12
  while(!(UCSRA & (1<<UDRE)));
13
  UDR = _cZeichen;
14
  return 0;
15
}
16

17
int  iUSARTGetChar(FILE *_ptStream){
18
  while(!(UCSRA & (1<<RXC)));
19
  return UDR;
20
}

Kommand line befehle
avr-gcc -c -mmcu=atmega16 usart.c -o usart.o
avr-gcc -c -mmcu=atmega16 main.c -o main.o
avr-gcc main.o usart.o -o dummy.elf
Gast
Schau mal, wie ich in meiner Hello-World Kopiervorlage die standard 
Streams mit dem seriellen Port verbunden habe. 
http://stefanfrings.de/avr_hello_world/index.html

Ich habe FDEV_SETUP_STREAM nur einmal verwendet, kombiniert für read und 
write Operationen. Vielleicht ist das der Knackpunkt.

Ansonsten würde ich mal prüfen, ob die Funktion iUSARTGetChar() wartet, 
bis sie ein Zeichen empfangen hat. Denn das soll sie tun.

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.