PIC / Printf über UART

Gast #786386
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...?

1
#include <p30f4013.h>
2
#include <stdio.h>
3

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

7
int main(void)
8
{
9
  int i=0;
10
  
11
  char buffer[] = "1234567";
12
  
13
  i=9600;
14
  
15
  initUART2(i, 10); // CPUclk = 10MHz
16
  printf("%s", buffer);
17
  return 0;
18
}
19

20
void initUART2(int baudrate, int fcy)
21
{
22
  volatile UxMODEBITS *umode = &U2MODEbits;
23
  volatile UxSTABITS *ustatus = &U2STAbits;
24
  volatile unsigned int *brg = &U2BRG;  
25
  
26
  *brg = (unsigned int) (fcy*1.e6/(16.*baudrate)-1.);  
27
  
28
  umode->UARTEN = 1;
29
  umode->LPBACK = 0;
30
  umode->ALTIO = 0;
31
  umode->ABAUD = 0;
32
  umode->PDSEL = 0;
33
  umode->STSEL =0;
34
  
35
  ustatus->UTXISEL = 1;
36
  ustatus->UTXBRK = 0;
37
  ustatus->UTXEN = 1;
38
  return;
39
}  
40

41

42
int write(int handle, void *buffer, unsigned int len) 
43
{
44
int i;
45
volatile unsigned int c;
46

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

50
for (i = 0; i<len; i++)
51
{
52
  while ((ustatus->TRMT) == 0);
53
  c = ((unsigned int *)buffer)[i]; 
54
  *txreg = c;
55
}
56
return(len);
57
}

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.