Howdy. Ik ben bezig met het schrijven van code voor een microchip pic32 op basis van FreeRTOS. Hierin lopen een aantal tasks (zeg: threads), die allemaal kleine (1 tot 16 bytes) messages naar elkaar doorsturen. Hiervoor gebruik ik per message een malloc-call voor de 'payload'. Nadat een message is afgehandeld volgt er een free(). Elke thread krijgt gegarandeerd elke 10ms tijd om z'n ding te doen.
Aangezien er 1000 tot 5000 pakketjes per seconde worden aangemaakt wil ik dit gaan optimaliseren. Nu heb ik me bedacht dat als ik, zeg, 8kb aan geheugen alloceer (dmv malloc of gewoon door een grote array te definieren), ik uit deze buffer geheugen kan toewijzen aan de messages. Aangezien de messages allemaal kort leven kan ik dan een circular buffer gebruiken, zonder bij de houden of het geheugen al vrijgegeven is. Dit zou moeten werken mits de buffer groot genoeg is. Een klein detail is dat ik interrupts en de task scheduler even stil moet zetten op het moment dat ik geheugen moet toewijzen.
Mijn vraag: is deze gedachte juist? Heeft iemand ervaring met dergelijke implementaties en wellicht tips of mogelijke valkuilen waar ik op moet letten? Zijn er betere manieren om de malloc/free overhead te voorkomen?
Dank!
Aangezien er 1000 tot 5000 pakketjes per seconde worden aangemaakt wil ik dit gaan optimaliseren. Nu heb ik me bedacht dat als ik, zeg, 8kb aan geheugen alloceer (dmv malloc of gewoon door een grote array te definieren), ik uit deze buffer geheugen kan toewijzen aan de messages. Aangezien de messages allemaal kort leven kan ik dan een circular buffer gebruiken, zonder bij de houden of het geheugen al vrijgegeven is. Dit zou moeten werken mits de buffer groot genoeg is. Een klein detail is dat ik interrupts en de task scheduler even stil moet zetten op het moment dat ik geheugen moet toewijzen.
Mijn vraag: is deze gedachte juist? Heeft iemand ervaring met dergelijke implementaties en wellicht tips of mogelijke valkuilen waar ik op moet letten? Zijn er betere manieren om de malloc/free overhead te voorkomen?
Dank!