mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC / Printf über UART


Autor: schnudl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein erstes PIC Programm auf der selbstgestrickten dsPIC Platine:

Kann  mir jemand sagen, wieso das printf im folgenden (Test)Beispiel nur 
den string 123456 ausgibt und die 7 verschluckt?
Gemäss Librarryreferenz muss man eine Hilfsfunktion write bereitstellen, 
die vom printf (und anderen Funktionen aus stdio) aufgerufen wird.

Die Funktion wird für jedes Zeichen in printf aufgerufen mit length = 1.
Aber eben nicht für das letzte!

Bin ich nun blind, oder ist das ein Bug/Feature...?

#include <p30f4013.h>
#include <stdio.h>

void initUART2(int baudrate, int fcy);  
int write(int handle, void *buffer, unsigned int len);

int main(void)
{
  int i=0;
  
  char buffer[] = "1234567";
  
  i=9600;
  
  initUART2(i, 10); // CPUclk = 10MHz
  printf("%s", buffer);
  return 0;
}

void initUART2(int baudrate, int fcy)
{
  volatile UxMODEBITS *umode = &U2MODEbits;
  volatile UxSTABITS *ustatus = &U2STAbits;
  volatile unsigned int *brg = &U2BRG;  
  
  *brg = (unsigned int) (fcy*1.e6/(16.*baudrate)-1.);  
  
  umode->UARTEN = 1;
  umode->LPBACK = 0;
  umode->ALTIO = 0;
  umode->ABAUD = 0;
  umode->PDSEL = 0;
  umode->STSEL =0;
  
  ustatus->UTXISEL = 1;
  ustatus->UTXBRK = 0;
  ustatus->UTXEN = 1;
  return;
}  


int write(int handle, void *buffer, unsigned int len) 
{
int i;
volatile unsigned int c;

volatile UxSTABITS *ustatus = &U2STAbits;
volatile unsigned int *txreg = &U2TXREG;

for (i = 0; i<len; i++)
{
  while ((ustatus->TRMT) == 0);
  c = ((unsigned int *)buffer)[i]; 
  *txreg = c;
}
return(len);
}

Autor: Analog (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mach doch mal <=len , also for (i = 0; i<=len; i++)

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.