Hallo,
leider kommt der alte Beitrag nicht mehr hoch, daher ein neuer:
Crosssworks kennt die printf Funktion wie gehabt durch den gcc und
leitet sie in einer internen Bibliothek auf __debug_printf() um, das ist
die für diese Entwicklungsumgebung definierte Debug Schnittstelle, die
über das JTAG Interface auf ein virtuelles Terminal schreibt. Diese
Funktion ist nicht portierbar. Sehr nützlich für die
Programmentwicklung, es lassen sich auch Dateien damit auf die Platte
schreiben... aber eben nur wenn der JTAG Stecker drin ist und Debug
Infos mit kompiliert wurden.
Der Prototyp von putchar heisst: int __putchar(int ch) und liegt in der
stdio.h drin. Alles was dahinter kommt liegt nur als Object File vor.
Die Hilfe gibt leider auch nicht viel her.
1 | If you need to output to a physical device, such as a UART, the following
|
2 | notes will help you:
|
3 |
|
4 | * If the character cannot be written for any reason, putchar must return EOF.
|
5 |
|
6 | * The higher layers of the library do not translate C's end of line
|
7 | character '\n' before passing it to putchar. If you are directing output
|
8 | to a serial line connected to a terminal, for instance, you will most
|
9 | likely need to output a carriage return and line feed when given the
|
10 | character '\n' (ASCII code 10).
|
Heisst das jetzt, dass ich nur die __putchar Funktion überschreiben
muss, dort drin meinen Uart Code plazieren und die Sonderzeichen
gesondert erzeugen muss?
Die andere Sache ist die Schreibweise von Interruptfunktionen. Koch da
eigentlich jeder sein Süppchen, also zB keil anders als gcc usw?
Bei mir sieht ein Prototyp für eine ISR so aus:
static void attribute ((interrupt("IRQ"))) timer0ISR(void);
(wobei ich den Sinn hinter dem Attrbute nicht verstehe...)
Eingeschaltet werden sie mit: __ARMLIB_enableIRQ();
Bei Keil wieder so mit dem Keyword _irq.
void UART0Handler( void ) __irq;