Hi,
ich habe ein Problem mit meinem lwip. Nachdem ca. 5-6 mal ein request
verarbeitet wurde, bleibt der controller stehen - ich lande in der _sbrk
function (Heap <=> Stack Kollision).
In der 'serve' function reserviere ich selbst doch gar keinen speicher.
Passiert doch alles auf dem Stack. Klar lwip - der netbuf - aber der
wird ja unten ueber netbuf_delete(inbuf) wieder freigegeben.
Bezueglich Heap Speicher mit free freigeben stellt sich mir allerdings
die Frage wie das gehen soll. Der HeapPointer wird doch immer weiter
hoch geschoben. Egal ob free irgendwas davor freigibt, ein weiteres
reservieren schiebt den HeapPointer immer weiter oder nicht?
conststaticcharhttp_index_html[]="<html><head><title>Congrats!</title></head><body><h1>Welcome to our lwIP HTTP server!</h1><p>This is a small test page, served by httpserver-netconn.</body></html>";
Also wenn ich _sbrk mit einem breakpoint versehe, ist incr immer
positiv, nie negativ.
Ist folgendes Beispiel falsch?
Der HeapPointer wird immer weiter geschoben, was passiert mit dem
freigegebenen Speicher von ptr_m? Kuemmert sich newlib nano darum diesen
Speicher wieder zu verwenden? Bei mir scheint das nicht der fall zu
sein.
HeapPointer
HeapStart 0x10000000
malloc->_sbrk(1000) ptr_m 0x10001000
malloc->_sbrk(1000) ptr_n 0x10002000
free(ptr_m) 0x10002000
malloc->_sbrk(1000) ptr_k 0x10003000
Pascal H. schrieb:> ich lande in der _sbrk> function (Heap <=> Stack Kollision).
Dreh mal and der Optionen:
#define MEM_SIZE
#define EMAC_RECIVE_THREAD_STACKSIZE
#define DEFAULT_THREAD_STACKSIZE
#define TCPIP_THREAD_STACKSIZE
in der lwipopts.h
m.f.G.
Dieter
Pascal H. schrieb:> In welche Richtung?
Hängt von der Hardware ab. Ich hab STM32F7 und aase ein wenig der
Stabilität zu liebe.
#define DEFAULT_THREAD_STACKSIZE 512
#define TCPIP_THREAD_STACKSIZE 1536
#define MEM_SIZE (24*1024)
#define PBUF_POOL_SIZE 20
#define PBUF_POOL_BUFSIZE 1524
#define MEMP_NUM_PBUF 50
#define MEMP_NUM_UDP_PCB 10
#define MEMP_NUM_TCP_PCB 20
#define MEMP_NUM_TCP_PCB_LISTEN 20
Ich musste fürs debuggen erhöhen da kommen ja noch Printaufrufe dazu.
Das gibt so 100 Kilo Ram aber ich hab ja 320.Und da ist auch noch mein
Webserver mit drin der 10 Threads für sich braucht.
Ich hab einen lpc1768 mit 32k RAM.
Diese Function wird bei jedem request aufgerufen. Ich gebe da den
heapPointer aus. Komischerweise schiebt sich der nicht immer weiter aber
nach 5-6 request erhoeht er sich immer.
Und nach ca 20 request gibt meine sbrk 0 zurueck da ich bei __get_MSP()
angelangt bin.
Ich verstehe nicht warum immer mehr heap reserviert wird.
Auch wenn ich nicht sprintf verwende und als body