Forum: FPGA, VHDL & Co. lwIP accept problem


von Martin S. (martin91)


Lesenswert?

Hallo!

Ich habe ein problem mit dem lwip. Ich möchte mich mit meinem PC über 
ethernet zum FPGA verbinden und dann daten vom FPGA empfangen. Ich 
verwende ein virtex5 FPGA mit dem xilkernel als OS. Das klappt auch ganz 
gut, jedoch maximal 4 mal.

wenn ich mich öffter verbinden möchte bleibt die lwip_accept() funktion 
irgendwo hängen und alles danach wird nicht mehr ausgefürt.
Ich lasse mir vor und nach der funktion jeweils ein print ausgeben.

weiß jemand woran das liegen kann?

danke martin

1
int sock, new_sd;
2
struct sockaddr_in address, remote;
3
int size;
4
  
5
/* create a TCP socket */
6
if ((sock = lwip_socket(AF_INET, SOCK_STREAM, 0)) < 0)
7
  return;
8
    
9
/* bind to port of CAN controller at any interface */
10
address.sin_family = AF_INET;
11
address.sin_port = htons(ethport);
12
address.sin_addr.s_addr = INADDR_ANY;
13
if (lwip_bind(sock, (struct sockaddr *)&address, sizeof (address)) < 0)
14
  return;
15
    
16
/* listen for incoming connections */
17
lwip_listen(sock, 5);
18
19
size = sizeof(remote);
20
  
21
while (1) {
22
        /* block */
23
  print("Info: lwip_accept() block\n\r");
24
  new_sd = lwip_accept(sock, (struct sockaddr *)&remote, &size);
25
  print("Info: lwip_accept() accepted\n\r");
26
    
27
  sys_thread_new(rx_thread, (void*)new_sd, DEFAULT_THREAD_PRIO);
28
  print("<GATEWAY Thread> Info: New RX Thread\n\r");
29
}

von Martin S. (martin91)


Lesenswert?

Was mir auch noch aufgefallen ist, je mehr threads laufen, desto weniger 
verbinungen bekomme ich. Im endeffekt sollen etwas mehr als 20 threads 
permanent laufen, plus die threads die durch die verbindungen erzeugt 
werden.

bei unter 10 laufenden thread schaffe ich max. 4 verbindungen, bei etwa 
15 nur noch 2 verbindungen, und wenn ich alle threads starte bekomme ich 
gar keine verbindung.

kann das an einer resoucenknappheit liegen, zb. speicher?

jedoch kann ich 20 threads problemlos starten, und wenn ich weniger als 
10 starte und mich 4 mal verbinde bin ich immer noch weit unter 20 
threads.

also wenn es an einer resoucenknappheit liegen sollte, dürfte ich doch 
gar nicht 20 threads starten können? oder liege ich da falsch?

hat jemand eine idee?
würde mich über jede hilfe freuen!

lg martin

von Martin S. (martin91)


Lesenswert?

falls jemand an der lösung interessiert ist, es hat geholfen in den 
Software Platform Settings des EDK die maximalanzahlen der threads und 
semaphoren zu erhöhen.

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.