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  | }
  |