Hallo, allerseits! Ich habe eine Frage zu der Routine printf() unter Codevision. Läßt sich diese Routine so modifizieren, daß sie immer erst einen bestimmten Portpin nach dem Pegel abfragt, bevor sie ein Zeichen rausschickt? Und wenn ja, wo? Ich bin aus verschiedenen Gründen auf die Routine printf() angewiesen und kann leider nicht mit putchar() oder puts() arbeiten. Hat jemand eine Idee? MfG Kai Markus
na musst du nicht beim mc selbst erstmal ne funktion wie putchar oder getchar schreiben auf die du dann mit fopen zugreifst. in diese kannst du doch dann die abfrage einbauen. worüber schickst du die daten ? (uart, paralel, spi?) mfg eugen
kannst du nicht sowas machen: while (Pin gesetzt) printf("hallo");
In der stdio.h, die u vorher in dein Verzeichniss kopieren solltes und umbenennen z.b. mystdio.h, sind die Funktionen getchar und putchar als asm-Code hinterlegt. Alle Funktionen, auch printf rufen im Ende diese Funktionen auf. Wenn du hier den asm-Code so änderst, dass ein Zeichen nur ausgegeben wird wenn dein Pin gesetzt ist wird sich putchar auch so verhalten und damit auch printf. So bekommst du eine syncrone Kommunikation. Die Funktion wartet bis das Bit gesetzt ist. Wenn du aber weiter arbeiten willst und die Bytes versendet werden sollen wenn das Bit gesetzt ist, assyncron im Hintergrund sozusagen, solltest du mit purchar in einen Puffer schreiben. Der dann via Interrupt oder in der Warteschleife im Main ausgesendet wird, dass musst du dann wieder normal im Programm machen.
Hallo, allerseits. Vielen Dank erstmal für Eure Antworten. Ich bin etwas erstaunt, diese Anfrage im Forum Allgemein wiederzufinden; irgendwie war sie auch ein paar Tage verschwunden... Aber zu dem Problem: ich betreibe ein Grafikdisplay von Electronic assembly am UART und möchte mit printf() eine formatierte Ausgabe von einem Zahlenwert machen. Leider ist das Display mit anderen Ausgaben gut beschäftigt und der Datenpuffer vom Display nur 24 Byte groß, so daß ich vor dem Versenden von JEDEM Zeichen erst mit der Leitung CTS prüfen muß, ob ein weiteres Zeichen angenommen werden kann. Ich möchte deshalb printf nutzen, weil ich (bequem bin und) auf die formatierte Ausgabe von Variablen nicht verzichten möchte. Also werde ich mir die stdio.h mal anschauen. Ich hatte immer vermutet, den Code von printf() irgendwo auch als C-sourcefile zu finden. Aber Assembler tuts ja auch. Vielen Dank zunächst mal für die Hilfe! Greetz Kai Markus
@Kai Wie oben bereits beschrieben, verwenden alle output und input-Funktionen im Ende die getchar bzw. putchar Funktion und die ist praktischerweise in der stdio hinterlegt. Ich kann nur wenig Assembler, die Funktion ist aber so simpel, dass es mit wenig Aufwand möglich ist hier eine Änderung, wie die das du erst das CTS-Signal überprüfst einbauen kannst. Ich würde dass einfach in C schreiben kompilieren und mir den Output im .asm-File ansehen und das was ich da gerlernt habe entsprechend in der mystdio hinterlegen - Probiers mal aus und berichte, würd mich intersessieren!
Hallo! Habs ausprobiert und in die Bibliotheksdatei Stdio.lib in die Funktion putchar() einfach folgende Zeile vor den Assemblertext eingefügt: while(PIND.3==1); An diesem Portpin hängt die RTS-Leitung vom Display. Die ist auf logisch High, solange der Displaypuffer voll ist. Kann das Display neue Zeichen annehmen, wechselt die Leitung auf Low. Ergebnis: klappt super, alle Ausgaben warten auf ein Handshake vom Display. Vielen Dank für Eure Hilfe! Kai Markus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.