Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - Horst

Seiten: [1]
1
Hey... sry, wegen dem Besch****** Code.... hatte heute morgen echt keinen Nerv mehr..  :-P

Also gut, ich glaube du hast was falsches verstanden.

also die Funktion read_serial() gibt immer nur EIN ZEICHEN von der RS232 zurück. Ließt es also aus dem Speicher.

Blöderweiße ist es total dumm jedes mal im Programm selber die Teile zusammen zu stückeln. Deswegen möchte ich mit der Funktion ReadSerial() einen String zusammen setzten. Also als: const char

Ablauf ist folgender:
~Funktion startet.
Wartet bis serial_received() = 1 zurück gibt. (Daten im Speicher)
~Schleife starten
Jedes Zeichen mittels read_serial() speichern
~Schleife unterbrechen wenn \r\n gefunden wird
~Zeichenkette ausgeben!
~Funktion beendet.

Sprich puts(ReadSerial()); könnte mir dann folgenden Text anzeigen den ich zuvor mittels Terminal an die Maschine gesendet habe. z.B. gebe ich per Terminal 'H' 'e' 'l' 'o' ein unddrücke Return.  Der Terminal sendet jetzt die Steuerzeichen '\r' '\n';
Die Funktion ReadSerial() müsste mir jetzt also 'Helo' zurück geben.

Vielen dank für deine Mühe
und
Liebe Grüße
Horst
2
Lowlevel-Coding / Serial Port - lesen! - Kleiner Aussetzer xD
« am: 30. March 2010, 00:45 »
Hey...

also irgendwie komme ich gerade net mit... xD Ich weiß net ob es daran liegt das ich schon ewig nicht in C programmiert habe, aber ich bekomme es net mehr hin aus den Pointer einen String zusammen zu setzen.

// ++++++++++++++++++++++++++++++++++  R S 3 2 3  ~  C O M 2  ++++++++++++++++++++++++++++++++++++++
#define PORT 0x2f8   /* 3f8 = COM1 2f8 = COM2*/

void init_serial() {
   outb(PORT + 1, 0x00);    // Disable all interrupts
   outb(PORT + 3, 0x80);    // Enable DLAB (set baud rate divisor)
   outb(PORT + 0, 0x03);    // Set divisor to 3 (lo byte) 38400 baud
   outb(PORT + 1, 0x00);    //                  (hi byte)
   outb(PORT + 3, 0x03);    // 8 bits, no parity, one stop bit
   outb(PORT + 2, 0xC7);    // Enable FIFO, clear them, with 14-byte threshold
   outb(PORT + 4, 0x0B);    // IRQs enabled, RTS/DSR set
}

int serial_received() {
   return inb(PORT + 5) & 1;
}

char read_serial() {
   while (serial_received() == 0);

   return inb(PORT);
}

int is_transmit_empty() {
   return inb(PORT + 5) & 0x20;
}

void write_serial(char a) {
  switch(a) {
     case '\n':
a = 13;
        break;
     case '\r':
        a = 10;
        break;
     default:
        a = a;
        break;
    };
   
   while (is_transmit_empty() == 0);

   outb(PORT,a);
}

void SendSerial(const char *s)
{
    while(*s)
        write_serial(*(s++));
    return;
};

const char ReadSerial()
{
   int read;
   char zeichen;
   
   do
   {
    read = read_serial();   // puts("~ | \n", 0x0700,read_serial());

     }
   } while(read != 0);
   return zeichen;
}

// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Wie man sieht funktioniert eigentlich alles, bis auf das lesen. Das Senden von Strings habe ich über SendSerial() gemacht. Klappt auch super. Aber ich bekomms gerade net hin die einzellen Zeichen von read_serial() zu einem String zusammen zu setzen und Ascii(10) zu \r und Ascii(13) zu \n zu ersetzen. =(

Wer kann mir da mal schnell aus der Gedächnis Lücke helfen ?  =)

Würde mich sehr freuen.

L.G.
Horst
3
Lowlevel-Coding / Re: Zufallszahl generieren
« am: 26. March 2010, 22:18 »
Zitat
Hoffe das hilft Dir weiter, ...

Hey..  ja, das ist schon mal was. Aber wie ermittel ich die BIOS - Zeit?

L.G.
Horst
4
Lowlevel-Coding / Re: Zufallszahl generieren
« am: 26. March 2010, 13:44 »
Könnte das jemand in C übersetzen? Bin nämlich total schlecht in ASM. Die Funktion rand() von C bringt mir nichts, da ich keine Include's benutze.

L.G.
Horst
Seiten: [1]

Einloggen