Probleme mit avr-gcc stdout unter Linux

Gast #4383285
Lesenswert?
• ▲
▼
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 #4383385
Lesenswert?
• ▲
▼
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

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.

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.