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 | }
|