Hallo Forum!
Ich programmiere einen STM32F100 mit dem STM32VL-Discovery Board
(http://www.st.com/internet/evalboard/product/250863.jsp) mit der IAR
Workbench Kickstart 6.3 und probiere schon wie wild die printf-Funktion
zum laufen zu bekommen. Man muss sie ja "redirecten", also gewisse
Funktionen überschreiben um printf hardwarespezifisch anzupassen.
In der StandardPeripheralLibrary von ST ist ein Beispiel unter USART wie
man dies bewerkstelligen könnte:
1 | #include <stdio.h>
|
2 |
|
3 | #ifdef __GNUC__
|
4 | /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
|
5 | set to 'Yes') calls __io_putchar() */
|
6 | #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
|
7 | #else
|
8 | #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
|
9 | #endif /* __GNUC__ */
|
10 |
|
11 | // MAIN usw
|
12 |
|
13 | PUTCHAR_PROTOTYPE
|
14 | {
|
15 | /* Place your implementation of fputc here */
|
16 | /* e.g. write a character to the USART */
|
17 | USART_SendData(USART1, (uint8_t) ch);
|
18 |
|
19 | /* Loop until the end of transmission */
|
20 | while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
|
21 | {}
|
22 |
|
23 | return ch;
|
24 | }
|
Nur mault der Compiler dass er den Datentyp FILE nicht kennt.
Ich bin davon ausgegangen dass dieser in stdio.h definiert wird, was
aber bei mir nicht zu passieren scheint.
Die Funktion printf kann ich aber ohne Fehler aufrufen, nur wird eben
nichts gesendet.
Ich vermute es liegt an bestimmten Linkereinstellungen oder soetwas in
der Art.
Vielen Dank schonmal!
Mfg
Christoph