Forum: Compiler & IDEs Greth von Gaisler


von Leon3Freak (Gast)


Lesenswert?

hi,

Ich beschäfftige mich momentan mit dem GRETH (Leon3) von Gaisler.
Ich hab ein Programm geschrieben, das Daten empfangen soll und mir diese 
dann über ein printf ausgibt. Ich bekomm aber immer nur Schrott 
ausgegeben.
Ich weiß nun nicht weiter.
Die Beispielprogramme von Gaisler halfen mir auch nicht weiter.


In der yahoo Mailingliste hab ich schon geschrieben. Kam aber noch keine 
Antwort, deshalb frag ich hier. Vielleich kennt sich der eine oder 
andere mit dem GRETH aus.

In der Greth.pdf von Gaisler stand das man zusätzlich zum Descriptor 
noch einen Pointer auf den Datenbereich des Descriptors braucht. Wie 
genau setzt man das um?

Was fehlt meinem Code noch?

Freue mich über jede Antwort :)

Gruß Leon3Freak
1
#include <stdlib.h>
2
#include <time.h>
3
#include "greth_api.h"
4
5
//Auf 0 setzen, da kein GBit verwendet wird
6
#define GRETH_GBIT 0
7
8
//Verbindungsgeschwindigkeit in Mbit. Kann man auf 10 / 100 / 1000 setzen 
9
#define GRETH_SPEED 100
10
11
// Hier auf 1 setzen um Voll Duplex zu nutzen oder 0 für Halb Duplex
12
#define GRETH_FULLDUPLEX 1
13
//Muss man anpassen! GRMON info sys
14
#define GRETH_ADDR 0x80000f00
15
16
static void build_arp_auth(unsigned int source_addr_msb,
17
          unsigned int source_addr_lsb, unsigned int sender_ip,
18
          unsigned int target_ip, unsigned char *buf, unsigned int *len);
19
20
struct greth_info greth;
21
22
int main(void) {
23
    //Zeiger um Speicher zu allokieren
24
    int *len;
25
    //Receive Status
26
    struct rxstatus *rxs = malloc(sizeof(struct rxstatus));
27
    //Speicher allokieren
28
    len = malloc(sizeof(int));
29
    //Arp Paket erzeugen
30
    unsigned char arpbuf[42];
31
    //Empfangspuffer
32
    unsigned char rxbuf[256];
33
    //Ein ARP Paket erzeugen zu authentifizierung beim PC
34
    build_arp_auth(0xDEADBE, 0xEF0020, 0xC0A80016, 0xC0A80001, arpbuf,len);
35
    //Setze die Grethadresse. Wichtig fürs initialisieren!
36
    greth.regs = (greth_regs *) GRETH_ADDR;
37
    //Initialisiere den Greth
38
    greth_init(&greth);
39
    printf("Greth wurde initialisiert!\n");
40
   //Registrieren beim PC
41
   greth_tx(42,arpbuf,&greth);
42
   //Empfange Daten
43
   while (!greth_rx(rxbuf, &greth));
44
   printf("Empfangspuffer Inhalt: ");
45
   //Gebe den Inhalt des Empfangspuffers aus <---- Hier gibt er nur Schrott aus 
46
   printf(rxbuf); //printf("%u",rxbuf);
47
   printf("\n");
48
   //Check Receive
49
   while (!greth_checkrx(len, rxs, &greth));
50
   printf("RX Status");
51
   printf("\n");
52
   printf("---Ende des Grethtest---");
53
    //Programmende
54
    return 0;
55
}

von Skua (Gast)


Lesenswert?

Leon3Freak schrieb:
> //Auf 0 setzen, da kein GBit verwendet wird
> #define GRETH_GBIT 0
>
> //Verbindungsgeschwindigkeit in Mbit. Kann man auf 10  100  1000 setzen
> #define GRETH_SPEED 100
>
> // Hier auf 1 setzen um Voll Duplex zu nutzen oder 0 für Halb Duplex
> #define GRETH_FULLDUPLEX 1

So ganz ohne Ahnung von Greth.
Wo werden diese Konstanten denn genutzt?

Deine Initialisierung scheint unvollständig.

von 900ss (900ss)


Lesenswert?

Leon3Freak schrieb:
> //Gebe den Inhalt des Empfangspuffers aus <---- Hier gibt er nur Schrott aus
>    printf(rxbuf); //printf("%u",rxbuf);

Du erwartest ernsthaft druckbare ASCII-Zeichen im rxbuf?
Da stehen doch nur Hexwerte drin. Da einfach printf drauf loszulassen 
ist wohl ziemlich einfach gedacht.
Weiter solltest du dich mit dem TCP/IP Protokoll beschäftigen, damit du 
verifizieren kannst, dass der Inhalt in rxbuf richtig oder falsch ist.
Ob dein Programm überhaupt das richtige macht, kann ich so nicht sagen.

Vollständigen Sourcecode ALS ANHANG ist auch wichtig. Aus einem Fragment 
kann mann nichts erkennen, so wie der Poster über mir.

Es wäre auch gut, wenn du schon so exitische Hardware verwendest, dass 
du kurz erklärst, was GRETH und LEON3 denn sind.
Der GRETH ist der Ethernet-Controller von Gaisler Research und LEON3 
eine 32-Bit CPU mit SPARC Architektur, ebenfalls von GR.

Ich glaube nicht, dass es hier viele Leute gibt, die diese Exoten
kennen :-)

Bist du der Dirk, der hier gefragt hat?
Beitrag "Leon3 interrupts testen"

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
Noch kein Account? Hier anmelden.