2021-08-17 11:22 AM
Hi Guys,
I would check if someone could help me here with a small projecting I'm trying to build.
I have project that sends MQTT (from LwIP) messages periodically using 3 CMSISv2 tasks (i send them with different time intervals, some with 1s and others with 5s).
The messages have approximately the following sizes: 9, 58 and 362 chars.
After sending some of them, all of them stop being sent :(
The piece of code where the code seems to occur is in the LwIP libraries, mqtt.c:
r = mqtt_create_request(client->req_list, LWIP_ARRAYSIZE(client->req_list), pkt_id, cb, arg);
if (r == NULL) {
return ERR_MEM;
}
I tried to disable the task that sends the biggest message and seems to work fine (didn't tested for more than 1/2 hours)
I also added a Mutex to make sure only one task at time is sending a message (not sure if it helps).
Some more info regarding the configuration configure in CubeMX:
Thread Stack Sizes: 2048
FreeRTOS Heap Size: 30760
LwIP MEM SIZE: 16360.
Not sure what other values could be relevant to try help solve the problem.
Thanks in advance,
Leandro
2021-08-17 01:00 PM
So does it fail with a memory error?
Do you have a resource leak when it comes to freeing memory, or double-freeing resources?
Check exit/failure paths.
Perhap wrap the heap allocation/release to monitor for issues there.
Track who is allocating the memory. Match the release of each.
Build something to walk the heap looking for orphans or fragmentation issues.
2021-08-17 02:54 PM
Yeaps, when the problem starts occurring the if condition evaluates to true.
I think I need to debug a bit more but LwIP code is very complex.
How can i know which version of the LwIP CubeMX uses? Is the latest?
2021-08-21 02:53 PM
I think i fixed the problem by increasing the priority of the thread task that sends the bigger message and increasing the RING size (MQTT_REQ_MAX_IN_FLIGHT) from 4 to 10.
At least after 2 hours still sending messages normally.