PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SerWrite vereinfachen (SerPrint nachbauen)



the.speciali
18.10.2009, 17:21
Hi an alle!

Ich bastle gerade für unsere Schule ein größeres Asuro Programm zusammen.

Das Problem ist: ich möchte möglichst die originale Asuro-Lib verwenden die auf der CD mitgeliefert wird um so den Einstieg zu vereinfachen ohne jetzt dafür eine extra Lib zu installieren.
Aber da ich auch zum Teil sehr faul bin ( :-$ ) hab ich keine Lust jedes mal wenn ich SerWrite benutze (ich benutze sehr viele davon um den Programmablauf dann am Hyperterminal beobachten zu können) jedesmall die Zeichen zu zählen.

So dachte ich mir ich bau mir einfach die SerPrint funktion nach:

void SerPrint (char * data)
{
unsigned char i = 0;

while (data [i] != 0x00)
UartPutc (data [i++]);
}


Das nächste Problem: UartPutc ist auch nur in der erweiterten Lib vorhanden. Mein erster Versuch mit:


void SerCPrint (char* data)
{
int i;

for (i = 0; i < sizeof (data); i++)
{
SerWrite (data[i], i);
}
}

klappte leider nicht. Er gibt einfach nichts aus :-k

Kann mir irgendjemand vielleicht helfen? Ich bedanke mich jetzt schon mal. Einer der gründe dafür ist vielleicht das die länge beim SerWrite auch als unsigned char definiert ist. Ich kann mir aber gerade schwer eine Zählschleife mit einem char vorstellen :D

Irgendjemand vielleicht eine geniale Lösung dafür?

the.speciali

radbruch
18.10.2009, 19:32
Hallo

Ich denke nicht, dass man das schon als genial bezeichenen kann:

#include "asuro-probot.h"
#include "asuro-probot.c"

void SerPrint(unsigned char *data)
{
unsigned char i = 0, j=0;
UCSRB = 0x08; // enable transmitter
while(data[i]) // nächstes Zeichen auf Endekennung 0 prüfen
{
if (UCSRA & 0x20) { // wait for empty transmit buffer
UDR = data[i++]; // Zeichen ausgeben
}
}
while (!(UCSRA & 0x40));
for (i = 0; i < 0xFE; i++)
for(j = 0; j < 0xFE; j++);
}
int main(void)
{
int i;
char zeichenkette[8]="testtext";
Init();

while(1)
{
SerWrite("SerWrite: abcABC123\n\r", 21);
SerPrint("SerPrint: abcABC123\n\r");
SerPrint(zeichenkette);
SerPrint("\n\r");

for(i=500; i--; Sleep(72));
}
}
In C werden Zeichenketten mit dem Zeichen 0 abgeschlossen, deshalb überprüft diese Version von SerPrint() lediglich, ob das nächste zu sendende Zeichen >0 ist. Das Beispiel oben funktioniert bei mir zufriedenstellend, die Ausgabe im Terminal sieht so aus:

SerWrite: abcABC123
SerPrint: abcABC123
testtext
SerWrite: abcABC123
SerPrint: abcABC123
testtext


Gruß

mic

the.speciali
18.10.2009, 21:46
Dankeschön für des Programm.
Und es muss ja nicht immer als genial bezeichnet werden, solang es möglichst einfach seinen Zweck erfüllt ;)

beste Grüße
the.speciali